Skip to content

🐎 Benchmarks for Inter-Process-Communication Techniques

License

Notifications You must be signed in to change notification settings

AlexBurnes/ipc-bench

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IPC-Bench

GitHub license

This repository holds sample implementations and benchmarks for various inter-process-communication (IPC) methods on Linux and OS X.

Spectrum

Currently, the following IPC methods are implemented and ready to be benchmarked:

  • Internet sockets
  • Domain sockets
  • Pipes
  • FIFOs (named pipes)
  • Shared Memory
  • Memory-Mapped Files
  • Message Queues
  • ZeroMQ
  • Unix Signals

Our benchmarks measure the latency of sending a single message between two processes (see below).

Usage

You can build the project and all necessary executables using CMake. The following commands (executed from the root folder) should do the trick:

mkdir build
cd build
cmake ..
make

This will generate a build/source folder, holding further directories for each IPC type. Simply execute the program named after the folder, e.g. build/source/shm/shm. Where applicable, this will start a new server and client process, run benchmarks and print results to stdout. For example, running build/source/shm/shm outputs:

============ RESULTS ================
Message size:       4096
Message count:      1000
Total duration:     1.945      	ms
Average duration:   1.418      	us
Minimum duration:   0.000      	us
Maximum duration:   25.000     	us
Standard deviation: 1.282      	us
Message rate:       514138     	msg/s
=====================================

The benchmarks measure the latency of sending a single message from the client to the server and back -- i.e. one ping pong message. To control the number of messages sent and the size of each message, each master executable (which stars the server and client) takes two optional command-line arguments:

  • -c <count>: How many messages to send between the server and client. Defaults to 1000.
  • -s <size>: The size of individual messages. Defaults to 1000.

For example, you can measure the latency of sending 100 bytes a million times via domain sockets with the following command:

$ ./domain -c 1000000 -s 100

We also provide a shell script under results/ that runs all methods with various configurations and stores the results. Some tests may have issues due to system limits, so you may want to re-run the script or run some tests manually.

This project is released under the MIT License. For more information, see the LICENSE file.

Authors

Peter Goldsborough + cat ❤️

About

🐎 Benchmarks for Inter-Process-Communication Techniques

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 87.8%
  • CMake 5.9%
  • C++ 5.2%
  • Shell 1.1%