MTU对环回接口的意义
Posted
技术标签:
【中文标题】MTU对环回接口的意义【英文标题】:Significance of MTU for loopback interface 【发布时间】:2014-12-11 20:39:29 【问题描述】:我正在探索/基准测试各种 IPC 机制,以在同一系统中的两个进程之间进行低延迟通信。我正在使用 RHEL 6 系统进行基准测试。
我目前正在研究通过环回进行基于套接字的通信。由于它是环回设备,因此数据包甚至不会命中 NIC。相反,环回 linux 驱动程序将数据包环回到目的地。
但是查看netstat -i
的结果,我看到了为环回定义的 MTU。这有什么作用以及对带宽的潜在影响?
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
lo0 16384 localhost ::1 1738 - 1738 - -
【问题讨论】:
【参考方案1】:loopback 不是物理接口,但 tcp/ip 堆栈仍然在其上运行大量操作。
为了提高本地传输的性能,内核开发人员将其 mtu 从 16 Kb 提高到 64 Kb。
参见 Linux 内核中的this commit 及其原理:
16436 字节的环回当前 mtu 允许不超过 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;
【讨论】:
以上是关于MTU对环回接口的意义的主要内容,如果未能解决你的问题,请参考以下文章