• Jesper Dangaard Brouer's avatar
    hv_netvsc: Add XDP frame size to driver · 7358877a
    Jesper Dangaard Brouer authored
    The hyperv NIC driver does memory allocation and copy even without XDP.
    In XDP mode it will allocate a new page for each packet and copy over
    the payload, before invoking the XDP BPF-prog.
    
    The positive thing it that its easy to determine the xdp.frame_sz.
    
    The XDP implementation for hv_netvsc transparently passes xdp_prog
    to the associated VF NIC. Many of the Azure VMs are using SRIOV, so
    majority of the data are actually processed directly on the VF driver's XDP
    path. So the overhead of the synthetic data path (hv_netvsc) is minimal.
    
    Then XDP is enabled on this driver, XDP_PASS and XDP_TX will create the
    SKB via build_skb (based on the newly allocated page). Now using XDP
    frame_sz this will provide more skb_tailroom, which netstack can use for
    SKB coalescing (e.g tcp_try_coalesce -> skb_try_coalesce).
    
    V3: Adjust patch desc to be more positive.
    Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Cc: Wei Liu <wei.liu@kernel.org>
    Cc: "K. Y. Srinivasan" <kys@microsoft.com>
    Cc: Haiyang Zhang <haiyangz@microsoft.com>
    Cc: Stephen Hemminger <sthemmin@microsoft.com>
    Link: https://lore.kernel.org/bpf/158945339857.97035.10212138582505736163.stgit@firesoul
    7358877a
netvsc_drv.c 66.5 KB