• Zhangjie \(HZ\)'s avatar
    virtio-net: Set needed_headroom for virtio-net when VIRTIO_F_ANY_LAYOUT is true · 6ebbc1a6
    Zhangjie \(HZ\) authored
    This is a small supplement for commit e7428e95
    ("virtio-net: put virtio-net header inline with data"). TCP packages have
    enough room to put virtio-net header in, but UDP packages do not. By
    setting dev->needed_headroom for virtio-net device, UDP packages could have
    enough room.
    
    For UDP packages, sk_buff is alloced in fun __ip_append_data. The size is
    "alloclen + hh_len + 15", and "hh_len = LL_RESERVED_SPACE(rt-dst.dev);".
    The Macro is defined as follows:
    #define LL_RESERVED_SPACE(dev) \
         ((((dev)->hard_header_len+(dev)->needed_headroom)\
         &~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
    By default, for UDP packages, after skb is allocated, only 16 bytes
    reserved. And 2 bytes remained after mac header is set. That is not enough
    to put virtio-net header in. If we set dev->needed_headroom to 12 or 10
    (according to mergeable_rx_bufs is on or off ), more room can be reserved.
    Then there is enough room for UDP packages to put the header in.
    
    test result list as below:
    guest and host: suse11sp3, netperf, intel 2.4GHz
    +-------+---------+---------+---------+---------+
    |       |   old             |   new             |
    +-------+---------+---------+---------+---------+
    | UDP   |  Gbit/s | pps     |  Gbit/s | pps     |
    | 64    |  0.57   | 692232  |  0.61   | 742420  |
    | 256   |  1.60   | 686860  |  1.71   | 733331  |
    | 512   |  2.92   | 674576  |  3.07   | 710446  |
    | 1024  |  4.99   | 598977  |  5.17   | 620821  |
    | 1460  |  5.68   | 483757  |  7.16   | 610519  |
    | 4096  |  6.98   | 637468  |  7.21   | 658471  |
    +-------+---------+---------+---------+---------+
    Signed-off-by: default avatarZhang Jie <zhangjie14@huawei.com>
    Acked-by: default avatarRusty Russell <rusty@rustcorp.com.au>
    Acked-by: default avatarJason Wang <jasowang@redhat.com>
    Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    6ebbc1a6
virtio_net.c 48.9 KB