GitHub - hmbdc-dev/hmbdc: A headers only high performance C++ middleware framework/lib. See README for details. (original) (raw)

README

hmbdc is an open source headers only C++ framework and library built on top of various real-world tested lockfree algorithms that facilitate ultra low latency and high throughput messagin (inter-thread, inter-process and thru network) programming. It aims to take most out of the allocated hardware resources (memory, cores, NICs and switches) to achieve latency and throughput goals. It works as a framework but it can also be used as libraries to collaborate with other frameworks or extend existing middleware capability with 'zero-copy', 'reliable multicast', 'kernel bypassing' etc, etc.

Keywords and features:

What is this repository for?

Communication model

hmbdc offers both C++ Type Inferred Pub/Sub (TIPS) and the higher level Pub/sub On Topic String (POTS). You can either publish in form of C++ types or in form of bytes on different string topics. Here is an example pub/sub topology generated from C++ code (see TIPS function printNodePubSubDot):

Serialization/copying is only performed when it is absolutely necessary. The key concepts are Node and Domain

The communications within local host nodes are automatically carried out via shared memory. On top of that, user can also opt to use zero-copy messages to acheive the best latecy for communicating large messages between Nodes on the same host.

Performance

Test environment

Intra-host IPC

hmbdc IPC regular, 0cpy vs qperf

Inter-host Network

hmbdc tcpcast, rmcast vs qperf

How to reproduce the performance in your own env

See perf-sample.txt

Design/Doc

hmbdc design uses a mix of OO and C++ generic programming:

API are in doxygen format.

How do I build code in example and tools dir

  1. make sure you have the required lib in place: boost-dev package; (make sure you have the QNX or aarch64 cross compiling tools ready if you are building for them. for QNX, source the qnx set env script now)
  2. in hmbdc root dir, type make

Who do I talk to?

Notes