/nanomq

Ultra low latency messaging kernel

Primary LanguageC++GNU General Public License v3.0GPL-3.0

NanoMQ

NanoMQ is a ultra low latency messaging kernel. It enables messaging between processes in much the same way as POSIX message queues but at sub-microsecond latencies. NanoMQ uses efficient wait-free ring buffers arranged in a complete graph. Each node can send messages to any other node, receiving nodes needs to exclusively own a CPU core or HyperThread. The ultra low latency can thus be achieved by avoiding context switches.

Building

Just run make. Requires recent GCC. Tests require Google Test.

Performance

On my Intel(R) Core(TM)2 Duo CPU T7500 @ 2.20GHz I get an average RTT of 250 ns and a throughput of 13M msg/s for a two node setup with 100 byte messages. It will be interesting to see measurements on multi CPU systems and the latency depending on which cache the cores share.

Use case

In high frequency trading (HFT) systems you want to separate feed handlers and order management systems (OMS) from strategy code in order to increase fault tolerancy and support live deployment of bug fixes or new strategies. NanoMQ allows you to separate these parts of a trading system into separate processes while keeping communication latencies to a fraction of a microsecond.

Resources

Git repository: http://github.com/rigtorp/nanomq

Copying

Free use of this software is granted under the terms of the GNU General Public License (GPL). For details see the file COPYING included with the NanoMQ distribution.