I encountered the following issue: ovs-vswitchd with crashes when adding a
dpdk port.

 

Building ovs with dpdk support is not straightforward because:

  - ovs doest not build with the latest dpdk version 1.7.1

  - the document here
http://git.openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=I
NSTALL.DPDK;hb=HEAD refers to dpdk 1.6.0r2 but that doesn't work either.

 

So I checked out dpdk 1.7.0 did some minor changes (combine libs and kcompat
fix for kernel 3.13.0)

Now ovs builds ok but: 

  - if the database is empty then ovs-vswitchd starts but crashes on
ovs-vsctl add-port ... type=dpdk

  - if the database already contains dpdk port configuration then
ovs-vswitchd crashes at startup

 

Logs seem to indicate a numa socket = -1 problem.

 

Any ideea how to fix his?

Is there any known good combination of dpdk and ovs-with-dpdk versions?

 

Thanks,

Daniel

 

---------

 

OVS

 

    /opt/ovs# git log -1 | head -n 6               

    # commit 6db454dc00fa5d9693ebdf6c5e10c61030f8df8e

    # Author: Simon Horman <simon.hor...@netronome.com>

    # Date:   Wed Sep 24 12:41:02 2014 +0000

    # 

    #     ofproto-dpif-rid: correct logic error in rid_pool_alloc_id()

    # 

 

    /opt/ovs# git status --short

    # ?? filelist

    # ?? tests/ovsclient

    

DPDK

 

    /opt/dpdk# git log -1 

    # commit 9db7084fcdf6d57b892312ca641a97356629c04a

    # Author: Thomas Monjalon <thomas.monja...@6wind.com>

    # Date:   Fri Jul 4 10:18:07 2014 +0200

    #     version: 1.7.0

    #     The makefile rule "showversion" needs a fix to handle empty
RTE_VER_SUFFIX.

    #     Signed-off-by: Thomas Monjalon <thomas.monja...@6wind.com>

 

    /opt/dpdk# git diff

    # diff --git a/config/common_linuxapp b/config/common_linuxapp

    # index 7bf5d80..a4cb508 100644

    # --- a/config/common_linuxapp

    # +++ b/config/common_linuxapp

    # @@ -81,7 +81,7 @@ CONFIG_RTE_BUILD_SHARED_LIB=n

    #  #

    #  # Combine to one single library

    #  #

    # -CONFIG_RTE_BUILD_COMBINE_LIBS=n

    # +CONFIG_RTE_BUILD_COMBINE_LIBS=y

    #  CONFIG_RTE_LIBNAME="intel_dpdk"

    # 

    #  #

    # diff --git a/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h
b/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h

    # index 521a35d..d6a81ba 100644

    # --- a/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h

    # +++ b/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h

    # @@ -3845,7 +3845,7 @@ static inline struct sk_buff
*__kc__vlan_hwaccel_put_tag(struct sk_buff *skb,

    #  #define HAVE_ENCAP_TSO_OFFLOAD

    #  #endif /* >= 3.10.0 */

    # 

    # -#if ( LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0) )

    # +#if ( LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0) )

    #  #if (!(RHEL_RELEASE_CODE && RHEL_RELEASE_CODE >=
RHEL_RELEASE_VERSION(7,0)))

    #  #ifdef NETIF_F_RXHASH

    #  #define PKT_HASH_TYPE_L3 0

 

Environment

 

    export RTE_SDK=/opt/dpdk

    export RTE_TARGET=x86_64-native-linuxapp-gcc

    export DPDK_BUILD=$RTE_SDK/x86_64-native-linuxapp-gcc

 

Build

 

    DPDK

 

                make T=$RTE_TARGET config

                make T=$RTE_TARGET -j 8

                make T=$RTE_TARGET install

 

    OVS

    

                ./boot.sh 

                ./configure --with-dpdk=$DPDK_BUILD LIBS=-ldl

                make

                make install

                

Run

 

    Hardware

    

                lshw -sanitize -short | grep -e Xeon -e 'B DIMM' -e 82599

                # /0/400                           processor      Intel(R)
Xeon(R) CPU E5-2670 v2 @ 2.50GHz

                # /0/401                           processor      Intel(R)
Xeon(R) CPU E5-2670 v2 @ 2.50GHz

                # /0/1000/0                        memory         8GiB DIMM
