Nic*_*oul 9 linux udp linux-networking packetloss sysctl
在rmem_max
Linux的设置限定了接收UDP数据包缓冲区的大小。
当流量变得太忙时,数据包丢失开始发生。
我制作了一个图表,显示数据包丢失如何根据传入带宽增加。
(我使用IPerf在两个 VM 实例之间生成 UDP 流量)。
不同的颜色代表不同的rmem_max
值:
如您所见,设置rmem_max
为26214400
(深蓝色)会导致丢包比较小的值更早。Linux 的默认值是131071
(深绿色)看起来很合理。
在这些情况下,为什么JBoss 文档建议设置rmem_max
为26214400
?
是因为 UDP 流量预计高于 350 MB/秒吗?无论如何,我认为任何东西都不会超过 1% 的丢包率...
我错过了什么?
详细信息:我sysctl -w net.core.rmem_max=131071
(例如)在两个节点上都使用过,并在作为 serveriperf -s -u -P 0 -i 1 -p 5001 -f M
和另一个作为 client 使用iperf -c 172.29.157.3 -u -P 1 -i 1 -p 5001 -f M -b 300M -t 5 -d -L 5001 -T 1
。
更多的缓冲区并不一定意味着更快的速度。更多的缓冲区只是意味着更多的缓冲区。低于某个值,您会看到溢出,因为应用程序不一定能足够快地为接收到的数据提供服务。这很糟糕,但如果有足够的缓冲区让应用程序以合理的速度提供服务,即使在偶尔出现流量高峰的情况下,也可能会浪费其他任何东西。
如果你变得太大了,那么你会给内核带来更大的负担来寻找和分配内存,具有讽刺意味的是,这会导致数据包丢失。我的预感是这可能就是您所看到的,但需要其他一些指标来确认。
250 万个数字很可能来自为 TCP 设置 rmem 和 wmem 值的建议——在某些情况下,窗口大小和缓冲区设置之间的关系可能会产生重大影响。也就是说,TCP != UDP - 但有些人认为如果它对 TCP 有帮助,它也会对 UDP 有帮助。你有正确的经验信息。如果我是你,我会坚持 256K 的价值并称其为偶数。
归档时间: |
|
查看次数: |
25235 次 |
最近记录: |