<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>LayerscapeのトピックRe: Lx2160a: XDP performance</title>
    <link>https://community.nxp.com/t5/Layerscape/Lx2160a-XDP-performance/m-p/1594572#M11811</link>
    <description>&lt;P&gt;Please refer to the attached XDP test log from the testing team.&lt;/P&gt;</description>
    <pubDate>Tue, 07 Feb 2023 09:27:10 GMT</pubDate>
    <dc:creator>yipingwang</dc:creator>
    <dc:date>2023-02-07T09:27:10Z</dc:date>
    <item>
      <title>Lx2160a: XDP performance</title>
      <link>https://community.nxp.com/t5/Layerscape/Lx2160a-XDP-performance/m-p/1591504#M11777</link>
      <description>&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;DIV&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;&lt;SPAN&gt;Dear NXP community,&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;P&gt;Does anybody do any experients with XDP work on LX2160a board?&lt;BR /&gt;As far as I can see, XDP Zero-copy support was added few months ago in Linux Vanilla kernel, and since August into 5.15 here&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://source.codeaurora.org/external/qoriq/qoriq-components/linux/log/?h=lf-5.15.y-rt" target="_blank" rel="noopener nofollow ugc"&gt;qoriq-components/linux - Linux Tree for QorIQ support&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;.&lt;/P&gt;&lt;P&gt;But, unfortunately, performance is mediocre. It looks like either zerocopy not working or xdp program attached not natively but generic, or whatever.&amp;nbsp;&lt;BR /&gt;We’ve expected numbers, comparable with VPP-DPDK backed up (I could not get LSDK one working stable, also LSDK versions are really outdated, but performance is kind of good ), but in reality forwarding rate comparable with Linux Kernel:&lt;BR /&gt;~ 500kpps for xdp_router from tutorial&lt;BR /&gt;~ 400kpps for VPP with AF_XDP driver&lt;BR /&gt;~370kpps for Linux Kernel&lt;BR /&gt;~&amp;gt;4.5Mpps for VPP/DPDK.&lt;/P&gt;&lt;P&gt;May be, we forgot something or do something wrong? If someone got satisfying performance, please, advice.&lt;BR /&gt;Below are our setup/test details.&lt;/P&gt;&lt;P&gt;We use binary&amp;nbsp; with 5.15 kernel from above.&lt;BR /&gt;$ uname -a&lt;BR /&gt;Linux localhost 5.15.71-rt51-07203-g00e98e11cb01&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=""&gt;#1&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;SMP PREEMPT_RT Fri Jan 27 22:25:43 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux&lt;BR /&gt;$&lt;BR /&gt;BPF/XDP related options are:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;# grep -E "(BPF)|(XDP)" ./build/linux/.config&lt;/SPAN&gt;
