如何增加Linux服务器上NIC的环形参数

我使用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 

我能以某种方式更改卡上的预设最大值吗? 或者他们是一个硬件限制。 我们在服务器上的NIC是:Broadcom NetXtreme II BCM5709 1000Base-T

那么在几年前从1020到2040内核修改的Broadcom bnx2设备上的预设最大环形缓冲区数字就是这样的例子,所以这是可能的

 diff --git a/drivers/net/bnx2.hb/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_RINGSMAX_RX_PG_RINGS值在某些内核/驱动程序构build之前被推到16和64之前。 这些通常是戴尔PowerEdge和HP ProLiant服务器的板载网卡,而且我的行业中有一些人会破解这些驱动程序,使网卡更加有用。 但是要知道理解性能问题的位置是有意义的。 也知道其他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)