Вот проблема с производительностью сети.На моей плате есть 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