&lt;SPAN class=""&gt;CONFIG_BPF&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;CONFIG_HAVE_EBPF_JIT&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;CONFIG_ARCH_WANT_DEFAULT_BPF_JIT&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;# BPF subsystem&lt;/SPAN&gt;
&lt;SPAN class=""&gt;CONFIG_BPF_SYSCALL&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;CONFIG_BPF_JIT&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;CONFIG_BPF_JIT_ALWAYS_ON&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;CONFIG_BPF_JIT_DEFAULT_ON&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;# CONFIG_BPF_PRELOAD is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;# CONFIG_BPF_LSM is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;# end of BPF subsystem&lt;/SPAN&gt;
&lt;SPAN class=""&gt;CONFIG_CGROUP_BPF&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;CONFIG_XDP_SOCKETS&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;# CONFIG_XDP_SOCKETS_DIAG is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;# CONFIG_NETFILTER_XT_MATCH_BPF is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;# CONFIG_BPFILTER is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;# CONFIG_NET_CLS_BPF is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;# CONFIG_NET_ACT_BPF is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;# CONFIG_BPF_STREAM_PARSER is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;# CONFIG_SENSORS_XDPE122 is not set&lt;/SPAN&gt;
&lt;SPAN class=""&gt;CONFIG_BPF_EVENTS&lt;/SPAN&gt;=y
&lt;SPAN class=""&gt;# CONFIG_TEST_BPF is not set&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;P&gt;eth1 and eth2 interfaces are created by ls-addni.&lt;/P&gt;&lt;P&gt;xdp-tutorial forwarding:&lt;BR /&gt;&lt;A href="https://github.com/xdp-project/xdp-tutorial" target="_blank" rel="noopener nofollow ugc"&gt;GitHub - xdp-project/xdp-tutorial: XDP tutorial&lt;/A&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;built natively on board .&lt;BR /&gt;xdp_router microprogram attached.&lt;/P&gt;&lt;PRE&gt;../xdp-tutorial/packet-solutions# ./xdp_loader -d eth1 -N -F &lt;SPAN class=""&gt;--progsec&lt;/SPAN&gt; xdp_router
Success: Loaded &lt;SPAN class=""&gt;BPF-object&lt;/SPAN&gt;(xdp_prog_kern.o) and used &lt;SPAN class=""&gt;section&lt;/SPAN&gt;(xdp_router)
 - XDP prog attached on device:&lt;SPAN class=""&gt;eth1&lt;/SPAN&gt;(ifindex:&lt;SPAN class=""&gt;5&lt;/SPAN&gt;)
 - Pinning maps in /sys/fs/bpf/eth1/
../xdp-tutorial/packet-solutions# ./xdp_loader -d eth2 -N -F --progsec xdp_router
Success: Loaded &lt;SPAN class=""&gt;BPF-object&lt;/SPAN&gt;(xdp_prog_kern.o) and used &lt;SPAN class=""&gt;section&lt;/SPAN&gt;(xdp_router)
 - XDP prog attached on device:&lt;SPAN class=""&gt;eth2&lt;/SPAN&gt;(ifindex:&lt;SPAN class=""&gt;6&lt;/SPAN&gt;)
 - Pinning maps in /sys/fs/bpf/eth2/&lt;/PRE&gt;&lt;P&gt;As one can see below, program already attached in native mode. At least, ip link show indicated that.&lt;/P&gt;&lt;PRE&gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    &lt;SPAN class=""&gt;link&lt;/SPAN&gt;/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: dummy0: &amp;lt;BROADCAST,NOARP&amp;gt; mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    &lt;SPAN class=""&gt;link&lt;/SPAN&gt;/ether 06:1b:6f:31:a9:6c brd ff:ff:ff:ff:ff:ff
3: sit0@NONE: &amp;lt;NOARP&amp;gt; mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    &lt;SPAN class=""&gt;link&lt;/SPAN&gt;/sit 0.0.0.0 brd 0.0.0.0
4: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    &lt;SPAN class=""&gt;link&lt;/SPAN&gt;/ether d0:63:b4:03:1c:ce brd ff:ff:ff:ff:ff:ff
5: eth1: &amp;lt;BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP&amp;gt; mtu 1500 xdp qdisc mq state UP mode DEFAULT group default qlen 1000
    &lt;SPAN class=""&gt;link&lt;/SPAN&gt;/ether d0:63:b4:03:1c:cb brd ff:ff:ff:ff:ff:ff
    prog/xdp &lt;SPAN class=""&gt;id&lt;/SPAN&gt; 36 tag 551558afe8187df7 jited
6: eth2: &amp;lt;BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP&amp;gt; mtu 1500 xdp qdisc mq state UP mode DEFAULT group default qlen 1000
    &lt;SPAN class=""&gt;link&lt;/SPAN&gt;/ether d0:63:b4:03:1c:&lt;SPAN class=""&gt;cd&lt;/SPAN&gt; brd ff:ff:ff:ff:ff:ff
    prog/xdp &lt;SPAN class=""&gt;id&lt;/SPAN&gt; 44 tag 551558afe8187df7 jited&lt;/PRE&gt;&lt;P&gt;Then, IP addresses are configured, ip forwarding sysctled to on (it has impact on bpf forwarding as well as on kernel forwarding), test performed by Cisco T-Rex.&lt;BR /&gt;To be sure that forwarding goes through XDP, we can check that tcpdump does not see forwarded packets , we can also enable maps and see XDP_REDIRECT counters increasing.&lt;BR /&gt;Still, just 30% faster than kernel (while in examples over internet on PC boxes, it should be closer to DPDK).&lt;/P&gt;&lt;P&gt;VPP:&lt;/P&gt;&lt;P&gt;Vanilla VPP used, as LSDK one really not stable with any network interfaces.&amp;nbsp;&lt;BR /&gt;same basic setup, then by vpp manual:&lt;/P&gt;&lt;PRE&gt;vpp# create &lt;SPAN class=""&gt;interface&lt;/SPAN&gt; &lt;SPAN class=""&gt;af_xdp&lt;/SPAN&gt; &lt;SPAN class=""&gt;host&lt;/SPAN&gt;-&lt;SPAN class=""&gt;if&lt;/SPAN&gt; &lt;SPAN class=""&gt;eth1&lt;/SPAN&gt; &lt;SPAN class=""&gt;num&lt;/SPAN&gt;-&lt;SPAN class=""&gt;rx&lt;/SPAN&gt;-&lt;SPAN class=""&gt;queues&lt;/SPAN&gt; &lt;SPAN class=""&gt;all&lt;/SPAN&gt;
vpp# create &lt;SPAN class=""&gt;interface&lt;/SPAN&gt; &lt;SPAN class=""&gt;af_xdp&lt;/SPAN&gt; &lt;SPAN class=""&gt;host&lt;/SPAN&gt;-&lt;SPAN class=""&gt;if&lt;/SPAN&gt; &lt;SPAN class=""&gt;eth2&lt;/SPAN&gt; &lt;SPAN class=""&gt;num&lt;/SPAN&gt;-&lt;SPAN class=""&gt;rx&lt;/SPAN&gt;-&lt;SPAN class=""&gt;queues&lt;/SPAN&gt; &lt;SPAN class=""&gt;all&lt;/SPAN&gt;
&lt;/PRE&gt;&lt;P&gt;Then mac addresses are set, IP addreses are set and simple test performet by T-Rex with about 400kpps performance.&lt;BR /&gt;Note, we were not able “tell” VPP to use zero-copy mode:&lt;/P&gt;&lt;PRE&gt;vpp# create &lt;SPAN class=""&gt;interface&lt;/SPAN&gt; &lt;SPAN class=""&gt;af_xdp&lt;/SPAN&gt; &lt;SPAN class=""&gt;host&lt;/SPAN&gt;-&lt;SPAN class=""&gt;if&lt;/SPAN&gt; &lt;SPAN class=""&gt;eth2&lt;/SPAN&gt; &lt;SPAN class=""&gt;num&lt;/SPAN&gt;-&lt;SPAN class=""&gt;rx&lt;/SPAN&gt;-&lt;SPAN class=""&gt;queues&lt;/SPAN&gt; &lt;SPAN class=""&gt;all&lt;/SPAN&gt; &lt;SPAN class=""&gt;zero&lt;/SPAN&gt;-&lt;SPAN class=""&gt;copy&lt;/SPAN&gt;
af_xdp             [error ]: af_xdp_create_queue: xsk_socket__create() failed (&lt;SPAN class=""&gt;is&lt;/SPAN&gt; linux netdev eth2 up?): Operation not supported
create &lt;SPAN class=""&gt;interface&lt;/SPAN&gt; &lt;SPAN class=""&gt;af_xdp&lt;/SPAN&gt;: &lt;SPAN class=""&gt;xsk_socket__create&lt;/SPAN&gt;() failed (&lt;SPAN class=""&gt;is&lt;/SPAN&gt; linux netdev eth2 up?): Operation not supported
vpp#&lt;/PRE&gt;&lt;P&gt;During first “normal” interface creation, we also see some alarms in VPP logs:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;libbpf:&lt;/SPAN&gt; elf: skipping unrecognized data section(&lt;SPAN class=""&gt;7&lt;/SPAN&gt;) .xdp_run_config
&lt;SPAN class=""&gt;libbpf:&lt;/SPAN&gt; elf: skipping unrecognized data section(&lt;SPAN class=""&gt;8&lt;/SPAN&gt;) xdp_metadata
&lt;SPAN class=""&gt;libbpf:&lt;/SPAN&gt; elf: skipping unrecognized data section(&lt;SPAN class=""&gt;7&lt;/SPAN&gt;) xdp_metadata
&lt;SPAN class=""&gt;libbpf:&lt;/SPAN&gt; prog &lt;SPAN class=""&gt;'xdp_dispatcher': BPF program load failed: Invalid argument&lt;/SPAN&gt;
&lt;SPAN class=""&gt;libbpf:&lt;/SPAN&gt; prog &lt;SPAN class=""&gt;'xdp_dispatcher': -- BEGIN PROG LOAD LOG --&lt;/SPAN&gt;
Func#&lt;SPAN class=""&gt;11&lt;/SPAN&gt; &lt;SPAN class=""&gt;is&lt;/SPAN&gt; safe &lt;SPAN class=""&gt;for&lt;/SPAN&gt; any args that match its prototype
btf_vmlinux &lt;SPAN class=""&gt;is&lt;/SPAN&gt; malformed
R1 type=ctx expected=fp
; int xdp_dispatcher(struct xdp_md *ctx)
&lt;SPAN class=""&gt;0&lt;/SPAN&gt;: (bf) r6 = r1
&lt;SPAN class=""&gt;1&lt;/SPAN&gt;: (b7) r0 = &lt;SPAN class=""&gt;2&lt;/SPAN&gt;
; __u8 num_progs_enabled = conf.num_progs_enabled;
&lt;SPAN class=""&gt;2&lt;/SPAN&gt;: (&lt;SPAN class=""&gt;18&lt;/SPAN&gt;) r8 = &lt;SPAN class=""&gt;0&lt;/SPAN&gt;xffff800008448000
&lt;SPAN class=""&gt;4&lt;/SPAN&gt;: (&lt;SPAN class=""&gt;71&lt;/SPAN&gt;) r7 = *(u8 *)(r8 +&lt;SPAN class=""&gt;0&lt;/SPAN&gt;)
 R0_w=invP2 R1=ctx(id=&lt;SPAN class=""&gt;0&lt;/SPAN&gt;,&lt;SPAN class=""&gt;off&lt;/SPAN&gt;=&lt;SPAN class=""&gt;0&lt;/SPAN&gt;,imm=&lt;SPAN class=""&gt;0&lt;/SPAN&gt;) R6_w=ctx(id=&lt;SPAN class=""&gt;0&lt;/SPAN&gt;,&lt;SPAN class=""&gt;off&lt;/SPAN&gt;=&lt;SPAN class=""&gt;0&lt;/SPAN&gt;,imm=&lt;SPAN class=""&gt;0&lt;/SPAN&gt;) R8_w=map_value(id=&lt;SPAN class=""&gt;0&lt;/SPAN&gt;,&lt;SPAN class=""&gt;off&lt;/SPAN&gt;=&lt;SPAN class=""&gt;0&lt;/SPAN&gt;,ks=&lt;SPAN class=""&gt;4&lt;/SPAN&gt;,vs=&lt;SPAN class=""&gt;84&lt;/SPAN&gt;,imm=&lt;SPAN class=""&gt;0&lt;/SPAN&gt;) R10=fp0
; &lt;SPAN class=""&gt;if&lt;/SPAN&gt; (num_progs_enabled &amp;lt; &lt;SPAN class=""&gt;1&lt;/SPAN&gt;)
&lt;SPAN class=""&gt;5&lt;/SPAN&gt;: (&lt;SPAN class=""&gt;15&lt;/SPAN&gt;) &lt;SPAN class=""&gt;if&lt;/SPAN&gt; r7 == &lt;SPAN class=""&gt;0&lt;/SPAN&gt;x0 &lt;SPAN class=""&gt;goto&lt;/SPAN&gt; pc+&lt;SPAN class=""&gt;141&lt;/SPAN&gt;
; ret = prog0(ctx);
&lt;SPAN class=""&gt;6&lt;/SPAN&gt;: (bf) r1 = r6
&lt;SPAN class=""&gt;7&lt;/SPAN&gt;: (&lt;SPAN class=""&gt;85&lt;/SPAN&gt;) &lt;SPAN class=""&gt;call&lt;/SPAN&gt; pc+&lt;SPAN class=""&gt;140&lt;/SPAN&gt;
btf_vmlinux &lt;SPAN class=""&gt;is&lt;/SPAN&gt; malformed
R1 type=ctx expected=fp
Caller passes invalid args &lt;SPAN class=""&gt;into&lt;/SPAN&gt; func#&lt;SPAN class=""&gt;1&lt;/SPAN&gt;
processed &lt;SPAN class=""&gt;84&lt;/SPAN&gt; insns (limit &lt;SPAN class=""&gt;1000000&lt;/SPAN&gt;) max_states_per_insn &lt;SPAN class=""&gt;0&lt;/SPAN&gt; total_states &lt;SPAN class=""&gt;9&lt;/SPAN&gt; peak_states &lt;SPAN class=""&gt;9&lt;/SPAN&gt; mark_read &lt;SPAN class=""&gt;1&lt;/SPAN&gt;
-- &lt;SPAN class=""&gt;END&lt;/SPAN&gt; PROG LOAD LOG --
&lt;SPAN class=""&gt;libbpf:&lt;/SPAN&gt; failed &lt;SPAN class=""&gt;to&lt;/SPAN&gt; load program &lt;SPAN class=""&gt;'xdp_dispatcher'&lt;/SPAN&gt;
&lt;SPAN class=""&gt;libbpf:&lt;/SPAN&gt; failed &lt;SPAN class=""&gt;to&lt;/SPAN&gt; load &lt;SPAN class=""&gt;object&lt;/SPAN&gt; &lt;SPAN class=""&gt;'xdp-dispatcher.o'&lt;/SPAN&gt;
&lt;SPAN class=""&gt;libxdp:&lt;/SPAN&gt; Failed &lt;SPAN class=""&gt;to&lt;/SPAN&gt; load dispatcher: Invalid argument
&lt;SPAN class=""&gt;libxdp:&lt;/SPAN&gt; Falling back &lt;SPAN class=""&gt;to&lt;/SPAN&gt; loading &lt;SPAN class=""&gt;single&lt;/SPAN&gt; prog without dispatcher&lt;/PRE&gt;&lt;P&gt;So, any ideas, what could be wrong?&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Wed, 01 Feb 2023 16:48:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/Lx2160a-XDP-performance/m-p/1591504#M11777</guid>
      <dc:creator>agv100</dc:creator>
      <dc:date>2023-02-01T16:48:20Z</dc:date>
    </item>
    <item>
      <title>Re: Lx2160a: XDP performance</title>
      <link>https://community.nxp.com/t5/Layerscape/Lx2160a-XDP-performance/m-p/1594572#M11811</link>
      <description>&lt;P&gt;Please refer to the attached XDP test log from the testing team.&lt;/P&gt;</description>
      <pubDate>Tue, 07 Feb 2023 09:27:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/Lx2160a-XDP-performance/m-p/1594572#M11811</guid>
      <dc:creator>yipingwang</dc:creator>
      <dc:date>2023-02-07T09:27:10Z</dc:date>
    </item>
  </channel>
</rss>

