Ethernet

如何增加 Linux 伺服器上 NIC 的環參數

  • October 19, 2014

我使用 ethtool 實用程序來增加我們其中一台伺服器上 NIC 的 rx 和 tx 值。我執行了以下命令:

ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:             2040
RX Mini:        0
RX Jumbo:       8160
TX:             255
Current hardware settings:
RX:             2040
RX Mini:        0
RX Jumbo:       0
TX:             255

我可以以某種方式更改卡上的預設最大值嗎?或者它們是硬體限制。我們在伺服器上的網卡是:Broadcom NetXtreme II BCM5709 1000Base-T

好吧,有幾年前在核心中修改了從 1020 到 2040 的Broadcom bnx2 設備上預設的最大環形緩衝區數字的範例,所以這是可能的

diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h
index efdfbc2..62ac83e 100644
--- a/drivers/net/bnx2.h
+++ b/drivers/net/bnx2.h
@@ -6502,8 +6502,8 @@ struct l2_fhdr {
#define TX_DESC_CNT  (BCM_PAGE_SIZE / sizeof(struct tx_bd))
#define MAX_TX_DESC_CNT (TX_DESC_CNT - 1)

-#define MAX_RX_RINGS        4
-#define MAX_RX_PG_RINGS        16
+#define MAX_RX_RINGS        8
+#define MAX_RX_PG_RINGS        32
#define RX_DESC_CNT  (BCM_PAGE_SIZE / sizeof(struct rx_bd))
#define MAX_RX_DESC_CNT (RX_DESC_CNT - 1)
#define MAX_TOTAL_RX_DESC_CNT (MAX_RX_DESC_CNT * MAX_RX_RINGS)

您可以嘗試其中的一些;在某些核心/驅動程序建構之前,我已經看到這些MAX_RX_RINGS和值被推到 16 和 64。MAX_RX_PG_RINGS這些通常是 Dell PowerEdge 和 HP ProLiant 伺服器的板載 NIC,我所在行業的一些人會破解這些驅動程序以使 NIC 更有用。但要知道,了解性能問題在哪裡可能是有意義的。還知道其他 NIC 型號/驅動程序具有比 Broadcom 更大的環形緩衝區。

Intel:

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

嘗試分析您的應用程序並查看下降的位置。您沒有指定作業系統發行版或版本,所以我不能提供太多特定於發行版的資訊。一個方便的攜帶式工具是dropwatch。您可以使用它來查看是否在 IP、鏈路或應用程序層發生了丟包。

# dropwatch -l kas

1 drops at tcp_rcv_established+916 (0xffffffff814ae5c6)
2 drops at tcp_v4_rcv+aa (0xffffffff814b78aa)
2 drops at tcp_rcv_established+916 (0xffffffff814ae5c6)
1 drops at skb_copy_datagram_from_iovec+2fe (0xffffffff81455dde)
1 drops at skb_copy_datagram_from_iovec+2fe (0xffffffff81455dde)
2 drops at tcp_v4_rcv+aa (0xffffffff814b78aa)
2 drops at skb_copy_datagram_from_iovec+2fe (0xffffffff81455dde)
1 drops at tcp_v4_rcv+aa (0xffffffff814b78aa)
1 drops at tcp_v4_rcv+aa (0xffffffff814b78aa)
18 drops at unix_stream_connect+1dc (0xffffffff814f4cdc)
2 drops at tcp_v4_rcv+aa (0xffffffff814b78aa)

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