DDR3 Synchronous 1866 MHz (0.5 ns)

                # /0/1000/1                        memory         8GiB DIMM
DDR3 Synchronous 1866 MHz (0.5 ns)

                # /0/1000/2                        memory         8GiB DIMM
DDR3 Synchronous 1866 MHz (0.5 ns)

                # /0/1000/3                        memory         8GiB DIMM
DDR3 Synchronous 1866 MHz (0.5 ns)

                # /0/1000/c                        memory         8GiB DIMM
DDR3 Synchronous 1866 MHz (0.5 ns)

                # /0/1000/d                        memory         8GiB DIMM
DDR3 Synchronous 1866 MHz (0.5 ns)

                # /0/1000/e                        memory         8GiB DIMM
DDR3 Synchronous 1866 MHz (0.5 ns)

                # /0/1000/f                        memory         8GiB DIMM
DDR3 Synchronous 1866 MHz (0.5 ns)

                # /0/3.2/0                         network        82599EB
10-Gigabit SFI/SFP+ Network Connection

                # /0/3.2/0.1                       network        82599EB
10-Gigabit SFI/SFP+ Network Connection

 

 

                lspci | grep -i 82599

                # 47:00.0 Ethernet controller: Intel Corporation 82599EB
10-Gigabit SFI/SFP+ Network Connection (rev 01)

                # 47:00.1 Ethernet controller: Intel Corporation 82599EB
10-Gigabit SFI/SFP+ Network Connection (rev 01)

 

    Kernel

 

                uname -a

                # Linux hwcompute1 3.13.0-35-generic #62~precise1-Ubuntu SMP
Mon Aug 18 14:52:04 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

 

                sed 's/^/# /;s/ / \\\n#    /2g' /proc/cmdline

                # BOOT_IMAGE=vmlinuz.0A0A011E \

                #    root=/dev/nfs \

                #    rw \

                #    initrd=initrd.0A0A011E \

                #    nfsroot=10.10.1.20:/ons/output/hwcompute1 \

                #    ip=10.10.1.30::10.10.1.1:255.255.255.0:dell30:eth0:off
\

                #    console=ttyS0,115200 \

                #    console=tty0 \

                #    rootwait \

                #    panic=1 \

                #    intremap=no_x2apic_optout \

                #    intel_iommu=on \

                #    iommu=pt \

                #    selinux=0 \

                #    enforcing=0 \

                #    rcu_nocb_poll \

                #    irqaffinity=0 \

                #    idle=poll \

                #    tsc=perfect \

                #    default_hugepagesz=1G \

                #    hugepagesz=1G \

                #    hugepages=8 \

                #    debug

 

    DPDK

 

                sudo modprobe uio

                sudo insmod build/kmod/igb_uio.ko

                sudo ./tools/dpdk_nic_bind.py --bind igb_uio 0000:47:00.0
igb_uio 0000:47:00.1

                grep HugePages /proc/meminfo

                # AnonHugePages:    161792 kB

                # HugePages_Total:       8

                # HugePages_Free:        8

                # HugePages_Rsvd:        0

                # HugePages_Surp:        0

 

                

    OVS

 

                mkdir -p /usr/local/etc/openvswitch

                mkdir -p /usr/local/var/run/openvswitch

                sudo rm /usr/local/etc/openvswitch/conf.db

                sudo ovsdb-tool create \

                    /usr/local/etc/openvswitch/conf.db \

                    ./vswitchd/vswitch.ovsschema

                sudo ovsdb-server \

                    --remote=punix:/usr/local/var/run/openvswitch/db.sock \

                    --remote=db:Open_vSwitch,Open_vSwitch,manager_options \

                    --private-key=db:Open_vSwitch,SSL,private_key \

                    --certificate=db:Open_vSwitch,SSL,certificate \

                    --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \

                    --pidfile --detach

                sudo ovs-vsctl --no-wait init

                sudo modprobe openvswitch

                sudo ovs-vswitchd \

                    --dpdk -c 0x3 -n 4 \

                    -- \

                    unix:/usr/local/var/run/openvswitch/db.sock \

                    --pidfile \

            -v

                # another console

                sudo ovs-vsctl add-br br0

                sudo ovs-vsctl set bridge br0 datapath_type=netdev

                sudo ovs-vsctl add-port br0 dpdk0 -- set Interface dpdk0
