淺談linux性能調優之十四:調節socket緩沖區
淺談linux性能調優之十三:性能分析相關概念
http://www.2cto.com/os/201307/229890.html
應用程序通過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