
檢查網卡環形緩衝區:
# 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)而不是更高的值,或者它們的硬體最大功能?增加這些值是否有任何缺點(如果有的話?)?
答案1
首先,你設定的數字不在位元組正如許多人所認為的那樣,他們處於描述符(描述符大小取決於硬體)。因此,當您增加環長度時,您會要求在核心中為這些描述符分配更多記憶體。一般來說,您希望該核心記憶體位於 L1 快取中,以便中斷處理盡可能快。增加戒指尺寸會降低這種可能性,在某些情況下甚至完全不可能。
接下來是中斷合併 - 一般來說,當您增加環形緩衝區大小時,NIC 將適當調整其低/高標記,並在緩衝更多資料時觸發中斷(頻率較低)。因此,核心在中斷處理期間處理這些大量資料所需的時間也會增加。
所有上述結果都會產生簡單的桶效應 - 環越大,丟包機率就會降低,網路延遲就會增加。如果您透過 TCP 傳輸大文件,這可能完全沒問題,但如果您是低延遲小資料包應用程式(即遊戲等),則可能完全不受歡迎。
您看到的預設數字是兩者之間的合理權衡。