Назад | Перейти на главную страницу

Как увеличить параметры кольца для сетевой карты на сервере Linux

Я использовал утилиту ethtool для увеличения значений 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

Ну вот пример предустановленные максимальные значения кольцевого буфера на устройствах Broadcom bnx2 был изменен в ядре с 1020 по 2040 несколько лет назад, поэтому он возможно.

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, и несколько человек в моей отрасли взломали бы эти драйверы, чтобы сделать сетевые карты более удобными. Но знайте, что имеет смысл понять где проблемы с производительностью. Также знайте, что другие модели / драйверы сетевых адаптеров имеют больший кольцевой буфер, чем 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

Попробуйте профилировать свое приложение и посмотреть, где находятся капли. Вы не указали дистрибутив или версию ОС, поэтому я не могу дать слишком много информации о конкретном дистрибутиве. Удобный портативный инструмент секундомер. Вы можете использовать его, чтобы узнать, происходят ли отбрасывания на уровне 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)