环回接口MTU的意义

Kod*_*ior 6 linux tcp ipc linux-kernel

我正在探索/基准测试用于同一系统中两个进程之间低延迟通信的各种 IPC 机制。我正在使用 RHEL 6 系统进行基准测试。

我目前正在研究通过环回的基于套接字的通信。由于它是环回设备,因此数据包甚至不会命中 NIC。相反,环回 linux 驱动程序将数据包环回到目的地。

但是查看 的结果netstat -i,我看到为环回定义了一个 MTU。这有什么作用以及对带宽的潜在影响是什么?

Name  Mtu   Network       Address            Ipkts Ierrs    Opkts Oerrs  Coll
lo0   16384 localhost   ::1                   1738     -     1738     -     -
Run Code Online (Sandbox Code Playgroud)

Mas*_*imo 5

环回不是物理接口,但 tcp/ip 堆栈仍然在其上运行大量操作。

为了提高本地传输的性能,内核开发人员将其 mtu 从 16 Kb 提高到 64 Kb。

请参阅Linux 内核中的此提交及其基本原理:

16436 字节的环回当前 mtu 允许每帧不超过 3 个 MSS TCP 段,或 48 KB。将 mtu 更改为 64K 允许 TCP 堆栈构建大帧并显着减少堆栈开销。

批量 TCP 传输的性能提升可高达 30%,部分原因是我们现在对两个 64KB 段有一个 ACK​​ 消息,并且达到 /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;
Run Code Online (Sandbox Code Playgroud)