2010-08-30 28 views
3

我正在運行x86_64 RedHat 5.3(內核2.6.18),並在嘗試設置UDP緩衝區的上下文中從sysctl -a專門查看net.core.rmem_max。接收器應用程序有時會丟失數據包,但我認爲緩衝區已經足夠大,取決於它的含義:什麼是UDP緩衝區的單位,以及sysctl params的文檔在哪裏?

此設置的單位是什麼 - 位,字節,數據包或頁面?如果是比特或字節,它來自數據報/有效載荷(如100字節)還是網絡MTU大小(〜1500字節)?如果是頁面,頁面大小以字節爲單位?

這是每個系統,每個物理設備(NIC),每個虛擬設備(VLAN),每個進程,每個線程,每個套接字/每個多播組的最大值?例如,假設我的數據是每條消息100個字節,每個網絡數據包包含2條消息,並且我希望能夠緩衝每個套接字50,000條消息,並且我在每個線程上爲每個線程打開3個套接字。 net.core.rmem_max應該有多大?同樣,當我在應用程序中設置套接字選項時,單位是有效負載字節,所以在這種情況下,每個套接字上5000000?

最後,總的來說,我將如何查找通過sysctl -a查看的參數單位的詳細信息?我有類似的單位和每X有關其他參數的問題,如net.core.netdev_max_backlog和net.ipv4.igmp_max_memberships。

謝謝。

回答

2

你會看到these文檔。也就是說,這些參數中的很多參數實際上都很不完善,因此希望能夠從Google博客和郵件列表中挖掘出血腥的細節。

rmem_max是每個插槽的最大緩衝區,以字節爲單位。挖掘,這似乎是接收整個數據包的內存,所以大小必須包括任何/ ip/udp頭的大小 - 儘管這個區域對我來說很模糊。

請記住,UDP 不可靠。有很多的損失來源,而不是交換機和路由器之間的 - 至少也有緩衝區。

1

它在套接字(7)手冊頁(以字節爲單位)中有詳細記錄。另外,可以使用SO_RCVBUF(如在同一頁面中記錄)以每個套接字爲基礎設置限制。

閱讀socket(7),ip(7)和udp(7)手冊頁以獲取有關這些事情實際工作方式的信息。 sysctls在那裏被記錄。