[dpdk-dev] Fwd: SR-IOV dpdk testpmd bonding does not work

Ferruh Yigit ferruh.yigit at intel.com
Fri Mar 2 19:02:15 CET 2018


On 2/28/2018 6:30 AM, Hekai Wang wrote:
> ---------- Forwarded message ----------
> From: Hekai Wang <hewang at redhat.com>
> Date: 2018-02-28 14:28 GMT+08:00
> Subject: SR-IOV dpdk testpmd bonding does not work
> To: test-report at dpdk.org
> 
> 
> Hi
> 
> I have a problem with dpdk testpmd bonding,I think may be a bug
> 
> Test env
> 
> under test machine and traffic sender machine connect directly
> 
> each machine have two ports
> 
> [xxx]# dpdk-devbind -s
> 
> Network devices using DPDK-compatible driver
> ============================================
> 0000:05:10.0 '82599 Ethernet Controller Virtual Function' drv=vfio-pci
> unused=ixgbevf
> 0000:05:10.1 '82599 Ethernet Controller Virtual Function' drv=vfio-pci
> unused=ixgbevf
> 
> Network devices using kernel driver
> ===================================
> 0000:01:00.0 'NetXtreme BCM5720 Gigabit Ethernet PCIe' if=em1 drv=tg3
> unused=vfio-pci *Active*
> 0000:01:00.1 'NetXtreme BCM5720 Gigabit Ethernet PCIe' if=em2 drv=tg3
> unused=vfio-pci
> 0000:02:00.0 'NetXtreme BCM5720 Gigabit Ethernet PCIe' if=em3 drv=tg3
> unused=vfio-pci
> 0000:02:00.1 'NetXtreme BCM5720 Gigabit Ethernet PCIe' if=em4 drv=tg3
> unused=vfio-pci
> 0000:05:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection' if=p7p1
> drv=ixgbe unused=vfio-pci
> 0000:05:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection' if=p7p2
> drv=ixgbe unused=vfio-pci
> 
> Other network devices
> =====================
> <none>
> 
> Crypto devices using DPDK-compatible driver
> ===========================================
> <none>
> 
> Crypto devices using kernel driver
> ==================================
> <none>
> 
> Other crypto devices
> ====================
> <none>
> [root at dell-per730-18 ~]# ethtool -i p7p1
> driver: ixgbe
> version: 4.4.0-k-rh7.4
> firmware-version: 0x61ae0001
> expansion-rom-version:
> bus-info: 0000:05:00.0
> supports-statistics: yes
> supports-test: yes
> supports-eeprom-access: yes
> supports-register-dump: yes
> supports-priv-flags: no
> [root at dell-per730-18 ~]# ethtool -i p7p2
> driver: ixgbe
> version: 4.4.0-k-rh7.4
> firmware-version: 0x61ae0001
> expansion-rom-version:
> bus-info: 0000:05:00.1
> supports-statistics: yes
> supports-test: yes
> supports-eeprom-access: yes
> supports-register-dump: yes
> supports-priv-flags: no
> 
> **************************
> ip li info
> 6: p7p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode
> DEFAULT qlen 1000
>     link/ether 90:e2:ba:29:bf:14 brd ff:ff:ff:ff:ff:ff
>     vf 0 MAC 2e:c7:ba:0c:73:f8, spoof checking off, link-state auto, trust
> on, query_rss off
> 7: p7p2: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state
> UP mode DEFAULT qlen 1000
>     link/ether 90:e2:ba:29:bf:15 brd ff:ff:ff:ff:ff:ff
>     vf 0 MAC c6:24:28:7a:c8:ec, spoof checking off, link-state auto, trust
> on, query_rss off
> 
> So , current p7p1 and p7p2 with one vf with each port.
> 
> 1. bond each vf to vfio-pci driver
> [xxx]# dpdk-devbind -s
> 
> Network devices using DPDK-compatible driver
> ============================================
> 0000:05:10.0 '82599 Ethernet Controller Virtual Function' drv=vfio-pci
> unused=ixgbevf
> 0000:05:10.1 '82599 Ethernet Controller Virtual Function' drv=vfio-pci
> unused=ixgbevf
> 2. create a VM
> 
> #need qemu-img create a image first
> 
> bin/bash -c "sudo -E taskset -c 4,6,30 /usr/libexec/qemu-kvm -m 4096 -smp 3
> -cpu host,migratable=off -drive if=ide,file=rhel1Q.qcow2 -boot c
> --enable-kvm -monitor unix:/tmp/vm0monitor,server,nowait -object
> memory-backend-file,id=mem,size=4096M,mem-path=/dev/hugepages,share=on
> -numa node,memdev=mem -mem-prealloc -nographic -vnc :0 -name Client0
> -snapshot -net none -no-reboot -device vfio-pci,host=0000:05:10.0 -device
> vfio-pci,host=0000:05:10.1"
> 
> Guest(VM) Command
> 
> iptables -t filter -P INPUT ACCEPT
> iptables -t filter -P FORWARD ACCEPT
> iptables -t filter -P OUTPUT ACCEPT
> iptables -t mangle -P PREROUTING ACCEPT
> iptables -t mangle -P INPUT ACCEPT
> iptables -t mangle -P FORWARD ACCEPT
> iptables -t mangle -P OUTPUT ACCEPT
> iptables -t mangle -P POSTROUTING ACCEPT
> iptables -t nat -P PREROUTING ACCEPT
> iptables -t nat -P INPUT ACCEPT
> iptables -t nat -P OUTPUT ACCEPT
> iptables -t nat -P POSTROUTING ACCEPT
> iptables -t filter -F
> iptables -t filter -X
> iptables -t mangle -F
> iptables -t mangle -X
> iptables -t nat -F
> iptables -t nat -X
> ip6tables -t filter -P INPUT ACCEPT
> ip6tables -t filter -P FORWARD ACCEPT
> ip6tables -t filter -P OUTPUT ACCEPT
> ip6tables -t mangle -P PREROUTING ACCEPT
> ip6tables -t mangle -P INPUT ACCEPT
> ip6tables -t mangle -P FORWARD ACCEPT
> ip6tables -t mangle -P OUTPUT ACCEPT
> ip6tables -t mangle -P POSTROUTING ACCEPT
> ip6tables -t nat -P PREROUTING ACCEPT
> ip6tables -t nat -P INPUT ACCEPT
> ip6tables -t nat -P OUTPUT ACCEPT
> ip6tables -t nat -P POSTROUTING ACCEPT
> ip6tables -t filter -F
> ip6tables -t filter -X
> ip6tables -t mangle -F
> ip6tables -t mangle -X
> ip6tables -t nat -F
> ip6tables -t nat -X
> sysctl vm.nr_hugepages=1
> mkdir -p /dev/hugepages
> mount -t hugetlbfs hugetlbfs /dev/hugepages
> cat /proc/meminfo
> 
> # at this time , download dpdk and compile and install it , I use dpdk17.11
> 
> ip link show
> ip ad show
> cat /proc/cmdline
> dpdk-devbind --status
> ifdown eth0
> ifdown eth1
> dpdk-bind --status
> dpdk-devbind -u 00:03.0 00:04.0
> modprobe -r vfio
> modprobe -r vfio_iommu_type1
> modprobe vfio enable_unsafe_noiommu_mode=Y
> modprobe vfio-pci
> dpdk-devbind -b vfio-pci 00:03.0 00:04.0
> dpdk-devbind --status
> testpmd -l 0,1,2 -n 4 --socket-mem 512 -- --burst=64 -i --txqflags=0xf00
> --disable-hw-vlan --nb-cores=2, --txq=1 --rxq=1 --rxd=512 --txd=512
> --port-topology=chained
> set fwd macswap
> create bonded device 1 0
> set bonding mode 1 2
> set bonding mon_period 2 100
> add bonding slave 0 2
> add bonding slave 1 2
> set bonding primary 0 2
> port start 2
> set fwd macswap
> start
> show port info all
> testpmd> show port info all
> 
> ********************* Infos for port 0  *********************
> MAC address: 2E:C7:BA:0C:73:F8
> Driver name: net_ixgbe_vf
> Connect to socket: 0
> memory allocation on the socket: 0
> Link status: up
> Link speed: 10000 Mbps
> Link duplex: full-duplex
> MTU: 1500
> Promiscuous mode: disabled
> Allmulticast mode: disabled
> Maximum number of MAC addresses: 128
> Maximum number of MAC addresses of hash filtering: 4096
> VLAN offload:
>   strip off
>   filter off
>   qinq(extend) off
> No flow type is supported.
> Max possible RX queues: 4
> Max possible number of RXDs per queue: 4096
> Min possible number of RXDs per queue: 32
> RXDs number alignment: 8
> Max possible TX queues: 4
> Max possible number of TXDs per queue: 4096
> Min possible number of TXDs per queue: 32
> TXDs number alignment: 8
> 
> ********************* Infos for port 1  *********************
> MAC address: C6:24:28:7A:C8:EC
> Driver name: net_ixgbe_vf
> Connect to socket: 0
> memory allocation on the socket: 0
> Link status: up
> Link speed: 10000 Mbps
> Link duplex: full-duplex
> MTU: 1500
> Promiscuous mode: disabled
> Allmulticast mode: disabled
> Maximum number of MAC addresses: 128
> Maximum number of MAC addresses of hash filtering: 4096
> VLAN offload:
>   strip off
>   filter off
>   qinq(extend) off
> No flow type is supported.
> Max possible RX queues: 4
> Max possible number of RXDs per queue: 4096
> Min possible number of RXDs per queue: 32
> RXDs number alignment: 8
> Max possible TX queues: 4
> Max possible number of TXDs per queue: 4096
> Min possible number of TXDs per queue: 32
> TXDs number alignment: 8
> 
> ********************* Infos for port 2  *********************
> MAC address: 2E:C7:BA:0C:73:F8
> Driver name: net_bonding
> Connect to socket: 0
> memory allocation on the socket: 0
> Link status: up
> Link speed: 10000 Mbps
> Link duplex: full-duplex
> MTU: 1500
> Promiscuous mode: enabled
> Allmulticast mode: disabled
> Maximum number of MAC addresses: 1
> Maximum number of MAC addresses of hash filtering: 0
> VLAN offload:
>   strip off
>   filter off
>   qinq(extend) off
> No flow type is supported.
> Max possible RX queues: 4
> Max possible number of RXDs per queue: 65535
> Min possible number of RXDs per queue: 0
> RXDs number alignment: 1
> Max possible TX queues: 4
> Max possible number of TXDs per queue: 65535
> Min possible number of TXDs per queue: 0
> TXDs number alignment: 1
> 
> 
> ***************************************************************
> another side send traffic
> 
> 18: p7p1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq portid
> 6805ca37da40 state UP mode DEFAULT qlen 1000
>     link/ether 68:05:ca:37:da:40 brd ff:ff:ff:ff:ff:ff
> 19: p7p2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq portid
> 6805ca37da41 state UP mode DEFAULT qlen 1000
>     link/ether 68:05:ca:37:da:41 brd ff:ff:ff:ff:ff:ff
> 
> [root at dell-per730-21 ~]# scapy
> INFO: Can't import python gnuplot wrapper . Won't be able to plot.
> INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
> INFO: Can't import python Crypto lib. Won't be able to decrypt WEP.
> INFO: Can't import python Crypto lib. Disabled certificate manipulation
> tools
> Welcome to Scapy (2.2.0)
>>>> kaizi = Ether()
>>>> kaizi.dst="2E:C7:BA:0C:73:F8"
>>>> kaizi.src="68:05:ca:37:da:40"
>>>> kaizi.show()
> ###[ Ethernet ]###
>   dst= 2E:C7:BA:0C:73:F8
>   src= 68:05:ca:37:da:40
>   type= 0x0
>>>> sendp(kaizi,loop=100,inter=1,iface="p7p1")
> ..................................^C
> Sent 34 packets.
> 
> at this point use tcpdump catch the packets find that only have send
> packest and no response package ......
> [root at dell-per730-21 ~]# tcpdump -nei p7p1
> tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
> listening on p7p1, link-type EN10MB (Ethernet), capture size 262144 bytes
> 01:19:31.535176 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:32.536383 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:33.537510 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:34.538711 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:35.539893 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:36.541095 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:37.542220 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:38.543569 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:39.544805 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:40.546020 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:41.547158 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:42.548367 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:43.549577 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:44.550787 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:45.551921 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:46.553129 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:47.554335 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:48.555541 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:49.556674 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:50.557878 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:51.559082 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:52.560312 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:53.561446 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 01:19:54.562657 68:05:ca:37:da:40 > 2e:c7:ba:0c:73:f8, 802.3, length 0:
> [|llc]
> 
> at the same time ,use tcpdump capture the packets with another port p7p2
> ,find that the response packets at this port , so strange ...
> because the under test machine vm's testpmd bond mode is active backup mode
> .I do not think this port should receive packets .but it is true.
> [root at dell-per730-21 ~]# tcpdump -nei p7p2
> tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
> listening on p7p2, link-type EN10MB (Ethernet), capture size 262144 bytes
> 01:19:50.557897 2e:c7:ba:0c:73:f8 > 68:05:ca:37:da:40, 802.3, length 0:
> LLC, dsap Null (0x00) Individual, ssap Null (0x00) Command, ctrl 0x0000:
> Information, send seq 0, rcv seq 0, Flags [Command], length 46
>     0x0000:  0000 0000 0000 0000 0000 0000 0000 0000  ................
>     0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
>     0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
> 01:19:51.559097 2e:c7:ba:0c:73:f8 > 68:05:ca:37:da:40, 802.3, length 0:
> LLC, dsap Null (0x00) Individual, ssap Null (0x00) Command, ctrl 0x0000:
> Information, send seq 0, rcv seq 0, Flags [Command], length 46
>     0x0000:  0000 0000 0000 0000 0000 0000 0000 0000  ................
>     0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
>     0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
> 01:19:52.560329 2e:c7:ba:0c:73:f8 > 68:05:ca:37:da:40, 802.3, length 0:
> LLC, dsap Null (0x00) Individual, ssap Null (0x00) Command, ctrl 0x0000:
> Information, send seq 0, rcv seq 0, Flags [Command], length 46
>     0x0000:  0000 0000 0000 0000 0000 0000 0000 0000  ................
>     0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................
>     0x0020:  0000 0000 0000 0000 0000 0000 0000       ..............
> 
> at the same time , we watch the under test machine use testpmd command
> ************************************************************
> ************************************************************
> ****************************************************************
> ************************************************************
> ************************************************************
> ****************************************************************
> testpmd> show port stats all
> 
>   ######################## NIC statistics for port 0
> ########################
>   RX-packets: 34         RX-missed: 0          RX-bytes:  2040
>   RX-errors: 0
>   RX-nombuf:  0
>   TX-packets: 0          TX-errors: 0          TX-bytes:  0
> 
>   Throughput (since last show)
>   Rx-pps:            0
>   Tx-pps:            0
>   ############################################################
> ################
> 
>   ######################## NIC statistics for port 1
> ########################
>   RX-packets: 0          RX-missed: 0          RX-bytes:  0
>   RX-errors: 0
>   RX-nombuf:  0
>   TX-packets: 34         TX-errors: 0          TX-bytes:  2040
> 
>   Throughput (since last show)
>   Rx-pps:            0
>   Tx-pps:            0
>   ############################################################
> ################
> 
>   ######################## NIC statistics for port 2
> ########################
>   RX-packets: 34         RX-missed: 0          RX-bytes:  2040
>   RX-errors: 0
>   RX-nombuf:  0
>   TX-packets: 34         TX-errors: 0          TX-bytes:  2040
> 
>   Throughput (since last show)
>   Rx-pps:            0
>   Tx-pps:            0
>   ############################################################
> ################
> 
> follow the stat result , I find that port 0 only receive packets and port 1
> only send packets. but current the bond mode is below (active-backup mode )
> 
> testpmd> show bonding config 2
>     Bonding mode: 1
>     Slaves (2): [0 1]
>     Active Slaves (2): [0 1]
>     Primary: [0]
> 
> I do not know why the result is this .could some one can help me . Thanks.

Can you please do following in testpmd:
testpmd> show config fwd

Perhaps forwarding config still can be set to forward between port 0 and 1?

> 
> 
> 
> 
> 
> 2E:C7:BA:0C:73:F8
> 



More information about the dev mailing list