/ihft

Yet another HFT framework

Primary LanguageC++MIT LicenseMIT

IHFT

BSD 3 License

Life is too short for malloc.

IHFT is microframework & laboratory for low latency applications.

System requirements

The IHFT framework requires:

  • modern C++ compiler with -std=20 support (clang16+, gcc11+)
  • cmake build system generator
  • ninja build command line utility
  • modern computer with linux x64 system
  • dev compilation on macos x64|arm64 is also available

Current building status matrix

Configuration Static Runtime Shared Runtime ASAN+UBSAN TSAN
Linux(GCC11) Build Status Build Status Build Status Build Status
Linux(Clang18) Build Status Build Status Build Status Build Status
MacOS(Clang15) - Build Status Build Status Build Status

Goals

  • platform module
    • set cpu for current thread
    • set name for current thread
    • lock memory pages
    • status for isolcpus, nohz_full, rcu_nocbs
    • hyper-threading detector
    • cpu frequency scaling detector
    • swap detector
    • transparent huge pages detector
    • huge page system detector
    • core to core latency example
    • platform sysjitter example
  • channel module
    • one 2 one stream pod data queue
    • one 2 one stream moveable object queue
    • one 2 many stream pod data queue
    • one 2 many stream moveable object queue
    • one 2 each stream pod data queue
    • one 2 each stream moveable object queue
    • batch reader for all moveable object queues
    • python latency analysis tool
    • C++20 concepts
    • documentation with latency histograms
  • memory module
    • arena allocator
    • stream fixed pool allocator
    • page allocator for 4KB pages
    • huge page allocator for 2MB & 1GB pages
  • timer module
    • native cpu_counter
    • native cpu_pause
  • types module
    • box: placed object ownership
    • function_ref: non-owning reference to a callable
    • result: function output or error
  • misc module
    • simple human-readable TOML config system
    • sigaction based signal handler
  • logger module
    • simple client usage
    • non reliable delivery
    • smart serializer for input arguments
    • compile-time formatting pattern check
    • wait-free implementation
    • log pount source file and thread info
    • std::format as formatting backend
    • std::source_location as log point source
    • documentation with pictures
  • network module
    • udp demo
    • multicast demo
    • Solarflare demo
    • Mellanox demo
    • DPDK demo
  • engine module
    • logical cpu
    • task assignment
    • configuration verification
    • intelligent component loading
    • documentation with pictures
  • CI
    • github workflows CI
    • static binary
    • Clang support with libc++
    • GCC support with libstdc++
    • Catch2 unit tests
    • address sanitizer
    • thread sanitizer
    • ub sanitizer
    • clang format
  • DevOps
    • script for system latency optimization

Docs

Analytics

Channel

Compiler

Constant

Engine

Memory

Misc

Platform

Types

Dev Links

C++ reference

Compiler Explorer

Compiler Flags and Options

Agner Fog’s instruction tables

Benchmarking tips

WikiChip CPU information

Intel hardware information

AMD hardware information

Intel Intrinsics Guide

LLVM Machine Code Analyzer

LLVM Machine Instruction Benchmark

LIKWID tools

OpenOnload is a user-level network stack

DPDK Accelerating Network Performance

TOML config file format

DevOps Links

Osnoise tracer

Disable cpu frecuency scaling

Eric Rigtorp Low Latency Tuning

Red Hat Enterprise Linux-7 Low Latency Tuning

Red Hat Enterprise Linux-7 Performance Tuning Guide

People

Erik Rigtorp personal blog

Martin Thompson mechanical sympathy

Raymond Chen oldnewthing

Daniel Lemire's blog