我正在探索/基准测试各种IPC机制,以便在同一系统中的两个进程之间进行低延迟通信。我使用RHEL 6系统进行基准测试。
我目前正在通过环回来研究基于套接字的通信。由于它是环回设备,因此数据包甚至不会命中NIC。相反,loopback linux驱动程序将数据包环回到目的地。
然而,查看netstat -i
的结果,我看到为环回定义了一个MTU。它的作用是什么以及对带宽的潜在影响?
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
lo0 16384 localhost ::1 1738 - 1738 - -
答案 0 :(得分:0)
环回不是物理接口,但是tcp / ip堆栈仍然在其上运行很多操作。
为提高本地传输的性能,内核开发人员将其mtu从16 Kb提升至64 Kb。
请参阅Linux内核中的this commit及其基本原理:
环回当前mtu为16436字节,允许不超过3个MSS TCP 每帧分段,即48 KB。将mtu更改为64K允许TCP 堆栈以构建大型框架并显着减少堆栈开销。
大容量TCP传输的性能提升可高达30%,部分原因是因为我们现在有一个ACK消息用于两个64KB段,而较低的消息 达到/ proc / sys / net / ipv4 / tcp_reordering默认限制的概率。
--- a/drivers/net/loopback.c
+++ b/drivers/net/loopback.c
static void loopback_setup(struct net_device *dev)
{
- dev->mtu = (16 * 1024) + 20 + 20 + 12;
+ dev->mtu = 64 * 1024;