浅谈linux性能调优之十四:调节socket缓冲区

    应用程序经过socket系统调用和远程主机进行通信,每个socket都有一个读写缓冲区。读缓冲区保存了远程主机发送过来的数据,若是缓冲区已满,则数据会被丢弃,写缓冲期保存了要发送到远程主机的数据,若是写缓冲区已慢,则系统的应用程序在写入数据时会阻塞。可知,缓冲区是有大小的。
    BDP 给出了一种简单的方法来计算理论上最优的 TCP socket 缓冲区大小(其中保存了排队等待传输和等待应用程序接收的数据)。若是缓冲区过小,那么 TCP 窗口就不能彻底打开,这会对性能形成限制。若是缓冲区太大,那么宝贵的内存资源就会形成浪费。若是您设置的缓冲区大小正好合适,那么就能够彻底利用可用的带宽
BDP = 带宽 * 延迟 (单位: 字节)
    带宽*延时/8*2^20 = ***B
      带宽: Mebibites     延时:s (RTT)

注意:调整tcp前,必须调整core,对于tcp,udp来讲不能超出core的限制

默认值:
net.core.rmem_max = 131071 128K
net.core.rmem_default = 124928
net.core.wmem_max = 131071
net.core.wmem_default = 124928

net.ipv4.tcp_rmem = 4096 87380 2691072
net.ipv4.tcp_wmem = 4096 16384 2691072

示例: 
带宽:1.5M   100M
延时:500ms  3000ms
1.5 * 0.5 / 8 * 2^20         ======= net.ipv4.tcp_wmem
100 * 3 / 8 * 2^20           ======= net.ipv4.tcp_wmem
相关文章
相关标签/搜索