【发布时间】:2020-06-06 03:59:01
【问题描述】:
运行 Ubuntu 18.04.4 LTS
我有一个高带宽文件传输应用程序 (UDP),我正在使用环回接口在本地进行测试。
在没有模拟延迟的情况下,我可以以
sudo sysctl -w net.core.rmem_max=8388608
sudo sysctl -w net.core.wmem_max=8388608
sudo sysctl -p
为了进行额外的测试,我想添加一个 100 毫秒的模拟延迟。这是为了模拟传播延迟,而不是排队延迟。我使用 Linux 流量控制 (tc) 工具完成了这项工作:
sudo tc qdisc add dev lo root netem delay 100ms
添加延迟后,以最大速度传输 1GB 的数据包丢失率从
我将缓冲区大小增加到 50MB:
sudo sysctl -w net.core.rmem_max=52428800
sudo sysctl -w net.core.wmem_max=52428800
sudo sysctl -p
但是,丢包率并没有明显减少。我还尝试了 1GB 的缓冲区大小,结果相似(我的系统有 >90GB 的可用 RAM)。
为什么在这种情况下增加系统网络缓冲区大小不起作用?
【问题讨论】:
-
"_ 我认为问题在于,为了模拟延迟,内核必须在应用延迟时将数据包存储在 RAM 中。_" 不。UDP 没有反馈,它只是尽可能快地发送,因此拥塞的接口只会丢弃数据包。
-
在这种情况下 tc 将如何模拟延迟?如果在本地模拟 100 毫秒的延迟,我看不到任何方法可以绕过在内核的网络缓冲区中保存更长时间的数据包,从而导致缓冲区快速填满。
-
嗨,已经一个月了。关于这个话题有什么更新吗?我的回答和建议呢?
标签: linux ubuntu networking