Как разрешить ядру отправлять кадр Ethernet размером больше 1514? - PullRequest
0 голосов
/ 26 октября 2018

Вот проблема с производительностью сети.На моей плате есть Gbit ethery phy, скорость Tx намного ниже скорости Rx, когда я тестирую пропускную способность сети с помощью iperf.После сравнения пакета, захваченного Wireshark, можно обнаружить, что плата всегда отправляет кадр Ethernet в 1514 байтах, в то время как она может принимать в более крупном кадре Ethernet, который составляет до 64 КБ.

Именно поэтому производительность Txхуже, чем производительность Rx.iperf отправляет данные по 128k за отправку, в ядре он всегда сегментирует их на 1514 байт и отправляет сетевому драйверу.

Я проследил sku-len при отправке данных, войдите как показано ниже.Я предполагаю, что какая-то особенность в ядре может отправлять большой кадр Ethernet, но что это?

Я попытался изменить mtu на 8000 с помощью команды ifconfig eth0 mtu 8000, но без улучшения.

[  128.449334] TCP: Gang tcp_sendmsg 1176 msg->msg_iter.count=31216,size_goal=65160,copy=11640,max=65160
[  128.449377] TCP: Gang tcp_transmit_skb skb->len=46336
[  128.449406] Gang ip_output skb-len=46388
[  128.449416] Gang ip_finish_output2 skb->len=46388
[  128.449422] Gang sch_direct_xmit skb->len=46402
[  128.449499] Gang dev_hard_start_xmit skb->len=1514
[  128.449503] Gang dwmac_xmit skb->len=1514
[  128.449522] Gang dev_hard_start_xmit skb->len=1514  <>
[  128.449528] Gang dwmac_xmit skb->len=1514

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Используя ethtool -k eth0, найдите, что tx-tcp-сегментация отключена (исправлено). Чтобы включить его, нужно включить NETIF_F_TSO в драйвере Mac. Но, к сожалению, мой драйвер падает после включения этой функции. Это еще одна проблема. Спасибо, Джефф С

0 голосов
/ 27 октября 2018

То, что вы видите (TX 1500 и RX 65K), наиболее вероятно из-за TCP LRO и LSO - большая разгрузка приема и большая разгрузка отправки. Вместо того, чтобы иметь сегмент ОС или собирать пакеты, эта функция передается на сетевой адаптер, чтобы уменьшить нагрузку на ЦП и улучшить общую производительность.

Вы можете использовать ethtool, чтобы проверить, установлены ли они, или включить / отключить функцию разгрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...