go-ibv-ud-pingpong is a network diagnostic tool that performs ping/pong tests using the Infiniband Verbs interface (libibverbs) with the IB/RoCE protocol's Unreliable Datagram (UD) transport. This tool is particularly useful for testing and benchmarking RDMA network performance.
This project is a Go language implementation of the ud_pingpong.c example from the rdma-core library.
- Go 1.24 or later
- RDMA-capable network interface card supporting RoCE v2
- rdma-core development packages
git clone https://github.com/yuuki/go-rocev2-ud-pingpong.git
cd go-rocev2-ud-pingpong
make extract-binaryThe tool operates in either server (passive) or client (active) mode:
Usage: ./go-rocev2-ud-pingpong [options] [servername]
-c Validate buffer contents (server side)
-d string
IB device name
-e Use CQ events
-g int
GID index (default -1)
-i int
IB port (default 1)
-l int
Service Level
-loglevel string
Log level (debug, info, warn, error) (default "info")
-n int
Number of iterations (default 1000)
-p int
TCP port for exchanging connection data (default 18515)
-r int
RX queue depth (default 500)
-s int
Size of message buffer (default 4096)
-servername string
Server hostname or IP address (client mode)
To run in server mode:
./bin/go-rocev2-ud-pingpong -e -g 0To run in client mode:
./bin/go-rocev2-ud-pingpong -e -g 0 -servername 192.168.1.100Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the GPL v2 - see the LICENSE file for details.
- This project is inspired by and based on the ud_pingpong.c example from the rdma-core library
- Thanks to the RDMA community for their excellent documentation and examples