Networking

為什麼 NIC 環參數未預先設置為其硬體最大功能?

  • September 24, 2021

檢查網卡環形緩衝區:

# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:        4096
RX Mini:      0
RX Jumbo:     0
TX:        4096
Current hardware settings:
RX:         256
RX Mini:      0
RX Jumbo:     0
TX:         256

可以將“RX/TX”設置為“預設最大值”中顯示的限制,例如:

# ethtool -G eth0 rx 4096 rx 4096

問題是:預設情況下;為什麼這些設置如此之低(在我擁有的每台伺服器中,它們都是 256)而不是更高的值,或者它們的硬體最大能力?增加這些值是否有任何缺點(如果是,那麼?)?

首先,您設置的數字不像許多人認為的那樣以字節為單位,而是以**描述符為單位(並且描述符的大小取決於硬體)。因此,當您增加環長度時,您請求在核心中為這些描述符分配更多記憶體。通常,您希望將此核心記憶體放在 L1 高速記憶體中,以便盡可能快地處理中斷。增加戒指尺寸會降低這種可能性,在某些情況下是完全不可能的。

接下來是中斷合併 - 通常,當您增加環形緩衝區大小時,NIC 將適當調整其低/高標記,並在緩衝更多數據時觸發中斷(即不太頻繁)。結果,核心在中斷處理期間處理這些大量數據所需的時間也會增加。

以上所有導致了一個簡單的桶效應——隨著較大的環丟包機率降低,網路延遲增加。如果您通過 TCP 流式傳輸大文件,這可能非常好,如果您是低延遲小數據包應用程序(即遊戲等),則可能完全不受歡迎。

您看到的預設數字是兩者之間的合理權衡。

引用自:https://serverfault.com/questions/1078532