• Eric Dumazet's avatar
    kobject: factorize skb setup in kobject_uevent_net_broadcast() · d464e84e
    Eric Dumazet authored
    We can build one skb and let it be cloned in netlink.
    This is much faster, and use less memory (all clones will
    share the same skb->head)
    time perf record (for f in `seq 1 3000` ; do ip netns add tast$f; done)
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 4.110 MB perf.data (~179584 samples) ]
    real    0m24.227s # instead of 0m52.554s
    user    0m0.329s
    sys 0m23.753s # instead of 0m51.375s
        14.77%       ip  [kernel.kallsyms]  [k] __ip6addrlbl_add
        14.56%       ip  [kernel.kallsyms]  [k] netlink_broadcast_filtered
        11.65%       ip  [kernel.kallsyms]  [k] netlink_has_listeners
         6.19%       ip  [kernel.kallsyms]  [k] _raw_spin_lock_irqsave
         5.66%       ip  [kernel.kallsyms]  [k] kobject_uevent_env
         4.97%       ip  [kernel.kallsyms]  [k] memset_erms
         4.67%       ip  [kernel.kallsyms]  [k] refcount_sub_and_test
         4.41%       ip  [kernel.kallsyms]  [k] _raw_read_lock
         3.59%       ip  [kernel.kallsyms]  [k] refcount_inc_not_zero
         3.13%       ip  [kernel.kallsyms]  [k] _raw_spin_unlock_irqrestore
         1.55%       ip  [kernel.kallsyms]  [k] __wake_up
         1.20%       ip  [kernel.kallsyms]  [k] strlen
         1.03%       ip  [kernel.kallsyms]  [k] __wake_up_common
         0.93%       ip  [kernel.kallsyms]  [k] consume_skb
         0.92%       ip  [kernel.kallsyms]  [k] netlink_trim
         0.87%       ip  [kernel.kallsyms]  [k] insert_header
         0.63%       ip  [kernel.kallsyms]  [k] unmap_page_range
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
kobject_uevent.c 14.5 KB