type=dpdk

 

Results

 

    ovs-vswitchd console

 

                # 2014-09-25T09:33:30Z|00067|dpdk|INFO|Port 0:
00:1b:21:a3:e9:f8

                # 2014-09-25T09:33:30Z|00068|dpdk|INFO|Port 0:
00:1b:21:a3:e9:f8

                # 2014-09-25T09:33:30Z|00069|netdev|DBG|failed to set tx/rx
queue for network device dpdk0:Success

 

    System log

   

        grep -i numa /var/log/syslog

                # Sep 25 16:03:29 localhost ovs-vswitchd[17688]: EAL: PCI
device 0000:47:00.0 on NUMA socket -1

                # Sep 25 16:03:29 localhost ovs-vswitchd[17688]: EAL: PCI
device 0000:47:00.1 on NUMA socket -1

                # Sep 25 16:03:29 localhost ovs-vswitchd:
ovs|00003|ovs_numa|INFO|Discovered 20 CPU cores on NUMA node 0

                # Sep 25 16:03:29 localhost ovs-vswitchd:
ovs|00004|ovs_numa|INFO|Discovered 1 NUMA nodes and 20 CPU cores

 

    gdb stack trace

 

                Program received signal SIGSEGV, Segmentation fault.

                ovs_numa_get_n_unpinned_cores_on_numa (numa_id=<optimized
out>) at lib/ovs-numa.c:240

                240             LIST_FOR_EACH(core, list_node, &numa->cores)
{

                (gdb) bt

                #0  ovs_numa_get_n_unpinned_cores_on_numa
(numa_id=<optimized out>) at lib/ovs-numa.c:240

                #1  0x000000000052a58d in dp_netdev_set_pmds_on_numa
(numa_id=-1, dp=0x8f3a50) at lib/dpif-netdev.c:2331

                #2  dp_netdev_set_pmds_on_numa (dp=0x8f3a50, numa_id=-1) at
lib/dpif-netdev.c:2313

                #3  0x000000000052ab98 in do_add_port (dp=0x8f3a50,
devname=<optimized out>, type=<optimized out>, port_no=2)

                    at lib/dpif-netdev.c:827

                #4  0x000000000052ad3a in dpif_netdev_port_add
(dpif=<optimized out>, netdev=0x7fff80cb9780, port_nop=0x7fffffffdddc)

                    at lib/dpif-netdev.c:859

                #5  0x000000000052dfca in dpif_port_add (dpif=0x8f6510,
netdev=0x7fff80cb9780, port_nop=0x7fffffffde1c) at lib/dpif.c:522

                #6  0x00000000004fca28 in port_add (ofproto_=0x8f3510,
netdev=0x7fff80cb9780) at ofproto/ofproto-dpif.c:3216

                #7  0x00000000004f12db in ofproto_port_add
(ofproto=0x8f3510, netdev=0x7fff80cb9780, ofp_portp=0x7fffffffdf4c)

                    at ofproto/ofproto.c:1796

                #8  0x00000000004e2869 in iface_do_create
(errp=0x7fffffffdf30, netdevp=<synthetic pointer>, ofp_portp=0x7fffffffdf4c,


                    iface_cfg=0x8fc790, br=0x8f2ff0, port_cfg=<optimized
out>) at vswitchd/bridge.c:1715

                #9  iface_create (port_cfg=0x8fd2d0, iface_cfg=0x8fc790,
br=0x8f2ff0) at vswitchd/bridge.c:1755

                #10 bridge_add_ports__ (br=0x8f2ff0, wanted_ports=0x8f30b0,
with_requested_port=false) at vswitchd/bridge.c:843

                #11 0x00000000004e4efd in bridge_add_ports
(wanted_ports=0x8f30b0, br=0x8f2ff0) at vswitchd/bridge.c:859

                #12 bridge_reconfigure (ovs_cfg=0x8fdd40) at
vswitchd/bridge.c:599

                #13 0x00000000004e79f9 in bridge_run () at
vswitchd/bridge.c:2824

                #14 0x0000000000408775 in main (argc=4, argv=0x7fffffffe618)
at vswitchd/ovs-vswitchd.c:116

_______________________________________________
discuss mailing list
discuss@openvswitch.org
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to