Networking
為什麼 NIC 環參數未預先設置為其硬體最大功能?
檢查網卡環形緩衝區:
# 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 流式傳輸大文件,這可能非常好,如果您是低延遲小數據包應用程序(即遊戲等),則可能完全不受歡迎。
您看到的預設數字是兩者之間的合理權衡。