[ https://issues.apache.org/jira/browse/ARTEMIS-508?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Francesco Nigro updated ARTEMIS-508: ------------------------------------ Description: https://github.com/franz1981/activemq-artemis/tree/34b7697a5d04e1979908f1153956daba21f5d86e/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/mapped I've implemented in the package org.apache.activemq.artemis.core.io.mapped a new memory mapped SequentialFile implementation to support fast write/read operations for OSs that cannot use libaio or need RAM access performances on standard Files. The implementation is not thread-safe (it is needed?) and needs more buffer checks (or a complex implementation). I'm using the Netty's PlatformDependent class to perform bulk copy without safepoint's poll issues. The implementation is simple but it's good as a proof of concept to compare it against the others: i' ve added a coordinated-omission performance test to measure the latency of a directWrite + OS jitter. https://github.com/franz1981/activemq-artemis/blob/34b7697a5d04e1979908f1153956daba21f5d86e/artemis-journal/src/test/java/org/apache/activemq/artemis/core/io/aio/SequentialFileBench.java The write tests show performances typical of memory mapped file: quoting from Peter Lawrey "for burst of up to 10% of the main memory, it can sustain rates of 1 - 3 GB/second written. e.g. A laptop with 8 GB of memory might handle bursts of 800 MB at a rate of 1 GB per second. A server with 64 GB of memory might handle a burst of 6.5 GB at a rate of 3 GB per second". I want to improve the quality of the implementation by: 1- enforcing the original SequenceFile contract 2- replacing synchronized reads/writes with lock-free versions 3- replacing the EventExecutor with a Lock-Free (even wait-free) Array Queue + EventLoop's poller 4- addressing all the False-Sharing issues around all the AtomicLong instances used 5- reducing the garbage produced for the fast paths to 0 [6- expose try methods to allow direct flow control] [7- replacing the Semaphore based rate limiter with a lock free one] That's are all proposals, what do you think about it? Regards was: https://github.com/franz1981/activemq-artemis/blob/34b7697a5d04e1979908f1153956daba21f5d86e/artemis-journal/src/test/java/org/apache/activemq/artemis/core/io/aio/SequentialFileBench.java I've implemented in the package org.apache.activemq.artemis.core.io.mapped a new memory mapped SequentialFile implementation to support fast write/read operations for OSs that cannot use libaio or need RAM access performances on standard Files. The implementation is not thread-safe (it is needed?) and needs more buffer checks (or a complex implementation). I'm using the Netty's PlatformDependent class to perform bulk copy without safepoint's poll issues. The implementation is simple but it's good as a proof of concept to compare it against the others: i' ve added a coordinated-omission performance test to measure the latency of a directWrite + OS jitter. The write tests show performances typical of memory mapped file: quoting from Peter Lawrey "for burst of up to 10% of the main memory, it can sustain rates of 1 - 3 GB/second written. e.g. A laptop with 8 GB of memory might handle bursts of 800 MB at a rate of 1 GB per second. A server with 64 GB of memory might handle a burst of 6.5 GB at a rate of 3 GB per second". I want to improve the quality of the implementation by: 1- enforcing the original SequenceFile contract 2- replacing synchronized reads/writes with lock-free versions 3- replacing the EventExecutor with a Lock-Free (even wait-free) Array Queue + EventLoop's poller 4- addressing all the False-Sharing issues around all the AtomicLong instances used 5- reducing the garbage produced for the fast paths to 0 [6- expose try methods to allow direct flow control] [7- replacing the Semaphore based rate limiter with a lock free one] That's are all proposals, what do you think about it? Regards > Sequential File Improvement + Performance Tests > ----------------------------------------------- > > Key: ARTEMIS-508 > URL: https://issues.apache.org/jira/browse/ARTEMIS-508 > Project: ActiveMQ Artemis > Issue Type: Improvement > Reporter: Francesco Nigro > Priority: Critical > Labels: feature, performance, test > > https://github.com/franz1981/activemq-artemis/tree/34b7697a5d04e1979908f1153956daba21f5d86e/artemis-journal/src/main/java/org/apache/activemq/artemis/core/io/mapped > I've implemented in the package org.apache.activemq.artemis.core.io.mapped a > new memory mapped SequentialFile implementation to support fast write/read > operations for OSs that cannot use libaio or need RAM access performances on > standard Files. > The implementation is not thread-safe (it is needed?) and needs more buffer > checks (or a complex implementation). I'm using the Netty's > PlatformDependent class to perform bulk copy without safepoint's poll issues. > The implementation is simple but it's good as a proof of concept to compare > it against the others: i' ve added a coordinated-omission performance test to > measure the latency of a directWrite + OS jitter. > https://github.com/franz1981/activemq-artemis/blob/34b7697a5d04e1979908f1153956daba21f5d86e/artemis-journal/src/test/java/org/apache/activemq/artemis/core/io/aio/SequentialFileBench.java > The write tests show performances typical of memory mapped file: quoting from > Peter Lawrey "for burst of up to 10% of the main memory, it can sustain rates > of 1 - 3 GB/second written. e.g. A laptop with 8 GB of memory might handle > bursts of 800 MB at a rate of 1 GB per second. A server with 64 GB of memory > might handle a burst of 6.5 GB at a rate of 3 GB per second". > I want to improve the quality of the implementation by: > 1- enforcing the original SequenceFile contract > 2- replacing synchronized reads/writes with lock-free versions > 3- replacing the EventExecutor with a Lock-Free (even wait-free) Array Queue > + EventLoop's poller > 4- addressing all the False-Sharing issues around all the AtomicLong > instances used > 5- reducing the garbage produced for the fast paths to 0 > [6- expose try methods to allow direct flow control] > [7- replacing the Semaphore based rate limiter with a lock free one] > That's are all proposals, what do you think about it? > Regards -- This message was sent by Atlassian JIRA (v6.3.4#6332)