我知道环回将通过内核网络堆栈直到到达 IP 层,包括系统调用开销和一些内存复制开销。DPDK 和 RDMA 使用不同的技术来避免这些。
所以假设我有两台机器通过 dpdk/rdma 连接,然后我进行网络延迟测试,这会比一台机器上的环回更快吗?我ping localhost
对 CPU E5-2630 v4 @ 2.20GHz 进行了快速测试,平均为 0.010ms。
我在使用 vstart.sh 测试我的 ceph 集群时提出了这个问题,我想最小化网络延迟,以便仔细分析 osd 相关代码如何影响延迟。
根据通过评论进行的对话,真正的问题是
Does DPDK/RDMA between 2 machines gives lower latency than localhost ping
。[答案] 是的,你可以达到同样的效果。但有一些注意事项
rte_eth_tx_burst
仅将数据包描述符排入 PCIe 上的 DMA 以发送流量。这实际上并没有将数据包发送出去。rte_eth_tx_buffer_flush
将任何先前缓冲的数据包显式刷新到硬件。rte_pktmbuf_alloc
获取 mbuf 并将 ref_cnt 设置为 250。因此,使用正确的 NIC(支持低延迟传输)、DPDK API rte_eth_tx_buffer_flush 以及将 ref_cnt 更新为更高值的预分配 mbuf,您可以
0.010ms
平均实现。注意:为了获得更好的基线,请使用 packet-generator 或 packet Balster 向目标机器发送 ICMP 请求,并使用 Kernel 和 DPDK 解决方案来比较线路速率(例如 1%、5%、10%、25%、50%)的实际加载性能, 75%, 100%。