[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170410214131.GE4730@C02RW35GFVH8.dhcp.broadcom.net>
Date: Mon, 10 Apr 2017 17:41:31 -0400
From: Andy Gospodarek <andy@...yhouse.net>
To: Daniel Borkmann <daniel@...earbox.net>
Cc: David Miller <davem@...emloft.net>, netdev@...r.kernel.org,
xdp-newbies@...r.kernel.org
Subject: Re: [PATCH v2 net-next RFC] Generic XDP
On Mon, Apr 10, 2017 at 10:12:42PM +0200, Daniel Borkmann wrote:
> On 04/10/2017 08:39 PM, Andy Gospodarek wrote:
> [...]
> > I ran this on a desktop-class system I have (i7-6700 CPU @ 3.40GHz)
> > and used pktgen_sample03_burst_single_flow.sh from another system to
> > throw ~6.5Mpps as a single UDP stream towards the system running XDP.
> >
> > I just commented out the ndo_xdp op in bnxt.c to test this patch. The
> > differences were pretty dramatic.
> >
> > Using the ndo_xdp ndo in bnxt_en, my perf report output looked like
> > this (not sure why X is still running on this system!):
> >
> > 38.08% swapper [sysimgblt] [k] 0x0000000000005bd0
> > 11.80% swapper [kernel.vmlinux] [k] intel_idle
> > 10.49% swapper [bnxt_en] [k] bnxt_rx_pkt
> > 6.31% swapper [bnxt_en] [k] bnxt_rx_xdp
> > 5.64% swapper [bnxt_en] [k] bnxt_poll
> > 4.22% swapper [kernel.vmlinux] [k] poll_idle
> > 3.46% swapper [kernel.vmlinux] [k] irq_entries_start
> > 2.95% swapper [kernel.vmlinux] [k] napi_complete_done
> > 1.79% swapper [kernel.vmlinux] [k] cpuidle_enter_state
> > 1.53% swapper [kernel.vmlinux] [k] menu_select
> > 1.19% swapper [bnxt_en] [k] bnxt_reuse_rx_data
> > 1.00% swapper [sysimgblt] [k] 0x0000000000005c6f
> > 0.92% swapper [kernel.vmlinux] [k] __next_timer_interrupt
> > 0.71% swapper [kernel.vmlinux] [k] _raw_spin_lock_irqsave
> > 0.71% swapper [kernel.vmlinux] [k] bpf_map_lookup_elem
> >
> > mpstat reports that the CPU receiving and dropping the traffic is
> > basically running idle. Dropping this amount of traffic in the driver
> > has very little impact on the system.
> >
> > With v2 of this patch I see the following from perf report:
> >
> > 19.69% ksoftirqd/3 [kernel.vmlinux] [k] memcpy_erms
> > 16.30% ksoftirqd/3 [kernel.vmlinux] [k] __bpf_prog_run
>
> Forgot echo 1 > /proc/sys/net/core/bpf_jit_enable? Was it disabled in both cases?
>
Good catch. This must have been a run I did with it off.
Results with bpf_git_enable=1 and gro off, still only 7.5Mpps.
26.34% ksoftirqd/5 [kernel.vmlinux] [k] memcpy_erms
14.79% ksoftirqd/5 [bnxt_en] [k] bnxt_rx_pkt
10.11% ksoftirqd/5 [kernel.vmlinux] [k] __build_skb
5.01% ksoftirqd/5 [kernel.vmlinux] [k] page_frag_free
4.66% ksoftirqd/5 [kernel.vmlinux] [k] kmem_cache_alloc
4.19% ksoftirqd/5 [kernel.vmlinux] [k] kmem_cache_free
3.67% ksoftirqd/5 [bnxt_en] [k] bnxt_poll
2.97% ksoftirqd/5 [kernel.vmlinux] [k] netif_receive_skb_internal
2.24% ksoftirqd/5 [kernel.vmlinux] [k] __napi_alloc_skb
1.92% ksoftirqd/5 [kernel.vmlinux] [k] eth_type_trans
1.78% ksoftirqd/5 [bnxt_en] [k] bnxt_rx_xdp
1.62% ksoftirqd/5 [kernel.vmlinux] [k] net_rx_action
1.61% ksoftirqd/5 [kernel.vmlinux] [k] kfree_skb
1.58% ksoftirqd/5 [kernel.vmlinux] [k] dev_gro_receive
1.51% ksoftirqd/5 [bnxt_en] [k] bnxt_reuse_rx_data
1.44% ksoftirqd/5 [kernel.vmlinux] [k] skb_release_data
1.42% ksoftirqd/5 [kernel.vmlinux] [k] page_frag_alloc
1.29% ksoftirqd/5 [kernel.vmlinux] [k] napi_gro_receive
1.21% ksoftirqd/5 [kernel.vmlinux] [k] skb_release_head_state
0.82% ksoftirqd/5 [kernel.vmlinux] [k] skb_free_head
0.81% ksoftirqd/5 [kernel.vmlinux] [k] swiotlb_sync_single
0.77% ksoftirqd/5 [kernel.vmlinux] [k] skb_gro_reset_offset
0.76% ksoftirqd/5 [kernel.vmlinux] [k] skb_release_all
0.73% ksoftirqd/5 [kernel.vmlinux] [k] kfree_skbmem
> > 10.11% ksoftirqd/3 [bnxt_en] [k] bnxt_rx_pkt
> > 7.69% ksoftirqd/3 [kernel.vmlinux] [k] __build_skb
> > 4.25% ksoftirqd/3 [kernel.vmlinux] [k] inet_gro_receive
> > 3.74% ksoftirqd/3 [kernel.vmlinux] [k] kmem_cache_alloc
> > 3.53% ksoftirqd/3 [kernel.vmlinux] [k] dev_gro_receive
> > 3.43% ksoftirqd/3 [kernel.vmlinux] [k] page_frag_free
> > 3.12% ksoftirqd/3 [kernel.vmlinux] [k] kmem_cache_free
> > 2.56% ksoftirqd/3 [bnxt_en] [k] bnxt_poll
> > 2.46% ksoftirqd/3 [kernel.vmlinux] [k] netif_receive_skb_internal
> > 2.13% ksoftirqd/3 [kernel.vmlinux] [k] __udp4_lib_lookup
> > 1.63% ksoftirqd/3 [kernel.vmlinux] [k] __napi_alloc_skb
> > 1.51% ksoftirqd/3 [kernel.vmlinux] [k] eth_type_trans
> > 1.42% ksoftirqd/3 [kernel.vmlinux] [k] udp_gro_receive
> > 1.29% ksoftirqd/3 [kernel.vmlinux] [k] napi_gro_receive
> > 1.25% ksoftirqd/3 [kernel.vmlinux] [k] udp4_gro_receive
> > 1.18% ksoftirqd/3 [bnxt_en] [k] bnxt_rx_xdp
> > 1.17% ksoftirqd/3 [kernel.vmlinux] [k] skb_release_data
> > 1.11% ksoftirqd/3 [bnxt_en] [k] bnxt_reuse_rx_data
> > 1.07% ksoftirqd/3 [kernel.vmlinux] [k] net_rx_action
>
Powered by blists - more mailing lists