• Benjamin LaHaise's avatar
    [NET]: Speed up __alloc_skb() · 4947d3ef
    Benjamin LaHaise authored
    From: Benjamin LaHaise <bcrl@kvack.org>
    
    In __alloc_skb(), the use of skb_shinfo() which casts a u8 * to the 
    shared info structure results in gcc being forced to do a reload of the 
    pointer since it has no information on possible aliasing.  Fix this by 
    using a pointer to refer to skb_shared_info.
    
    By initializing skb_shared_info sequentially, the write combining buffers 
    can reduce the number of memory transactions to a single write.  Reorder 
    the initialization in __alloc_skb() to match the structure definition.  
    There is also an alignment issue on 64 bit systems with skb_shared_info 
    by converting nr_frags to a short everything packs up nicely.
    
    Also, pass the slab cache pointer according to the fclone flag instead 
    of using two almost identical function calls.
    
    This raises bw_unix performance up to a peak of 707KB/s when combined 
    with the spinlock patch.  It should help other networking protocols, too.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4947d3ef
skbuff.c 45.1 KB