Skip to content

Network I/O Performance

English | 简体中文

Spiderpool can be used with Macvlan, SR-IOV, and IPvlan to implement a complete network solution. This article will compare it with the mainstream network CNI plug-ins on the market ( Such as cilium, calico) Network Latency and Throughput in various scenarios

ENV

This test contains performance benchmark data for various scenarios. All tests were performed between containers running on two different bare metal nodes with 10 Gbit/s network interfaces.

  • Kubernetes: v1.28.2
  • container runtime: containerd 1.6.24
  • OS: ubuntu 23.04
  • kernel: 6.2.0-35-generic
  • NIC: Mellanox Technologies MT27800 Family [ConnectX-5]
Node Role CPU Memory
master1 control-plane, worker 56C 125Gi
worker1 worker 56C 125Gi

Test object

This test uses macvlan with Spiderpool as the test solution, and selected Calico, Cilium For comparison, two common network solutions are as follows. The following is the relevant version and other information:

Test object illustrate
Spiderpool based macvlan datapath Spiderpool version v0.8.0
Calico Calico version v3.26.1, based on iptables datapath and no tunnels
Cilium Cilium version v1.14.3, based on full eBPF acceleration and no tunneling

sockperf network latency test

Sockperf is a network benchmarking tool that can be used to measure network latency. It allows you to evaluate the performance of your network by testing the latency between two endpoints. We can use it to separately test Pod's cross-node access to Pod and Service. When testing access to Service's cluster IP, there are two scenarios: kube-proxy or cilium + kube-proxy replacement.

  • Cross-node Pod latency testing for Pod IP purposes.

Use sockperf pp --tcp -i <Pod IP> -p 12345 -t 30 to test the latency of cross-node Pod access to the Pod IP. The data is as follows.

Test object latency
Calico based on iptables datapath and tunnelless 51.3 usec
Cilium based on full eBPF acceleration and no tunneling 29.1 usec
Spiderpool Pod on the same subnet based on macvlan 24.3 usec
Spiderpool Pod across subnets based on macvlan 26.2 usec
node to node 32.2 usec
  • Cross-node Pod latency test for cluster IP purpose.

Use sockperf pp --tcp -i <Cluster IP> -p 12345 -t 30 to test the latency of cross-node Pod access to the cluster IP. The data is as follows.

Test object latency
Calico based on iptables datapath and tunnelless 51.9 usec
Cilium based on full eBPF acceleration and no tunneling 30.2 usec
Spiderpool Pod based on macvlan on the same subnet and kube-proxy 36.8 usec
Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated 27.7 usec
node to node 32.2 usec

performance

netperf performance test

netperf is a widely used network performance testing tool that allows you to measure various aspects of network performance, such as throughput. We can use netperf to test Pod's cross-node access to Pod and Service respectively. When testing access to Service's cluster IP, there are two scenarios: kube-proxy or cilium + kube-proxy replacement.

  • Netperf testing of cross-node Pods for Pod IP purposes.

Use netperf -H <Pod IP> -l 10 -c -t TCP_RR -- -r100,100 to test the throughput of cross-node Pod access to Pod IP. The data is as follows.

Test object Throughput (rps)
Calico based on iptables datapath and tunnelless 9985.7
Cilium based on full eBPF acceleration and no tunneling 17571.3
Spiderpool Pod on the same subnet based on macvlan 19793.9
Spiderpool Pod across subnets based on macvlan 19215.2
node to node 47560.5
  • Netperf testing across node Pods for cluster IP purposes.

Use netperf -H <cluster IP> -l 10 -c -t TCP_RR -- -r100,100 to test the throughput of cross-node Pods accessing the cluster IP. The data is as follows.

Test object Throughput (rps)
Calico based on iptables datapath and tunnelless 9782.2
Cilium based on full eBPF acceleration and no tunneling 17236.5
Spiderpool Pod based on macvlan on the same subnet and kube-proxy 16002.3
Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated 18992.9
node to node 47560.5

iperf network performance test

