>> > >> >Hi, >> > >> >Some comments below. >> > >> >> Hi Flavio, >> >> Thanks for your review! >> >> I've responded to your comments inline - I've also addressed the >> cosmetic changes that you suggested in V3 of the patch. >> >> Thanks again, >> Mark >> >> > >> >On Mon, 1 Feb 2016 10:18:54 +0000 >> >Mark Kavanagh <mark.b.kavan...@intel.com> wrote: >> > >> >> Add support for Jumbo Frames to DPDK-enabled port types, >> >> using single-segment-mbufs. >> >> >> >> Using this approach, the amount of memory allocated for each mbuf >> >> to store frame data is increased to a value greater than 1518B >> >> (typical Ethernet maximum frame length). The increased space >> >> available in the mbuf means that an entire Jumbo Frame can be >> >> carried in a single mbuf, as opposed to partitioning it across >> >> multiple mbuf segments. >> >> >> >> The amount of space allocated to each mbuf to hold frame data is >> >> defined dynamically by the user when adding a DPDK port to a >> >> bridge. If an MTU value is not supplied, or the user-supplied >> >> value is invalid, the MTU for the port defaults to standard >> >> Ethernet MTU (i.e. 1500B). >> >> >> >> Signed-off-by: Mark Kavanagh <mark.b.kavan...@intel.com> >> >> --- >> >> INSTALL.DPDK.md | 59 +++++++++- >> >> NEWS | 2 + >> >> lib/netdev-dpdk.c | 347 >> >> +++++++++++++++++++++++++++++++++++++++++------------- 3 files >> >> changed, 328 insertions(+), 80 deletions(-) >[...] > >> >> +When Jumbo Frames are enabled, the size of a DPDK port's mbuf >> >> segments are +increased, such that a full Jumbo Frame may be >> >> accommodated inside a single +mbuf segment. Once set, the MTU for a >> >> DPDK port is immutable. + >> > >> >I think we need some protection here because if someone tries to >> >change that, it will segfault PMD threads. >> > >> >> Could you elaborate on this a bit more; do you mean that PMD threads >> would segfault if a user attempts to change the MTU of a running DPDK >> port? If so, how would that be possible (AFAIA, there's no way to >> programmatically modify the MTU of OVS ports, outside of standard >> Linux utilities such as ifconfig, which DPDK ports typically aren't >> subject to; there's also AFAIA no way to programmatically modify MTU >> of DPDK ports outside of modifying the source code). > >I have a ovs bridge with two dpdk ports created with these commands: > ># ovs-vsctl add-port ovsbr0 dpdk0 \ > -- set interface dpdk0 type=dpdk options:dpdk-mtu=9000 > ofport_request=10 ># ovs-vsctl add-port ovsbr0 dpdk1 \ > -- set interface dpdk1 type=dpdk options:dpdk-mtu=9000 > ofport_request=11 > >Now I am pushing traffic (jumbo frames or small frames) and then >I change dpdk-mtu to 1500. > ># ovs-vsctl set interface dpdk1 options:dpdk-mtu=1500 > >Then I see this: >2016-02-12T13:19:20.142Z|00003|daemon_unix(monitor)|ERR|1 crashes: >pid 78009 died, killed (Segmentation fault), core dumped, restarting >... > >This is the backtrace: >#0 0x00007f1909cf4423 in _recv_raw_pkts_vec () from /lib64/libdpdk.so >#1 0x00000000004fd595 in rte_eth_rx_burst (nb_pkts=32, >rx_pkts=0x7f18c37fd970, queue_id=2, > port_id=1 '\001') at > /root/dpdk/x86_64-native-linuxapp-gcc/include/rte_ethdev.h:2510 >#2 netdev_dpdk_rxq_recv (rxq_=<optimized out>, packets=0x7f18c37fd970, >c=0x7f18c37fd96c) > at ../lib/netdev-dpdk.c:1216 >#3 0x000000000047c3c1 in netdev_rxq_recv (rx=<optimized out>, >buffers=buffers@entry=0x7f18c37fd970, > cnt=cnt@entry=0x7f18c37fd96c) at ../lib/netdev.c:654 >#4 0x000000000045e566 in dp_netdev_process_rxq_port (pmd=pmd@entry=0x1e1cd90, >rxq=<optimized >out>, > port=<optimized out>, port=<optimized out>) at ../lib/dpif-netdev.c:2555 >#5 0x000000000045e9f9 in pmd_thread_main (f_=0x1e1cd90) at >../lib/dpif-netdev.c:2691 >#6 0x00000000004bab64 in ovsthread_wrapper (aux_=<optimized out>) at >../lib/ovs-thread.c:340 >#7 0x00007f1909583555 in start_thread (arg=0x7f18c37fe700) at >pthread_create.c:333 >#8 0x00007f1908daeb9d in clone () at >../sysdeps/unix/sysv/linux/x86_64/clone.S:109 > > >Dump of assembler code for function _recv_raw_pkts_vec: > 0x00007fa8d51ccf30 <+0>: push %r15 > 0x00007fa8d51ccf32 <+2>: mov %edx,%r15d > 0x00007fa8d51ccf35 <+5>: push %r14 > 0x00007fa8d51ccf37 <+7>: push %r13 > 0x00007fa8d51ccf39 <+9>: push %r12 > 0x00007fa8d51ccf3b <+11>: push %rbp > 0x00007fa8d51ccf3c <+12>: push %rbx > 0x00007fa8d51ccf3d <+13>: sub $0x38,%rsp >=> 0x00007fa8d51ccf41 <+17>: movzbl 0x69(%rdi),%eax > >rdi 0x0 0 > >Looks like dev->data->rx_queues[queue_id] is NULL. > >-- >fbl
Hi Flavio, I saw this myself yesterday, when testing out that same scenario which was pointed out to me by Daniele. I'm currently investigating how to fix the issue, and will hopefully have a solution in the next patchset. Cheers, Mark _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev