A Linux kernel module that implements the Homa transport protocol.
C
352
1,988 commits
updated Sep 1, 2026
This repo contains an implementation of the Homa transport protocol as a Linux kernel module.
For more information on Homa in general, see the Homa Wiki.
More information about this implementation and its performance are available in the paper A Linux Kernel Implementation of the Homa Transport Protocol, which appeared in the USENIX Annual Technical Conference in July, 2021.
A synopsis of the protocol implemented by this module is available in protocol.md.
As of August 2020, Homa has complete functionality for running real applications, and its tail latency is more than 10x better than TCP for all workloads I have measured (Homa's 99-th percentile latency is usually better than TCP's mean latency). Here is a list of the most significant functionality that is still missing:
Please contact me if you have any problems using this repo; I'm happy to provide advice and support.
To build and install Homa, see instructions in INSTALL.md.
A collection of man pages is available in the "man" subdirectory. The API for Homa is different from TCP sockets.
Related work that you may find useful:
NIC support: Homa is known to work with the following NICs:
The subdirectory "test" contains unit tests, which you can run by typing "make" in that subdirectory.
The subdirectory "util" contains an assortment of utility programs that
you may find useful in exercising and benchmarking Homa. Compile them by typing
make in that subdirectory. Here are some examples of benchmarks you might
find useful:
cp_node program can be run stand-alone on clients and servers to run
simple benchmarks. For a simple latency test, run cp_node server on node1 of
the cluster, then run cp_node client on node 0. The client will send
continuous back-to-back short requests to the server and output timing
information. Or, run cp_node client --workload 500000 on the client:
this will send continuous 500 KB messages for a simple througput test.
Type cp_node --help to learn about other ways you can use this program.cp_bench script uses cp_node to run any of a variety of
benchmarks; it was used to generate the data for Figures 3 and 4 in
the Homa ATC paper. Here is an example command:
cp_bench -n 10 -w w4 -b 20 -B homa_vs_tcp
The -B option selects one of several benchmarks; homa_vs_tcp
will run both Homa and TCP on the same workload and generate graphs
comparing them.
When invoked on node0, this will run the W4 workload
from the ATC paper,
running on 10 nodes and generating 20 Gbps of offered load (80%
network load on a 25 Gbps network). Type cp_bench --help for
information on all available options.Some additional tools you might find useful:
/proc/net/homa_metrics. The script util/metrics.py will
collect metrics and print out all the numbers that have changed
since its last run.homa.7.rhel8 and rhel9.5. Future changes made to
the main branch are likely to be reflected in these branches also.homa_api.c has been removed, so the functions homa_abort,
homa_reply, homa_replyv, homa_send, and homa_sendv no longer
exist.master branch with mainC
52.0%
Python
36.0%
C++
10.9%
A Linux kernel module that implements the Homa transport protocol.
C
352
1,988 commits
updated Sep 1, 2026
This repo contains an implementation of the Homa transport protocol as a Linux kernel module.
For more information on Homa in general, see the Homa Wiki.
More information about this implementation and its performance are available in the paper A Linux Kernel Implementation of the Homa Transport Protocol, which appeared in the USENIX Annual Technical Conference in July, 2021.
A synopsis of the protocol implemented by this module is available in protocol.md.
As of August 2020, Homa has complete functionality for running real applications, and its tail latency is more than 10x better than TCP for all workloads I have measured (Homa's 99-th percentile latency is usually better than TCP's mean latency). Here is a list of the most significant functionality that is still missing:
Please contact me if you have any problems using this repo; I'm happy to provide advice and support.
To build and install Homa, see instructions in INSTALL.md.
A collection of man pages is available in the "man" subdirectory. The API for Homa is different from TCP sockets.
Related work that you may find useful:
NIC support: Homa is known to work with the following NICs:
The subdirectory "test" contains unit tests, which you can run by typing "make" in that subdirectory.
The subdirectory "util" contains an assortment of utility programs that
you may find useful in exercising and benchmarking Homa. Compile them by typing
make in that subdirectory. Here are some examples of benchmarks you might
find useful:
cp_node program can be run stand-alone on clients and servers to run
simple benchmarks. For a simple latency test, run cp_node server on node1 of
the cluster, then run cp_node client on node 0. The client will send
continuous back-to-back short requests to the server and output timing
information. Or, run cp_node client --workload 500000 on the client:
this will send continuous 500 KB messages for a simple througput test.
Type cp_node --help to learn about other ways you can use this program.cp_bench script uses cp_node to run any of a variety of
benchmarks; it was used to generate the data for Figures 3 and 4 in
the Homa ATC paper. Here is an example command:
cp_bench -n 10 -w w4 -b 20 -B homa_vs_tcp
The -B option selects one of several benchmarks; homa_vs_tcp
will run both Homa and TCP on the same workload and generate graphs
comparing them.
When invoked on node0, this will run the W4 workload
from the ATC paper,
running on 10 nodes and generating 20 Gbps of offered load (80%
network load on a 25 Gbps network). Type cp_bench --help for
information on all available options.Some additional tools you might find useful:
/proc/net/homa_metrics. The script util/metrics.py will
collect metrics and print out all the numbers that have changed
since its last run.homa.7.rhel8 and rhel9.5. Future changes made to
the main branch are likely to be reflected in these branches also.homa_api.c has been removed, so the functions homa_abort,
homa_reply, homa_replyv, homa_send, and homa_sendv no longer
exist.master branch with mainC
52.0%
Python
36.0%
C++
10.9%