iperf is a popular network performance testing tool that allows you to measure network bandwidth between two endpoints. It is widely used to evaluate the bandwidth and performance of network connections. In this chapter, we use it to test Pod's cross-node access to Pod and Service. When testing access to Service's cluster IP, there are two scenarios: kube-proxy or cilium + kube-proxy replacement.

  • iperf testing of cross-node Pods for Pod IP purposes.

Use iperf3 -c <Pod IP> -d -P 1 to test the performance of cross-node Pod access to Pod IP. Use the -P parameter to specify threads 1, 2, and 4 respectively. The data is as follows.

Test object Number of threads 1 Number of threads 2 Number of threads 4
Calico based on iptables datapath and tunnelless 3.26 Gbits/sec 4.56 Gbits/sec 8.05 Gbits/sec
Cilium based on full eBPF acceleration and no tunneling 9.35 Gbits/sec 9.36 Gbits/sec 9.39 Gbits/sec
Spiderpool Pod on the same subnet based on macvlan 9.36 Gbits/sec 9.37 Gbits/sec 9.38 Gbits/sec
Spiderpool Pod across subnets based on macvlan 9.36 Gbits/sec 9.37 Gbits/sec 9.38 Gbits/sec
node to node 9.41 Gbits/sec 9.40 Gbits/sec 9.42 Gbits/sec
  • iperf testing of cross-node Pods for cluster IP purposes.

Use iperf3 -c <cluster IP> -d -P 1 to test the performance of cross-node Pod access to cluster IP. Use the -P parameter to specify threads 1, 2, and 4 respectively. The data is as follows.

Test object Number of threads 1 Number of threads 2 Number of threads 4
Calico based on iptables datapath and tunnelless 3.06 Gbits/sec 4.63 Gbits/sec 8.02 Gbits/sec
Cilium based on full eBPF acceleration and no tunneling 9.35 Gbits/sec 9.35 Gbits/sec 9.38 Gbits/sec
Spiderpool Pod based on macvlan on the same subnet and kube-proxy 3.42 Gbits/sec 6.75 Gbits/sec 9.24 Gbits/sec
Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated 9.36 Gbits/sec 9.38 Gbits/sec 9.39 Gbits/sec
node to node 9.41 Gbits/sec 9.40 Gbits/sec 9.42 Gbits/sec

redis-benchmark performance test

redis-benchmark is designed to measure the performance and throughput of a Redis server by simulating multiple clients and executing various Redis commands. We used redis-benchmark to test Pod's cross-node access to the Pod and Service where the Redis service is deployed. When testing access to Service's cluster IP, there are two scenarios: kube-proxy or cilium + kube-proxy replacement.

  • Cross-node Pod redis-benchmark testing based on Pod IP.

Use redis-benchmark -h <Pod IP> -p 6379 -d 1000 -t get,set to test the performance of cross-node Pod access to Pod IP. The data is as follows.

Test object get set
Calico based on iptables datapath and tunnelless 45682.96 rps 46992.48 rps
Cilium based on full eBPF acceleration and no tunneling 59737.16 rps 59988.00 rps
Spiderpool Pod on the same subnet based on macvlan 66357.00 rps 66800.27 rps
Spiderpool Pod across subnets based on macvlan 67444.45 rps 67783.67 rps
  • Cross-node Pod redis-benchmark testing for cluster IP purposes.

Use redis-benchmark -h <cluster IP> -p 6379 -d 1000 -t get,set to test the performance of cross-node Pod access to cluster IP. The data is as follows.

Test object get set
Calico based on iptables datapath and tunnelless 46082.95 rps 46728.97 rps
Cilium based on full eBPF acceleration and no tunneling 60496.07 rps 58927.52 rps
Spiderpool Pod based on macvlan on the same subnet and kube-proxy 45578.85 rps 46274.87 rps
Spiderpool Pod based on macvlan on the same subnet and fully eBPF accelerated 63211.12 rps 64061.50 rps

performance

Summary

When Spiderpool is used as an underlay network solution, its IO performance is ahead of Calico and Cilium in most scenarios.