通过Internet查看TCP优化指南,常见的主题是将tcp_mem,tcp_rmem或tcp_wmem三整数向量设置为在sysctl.conf文件中具有相同的值。
从TCP手册页借用,值的function描述如下:
低
压力
高
也许我疯了,但基于这些描述,设定相同的价值可能会导致可怕的内部冲突。
有人能比我更聪明的在Linux内核的TCP内存说话的设置这些值的影响是平等的?
谢谢,
你是对的,很多人不知道他们在说什么,也不会为自己思考,所以他们只是从别处的货物崇拜设置,而不了解这些设置的作用或可调参数的真正意义。
你显然不是那些人之一。 有一个upvote!
将tcp_.mem可调参数的所有三个值设置为相同的值将会破坏TCP自动调整缓冲区大小和内存使用情况的能力( net.ipv4.tcp_moderate_rcvbuf=1可调参数),这是Linux TCP实现的一个很好的优势。
假设值都很高,这将是TCP内存的低效使用。
如果创build了足够多的套接字来创build由net.ipv4.tcp_mem定义的最高限制(注意,这些套接字是以页面而不是字节为单位),那么TCP开始将缓冲区合并在一起以降低内存使用率会导致更高的效率%sys CPU使用率比真正需要的。
如果有足够的内存压力,内核将开始丢弃数据包,首先从乱序队列,然后是主接收队列。
tcp_rmem可调参数的正确值是:
对于1Gbps,4Mb〜6Mb通常就足够了。 对于10Gbps,你可能想要高达16Mb。 我还没有看到一个比那个更有用的系统,但也许有这样一个系统存在。
您通常可以保留tcp_wmem可调参数。
系统启动和服务networking连接的时间越长,根据以前连接的BDP和RTT,越好的TCP自动调整将得到预测理想的默认缓冲区大小。