kernel中socket buffer相關參數


1)  簡介

內核參數會影響收發包性能,尤其是在發包比較快的網卡上,往往需要修改內核參數以提高性能。內核中有很多個buffer相關的參數,下面根據文檔解釋下各個參數作用。

參考文檔:

http://man7.org/linux/man-pages/man7/udp.7.html

http://man7.org/linux/man-pages/man7/tcp.7.html

http://man7.org/linux/man-pages/man7/socket.7.html

2)  測試情況

Socket上有個SO_RCVBUF和SO_RCVBUF兩個參數,可以通過修改這兩個參數增大單個socket的緩沖區。

通過測試發現,UDP中SO_RCVBUF與內核中/proc/sys/net/core/rmem_default對應,SO_SNDBUF與/proc/sys/net/core/wmem_default對應。

而TCP中SO_RCVBUF與內核中/proc/sys/net/ipv4/tcp_rmem 的第二項default對應,SO_SNDBUF與/proc/sys/net/ipv4/tcp_wmem的第二項default對應。

以下是內核buffer相關參數解釋:

內核參數

含義

net.core.rmem_default

內核給單個socket分配的默認讀buffer大小

net.core.rmem_max

所有socket的讀buffer不能超過這個值

net.core.wmem_default

內核給單個socket分配的默認寫buffer大小

net.core.wmem_max

所有socket的寫buffer不能超過這個值

net.ipv4.tcp_mem

low

如果全部tcp socket分配的內存少於這個值,不會調整內存

pressure

如果全部tcp socket分配的內存超過這個值,內核將調整每個tcp socket的內存

high

全部tcp socket分配的內存不超過這個值,這個值覆蓋其他限制

net.ipv4.tcp_rmem

min

當所有tcp socket使用內存緊張時,內核保證至少給每個tcp socket的讀buffer分配這個值的內存大小

default

每個tcp socket默認讀buffer緩沖區,會覆蓋net.core.rmem_default

max

所有tcp socket讀buffer總大小上限,不會覆蓋net.core.rmem_max

net.ipv4.tcp_wmem

min

當所有tcp socket使用內存緊張時,內核保證至少給每個tcp socket的寫buffer分配這個值的內存大小

default

每個tcp socket默認寫buffer緩沖區,會覆蓋net.core.wmem_default

max

所有tcp socket寫buffer總大小上限,不會覆蓋net.core.wmem_max

net.ipv4.udp_mem

low

如果全部udp socket分配的內存少於這個值,不會調整內存

pressure

如果全部udp socket分配的內存超過這個值,內核將調整每個udp socket的內存

high

全部udp socket分配的內存不超過這個值,這個值覆蓋其他限制

net.ipv4.udp_rmen_min

當所有udp socket使用內存緊張時,內核保證至少給每個udp socket的讀buffer分配這個值的內存大小

net.ipv4.udp_wmen_min

當所有udp socket使用內存緊張時,內核保證至少給每個udp socket的寫buffer分配這個值的內存大小

 

3)  疑問

net.core.rmem_max和net.core.wmem_max有沒有分TCP和UDP?

net.ipv4.tcp_rmem中max都被net.core.rmem_max覆蓋了,那么他的作用又是什么?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM