On Mon, Jun 17, 2019 at 11:23 AM William Tu <u9012...@gmail.com> wrote: > > Hi Eelco, > > On Mon, Jun 17, 2019 at 3:12 AM Eelco Chaudron <echau...@redhat.com> wrote: > > > > Hi William, > > > > See below parts of an offline email discussion I had with Magnus before, > > and some research I did in the end, which explains that by design you > > might not get all the descriptors ready. > > I think it's different issues. The behavior you described is a hickup waiting > for queuing 16 rx packets. Here, at the afxdp_complete_tx, the > xsk_ring_cons__peek > returns descs that already been released, causing ovs push more elems and thus > crash. > > > Hope this helps change your design… > > > > In addition, the Point to Point test is working with you change, > > however, the PVP test is still failing due to buffer starvation (see my > > comments in Patchv8 for a possible cause). > > > Thanks, looking back v8 > https://patchwork.ozlabs.org/patch/1097740/ > Hopefully next version will fix this issue. > > > Also on OVS restart system crashes in the following part: > > > > #0 netdev_afxdp_rxq_recv (rxq_=0x173c080, batch=0x7fe1397f80d0, > > qfill=0x0) at lib/netdev-afxdp.c:583 > > #1 0x0000000000907f21 in netdev_rxq_recv (rx=<optimized out>, > > batch=batch@entry=0x7fe1397f80d0, qfill=<optimized out>) at > > lib/netdev.c:710 > > #2 0x00000000008dd1c3 in dp_netdev_process_rxq_port > > (pmd=pmd@entry=0x175d990, rxq=0x175a460, port_no=2) at > > lib/dpif-netdev.c:4257 > > #3 0x00000000008dd63d in pmd_thread_main (f_=<optimized out>) at > > lib/dpif-netdev.c:5449 > > #4 0x000000000095e94d in ovsthread_wrapper (aux_=<optimized out>) at > > lib/ovs-thread.c:352 > > #5 0x00007fe1633872de in start_thread () from /lib64/libpthread.so.0 > > #6 0x00007fe162b2ca63 in clone () from /lib64/libc.so.6 > > > How do you restart the system? So I have two afxdp port > Port "eth3" > Interface "eth3" > type: afxdp > options: {n_rxq="1", xdpmode=drv} > Port "eth5" > Interface "eth5" > type: afxdp > options: {n_rxq="1", xdpmode=drv} > > I tested using > # ovs-vsctl del-port eth3 > # ovs-vsctl del-port eth5 > # ovs-vsctl del-br br0 > # ovs-appctl -t ovs-vswitchd exit > Looks ok. > > <snip> > > > > This means, that if you rely on (the naive :-)) code in the sample > > > application, you can endup in a situation where you can receive from > > > the > > > Rx ring, but not post to the fill ring. > > > > > > So, the reason for the 16 packet hickup is as following: > > > > > > 1. Userland: The fill ring is completely filled. > > > 2. Kernel: One packet is received, one entry picked from the fill > > > ring, > > > but the consumer pointer is not bumped, and packet is placed on the > > > Rx ring. > > > 3. Userland: One packet is picked from the Rx ring. > > > 4. Userland: Tries to put an entry on fill ring. The fill ring is > > > full, > > > so userland spins. > > > 5. Kernel: When 16 packets has been picked from the fill ring the > > > consumer ptr is released. > > > 6. Userland: Exists the while loop. > > Based on the above, there is no starvation problem here if there are more > than 16 packets, correct? And at step 4, we can skip spinning and try to > process more rx ring. > > For next version, I will first check the fill ring by using > xsk_prod_nb_free(), > to avoid the step 4. > > Thanks > William
Hi Eelco, I have some fixes with commit "prepare for v12" at https://github.com/williamtu/ovs-ebpf/commits/afxdp-v11 I tested PVP and it works ok (using tap and also veth namespaces) Can you give it a try? Thanks a lot William _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev