title: How to let kernel send out a ethernet frame large than 1514?
body: <p>Here's a network performance issue. On my board there's a Gbit ethernet phy, the Tx speed is much poorer than Rx speed when I test network bandwidth with iperf. After comparing the package which is captured by Wireshark, can find that the board always send out Ethernet frame in 1514 bytes, while it can receive in larger Ethernet frame, which is up to 64k.</p>
  
  <p>This is why Tx performance poor than Rx performance.
  iperf send data in 128k per send, in kernel it always segment it into 1514 bytes and send to the network driver. </p>
  
  <p>I traced the sku-len when send data, log as bellow. I guess there's some feature in kernel can send large Ethernet frame, but which is it? </p>
  
  <p>I tried to change mtu to 8000 by <code>ifconfig eth0 mtu 8000</code> command, but no improvement.</p>
  
  <pre><code>[  128.449334] TCP: Gang tcp_sendmsg 1176 msg-&gt;msg_iter.count=31216,size_goal=65160,copy=11640,max=65160
  [  128.449377] TCP: Gang tcp_transmit_skb skb-&gt;len=46336
  [  128.449406] Gang ip_output skb-len=46388
  [  128.449416] Gang ip_finish_output2 skb-&gt;len=46388
  [  128.449422] Gang sch_direct_xmit skb-&gt;len=46402
  [  128.449499] Gang dev_hard_start_xmit skb-&gt;len=1514
  [  128.449503] Gang dwmac_xmit skb-&gt;len=1514
  [  128.449522] Gang dev_hard_start_xmit skb-&gt;len=1514  &lt;&gt;
  [  128.449528] Gang dwmac_xmit skb-&gt;len=1514
  </code></pre>