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