我使用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年内核中修改了
pre-set maximum ring buffer figures on Broadcom bnx2 devices的例子,所以有可能.
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和MAX_RX_PG_RINGS值被推送到16和64.这些通常是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)