Bug 2121444
| Summary: | [dpdkbond]balance-slb performance degradation without lacp negotiated | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux Fast Datapath | Reporter: | mhou <mhou> | ||||
| Component: | openvswitch | Assignee: | Timothy Redaelli <tredaelli> | ||||
| openvswitch sub component: | ovs-dpdk | QA Contact: | mhou <mhou> | ||||
| Status: | NEW --- | Docs Contact: | |||||
| Severity: | high | ||||||
| Priority: | unspecified | CC: | amorenoz, ctrautma, jhsiao, ktraynor, kzhang, mhou | ||||
| Version: | FDP 22.G | ||||||
| Target Milestone: | --- | ||||||
| Target Release: | --- | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Linux | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | Doc Type: | If docs needed, set a value | |||||
| Doc Text: | Story Points: | --- | |||||
| Clone Of: | Environment: | ||||||
| Last Closed: | Type: | Bug | |||||
| Regression: | --- | Mount Type: | --- | ||||
| Documentation: | --- | CRM: | |||||
| Verified Versions: | Category: | --- | |||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||
| Embargoed: | |||||||
| Attachments: |
|
||||||
Created attachment 1907560 [details] ovs-vswitchd.log Description of problem: If the lacp negotiation is not enabled on the dpdkbond port, the performance is degraded compared with that when the lacp negotiation is enabled. test topo as below: # RFC2544 Test topology: ##################################################################### # # DUT # +----------------------------------------------+ # | ovsbr0 guest | # T-Rex | +---------------+ +------------------+ | # | | | | | | #switch port-+ | | | | | # | dpdk0| | | | | | #channel_port|-- +<------------->+ ---+<-------->testpmd | | # | | |bondport vhost| |vfio-pci | | #switch port + | | | | | # dpdk1| | | | | | # | +---------------+ +------------------+ | # | | # +----------------------------------------------+ # ##################################################################### Version-Release number of selected component (if applicable): kernel version: 4.18.0-372.19.1.rt7.176.el8_6.x86_64 openvswitch version: openvswitch2.15-2.15.0-113.el8fdp test nic info: # ethtool -i ens1f0 driver: mlx5_core version: 4.18.0-372.19.1.rt7.176.el8_6.x firmware-version: 16.34.1002 (MT_0000000080) expansion-rom-version: bus-info: 0000:12:00.0 supports-statistics: yes supports-test: yes supports-eeprom-access: no supports-register-dump: no supports-priv-flags: yes How reproducible: 100% Steps to Reproduce: 1. create 4q8pmd dpdkbond port as below: ip link set ens1f0 mtu 9120 ip link set ens1f1 mtu 9120 ip link set ens1f0 up ip link set ens1f1 up modprobe openvswitch systemctl stop openvswitch systemctl start openvswitch ovs-appctl vlog/set console:lacp:dbg syslog:lacp:dbg file:lacp:dbg ovs-appctl vlog/set console:bond:dbg syslog:bond:dbg file:bond:dbg ovs-appctl vlog/set console:ovs_rcu:dbg syslog:ovs_rcu:dbg file:ovs_rcu:dbg ovs-appctl vlog/set console:netdev_dpdk:dbg syslog:netdev_dpdk:dbg file:netdev_dpdk:dbg ovs-appctl vlog/set console:dpif_netdev:dbg syslog:dpif_netdev:dbg file:dpif_netdev:dbg ovs-appctl vlog/set console:dpdk:dbg syslog:dpdk:dbg file:dpdk:dbg ovs-appctl vlog/set console:memory:dbg syslog:memory:dbg file:memory:dbg ovs-vsctl --if-exists del-br ovsbr0 ovs-vsctl --no-wait set Open_vSwitch . other_config={} ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="8192,8192" ovs-vsctl --no-wait set Open_vSwitch . other_config:vhost-iommu-support=true ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask="0xff000" ovs-vsctl list Open_vSwitch ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev ovs-vsctl add-br ovsbrup -- set bridge ovsbrup datapath_type=netdev ovs-vsctl add-bond ovsbr0 dpdkbond dpdk0 dpdk1 bond_mode=balance-slb -- set Interface dpdk0 type=dpdk options:dpdk-devargs=class=eth,mac=04:3f:72:b0:35:32 options:n_rxq=4 mtu_request=9120 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=class=eth,mac=04:3f:72:b0:35:33 options:n_rxq=4 mtu_request=9120 ovs-vsctl set port dpdkbond other_config:bond-detect-mode=carrier ovs-vsctl set port dpdkbond other_config:lb-output-action=false ovs-vsctl set interface dpdk0 options:dpdk-lsc-interrupt=true ovs-vsctl set interface dpdk1 options:dpdk-lsc-interrupt=true ovs-vsctl set Port dpdkbond vlan_mode=trunk ovs-vsctl set Port dpdkbond bond_updelay=0 ovs-vsctl set Port dpdkbond bond_downdelay=0 ovs-vsctl add-port ovsbr0 vhost0 -- set interface vhost0 type=dpdkvhostuserclient options:vhost-server-path=/tmp/vhost0 options:n_rxq=8 mtu_request=9120 ovs-ofctl del-flows ovsbr0 ovs-ofctl add-flow ovsbr0 actions=NORMAL # ovs-vsctl list Port dpdkbond _uuid : 4c7a8338-ff9e-401a-83b2-70039d12bb9b bond_active_slave : "04:3f:72:b0:35:33" bond_downdelay : 0 bond_fake_iface : false bond_mode : balance-slb bond_updelay : 0 cvlans : [] external_ids : {} fake_bridge : false interfaces : [077c9051-60e5-440c-8cca-16a7a7d237a4, 6a47cd4d-a16c-4be0-bac6-25c75b19fe84] lacp : [] mac : [] name : dpdkbond other_config : {lb-output-action="false"} protected : false qos : [] rstp_statistics : {} rstp_status : {} statistics : {} status : {} tag : [] trunks : [] vlan_mode : trunk 2. start a guest, on the guest start testpmd with macswap mode. # virsh dumpxml guest30032 setlocale: No such file or directory <domain type='kvm' id='1'> <name>guest30032</name> <uuid>37425e76-af6a-44a6-aba0-73434afe34c0</uuid> <memory unit='KiB'>8388608</memory> <currentMemory unit='KiB'>8388608</currentMemory> <memoryBacking> <hugepages> <page size='1048576' unit='KiB'/> </hugepages> <access mode='shared'/> </memoryBacking> <vcpu placement='static'>9</vcpu> <cputune> <vcpupin vcpu='0' cpuset='1'/> <vcpupin vcpu='1' cpuset='2'/> <vcpupin vcpu='2' cpuset='3'/> <vcpupin vcpu='3' cpuset='4'/> <vcpupin vcpu='4' cpuset='5'/> <vcpupin vcpu='5' cpuset='6'/> <vcpupin vcpu='6' cpuset='7'/> <vcpupin vcpu='7' cpuset='8'/> <vcpupin vcpu='8' cpuset='9'/> <emulatorpin cpuset='0'/> <vcpusched vcpus='0' scheduler='fifo' priority='1'/> <vcpusched vcpus='1' scheduler='fifo' priority='1'/> <vcpusched vcpus='2' scheduler='fifo' priority='1'/> <vcpusched vcpus='3' scheduler='fifo' priority='1'/> <vcpusched vcpus='4' scheduler='fifo' priority='1'/> <vcpusched vcpus='5' scheduler='fifo' priority='1'/> <vcpusched vcpus='6' scheduler='fifo' priority='1'/> <vcpusched vcpus='7' scheduler='fifo' priority='1'/> <vcpusched vcpus='8' scheduler='fifo' priority='1'/> </cputune> <numatune> <memory mode='strict' nodeset='0'/> <memnode cellid='0' mode='strict' nodeset='0'/> </numatune> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='pc-q35-rhel8.6.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <pmu state='off'/> <vmport state='off'/> <ioapic driver='qemu'/> </features> <cpu mode='host-passthrough' check='none' migratable='on'> <feature policy='require' name='tsc-deadline'/> <numa> <cell id='0' cpus='0-8' memory='8388608' unit='KiB' memAccess='shared'/> </numa> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/libexec/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/home/guest30032.qcow2' index='1'/> <backingStore/> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </disk> <controller type='usb' index='0' model='none'> <alias name='usb'/> </controller> <controller type='pci' index='0' model='pcie-root'> <alias name='pcie.0'/> </controller> <controller type='pci' index='1' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='1' port='0x10'/> <alias name='pci.1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </controller> <controller type='pci' index='2' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='2' port='0x11'/> <alias name='pci.2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </controller> <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='3' port='0x8'/> <alias name='pci.3'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </controller> <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='4' port='0x9'/> <alias name='pci.4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> <controller type='pci' index='5' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='5' port='0xa'/> <alias name='pci.5'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </controller> <controller type='pci' index='6' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='6' port='0xb'/> <alias name='pci.6'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </controller> <controller type='sata' index='0'> <alias name='ide'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> </controller> <interface type='vhostuser'> <mac address='76:2c:79:1f:1e:79'/> <source type='unix' path='/tmp/vhost0' mode='server'/> <target dev='vhost0'/> <model type='virtio'/> <driver name='vhost' queues='8' rx_queue_size='1024' tx_queue_size='1024' iommu='on' ats='on'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </interface> <interface type='bridge'> <mac address='00:de:ad:01:01:01'/> <source bridge='virbr0'/> <target dev='vnet0'/> <model type='virtio'/> <alias name='net1'/> <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/5'/> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> <alias name='serial0'/> </serial> <console type='pty' tty='/dev/pts/5'> <source path='/dev/pts/5'/> <target type='serial' port='0'/> <alias name='serial0'/> </console> <input type='mouse' bus='ps2'> <alias name='input0'/> </input> <input type='keyboard' bus='ps2'> <alias name='input1'/> </input> <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'> <listen type='address' address='0.0.0.0'/> </graphics> <audio id='1' type='none'/> <video> <model type='cirrus' vram='16384' heads='1' primary='yes'/> <alias name='video0'/> <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </video> <memballoon model='virtio'> <alias name='balloon0'/> <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </memballoon> <panic model='isa'/> <iommu model='intel'> <driver intremap='on' caching_mode='on' iotlb='on'/> </iommu> </devices> <seclabel type='dynamic' model='selinux' relabel='yes'> <label>system_u:system_r:svirt_t:s0:c873,c978</label> <imagelabel>system_u:object_r:svirt_image_t:s0:c873,c978</imagelabel> </seclabel> <seclabel type='dynamic' model='dac' relabel='yes'> <label>+107:+1001</label> <imagelabel>+107:+1001</imagelabel> </seclabel> </domain> # dpdk-testpmd -l 0,1,2,3,4,5,6,7,8 --main-lcore 0 --socket-mem 4096 --legacy-mem -n 4 -a 0000:03:00.0 -- --forward-mode=macswap --port-topol0gy=chained --disable-rss -i --rxq=8 --txq=8 --rxd=8192 --txd=8192 --nb-cores=8 3. use two ports to send traffic and got result as below: # python trex_rfc2544.py --guest-flavor=single_guest_8Q_8PMD_9VCPUs --store-file=result.json --test-name=balance-slb_single --dst-mac=76:2c:79:1f:1e:79 --trex-host=10.73.89.32 --trex-dir=/mnt/tests/kernel/networking/rt-kernel/new-bonding/current/ --frame-rate=10 --frame-size=64 --multistream=1024 --learning-mode --tput-threshold=0.01 --maximum-verification-trials=10 --test-duration=20 --verification-duration=20 --use-flow-stats --learning-duration=30 --use-port=2 throughput_result is: OrderedDict([('total_opackets', 69448530), ('total_ipackets', 69448530), ('frame_loss_percentage', 0.0), ('total_tx_pps', 3464501.0), ('total_rx_pps', 3464517.625), ('total_tx_bps', 1773.824576), ('total_rx_bps', 1773.833344), ('min_latency_microsec', 44.5), ('max_latency_microsec', 1025.5), ('avg_latency_microsec', 106.5), ('jitter', 27.5)]) half_percentage_latency is: OrderedDict([('total_opackets', 34704266), ('total_ipackets', 34704266), ('frame_loss_percentage', 0.0), ('total_tx_pps', 1731948.8125), ('total_rx_pps', 1731958.875), ('total_tx_bps', 886.757792), ('total_rx_bps', 886.762944), ('min_latency_microsec', 12.0), ('max_latency_microsec', 45.5), ('avg_latency_microsec', 18.0), ('jitter', 4.0)]) 4. clean test env virsh list --all | sed -n 3~1p | awk '/[[:alpha:]]+/ { system("virsh destroy "$2" &>/dev/null") sleep 2 system("virsh undefine --managed-save --snapshots-metadata --remove-all-storage "$2" &>/dev/null") }' ovs-vsctl list bridge 2>/dev/null | grep name | awk '{ system("ovs-vsctl --if-exist del-br "$3" &>/dev/null") }' systemctl stop openvswitch rm -rf /etc/openvswitch/*.db rm -rf /var/lib/openvswitch/* rm -rf /dev/hugepages/rtemap_* 5. create 4q8pmd dpdkbond port and enable channel group on corresponding switch port. ip link set ens1f0 mtu 9120 ip link set ens1f1 mtu 9120 ip link set ens1f0 up ip link set ens1f1 up modprobe openvswitch systemctl stop openvswitch systemctl start openvswitch ovs-appctl vlog/set console:lacp:dbg syslog:lacp:dbg file:lacp:dbg ovs-appctl vlog/set console:bond:dbg syslog:bond:dbg file:bond:dbg ovs-appctl vlog/set console:ovs_rcu:dbg syslog:ovs_rcu:dbg file:ovs_rcu:dbg ovs-appctl vlog/set console:netdev_dpdk:dbg syslog:netdev_dpdk:dbg file:netdev_dpdk:dbg ovs-appctl vlog/set console:dpif_netdev:dbg syslog:dpif_netdev:dbg file:dpif_netdev:dbg ovs-appctl vlog/set console:dpdk:dbg syslog:dpdk:dbg file:dpdk:dbg ovs-appctl vlog/set console:memory:dbg syslog:memory:dbg file:memory:dbg ovs-vsctl --if-exists del-br ovsbr0 ovs-vsctl --no-wait set Open_vSwitch . other_config={} ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="8192,8192" ovs-vsctl --no-wait set Open_vSwitch . other_config:vhost-iommu-support=true ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask="0xff000" ovs-vsctl list Open_vSwitch ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev ovs-vsctl add-br ovsbrup -- set bridge ovsbrup datapath_type=netdev ovs-vsctl add-bond ovsbr0 dpdkbond dpdk0 dpdk1 bond_mode=balance-slb -- set Interface dpdk0 type=dpdk options:dpdk-devargs=class=eth,mac=04:3f:72:b0:35:32 options:n_rxq=4 mtu_request=9120 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=class=eth,mac=04:3f:72:b0:35:33 options:n_rxq=4 mtu_request=9120 ovs-vsctl set port dpdkbond other_config:lb-output-action=false ovs-vsctl set interface dpdk0 options:dpdk-lsc-interrupt=true ovs-vsctl set interface dpdk1 options:dpdk-lsc-interrupt=true ovs-vsctl set Port dpdkbond vlan_mode=trunk ovs-vsctl set Port dpdkbond bond_updelay=0 ovs-vsctl set Port dpdkbond bond_downdelay=0 ovs-vsctl set port dpdkbond lacp=active ovs-vsctl set port dpdkbond other_config:lacp-time=slow ovs-vsctl set port dpdkbond other_config:bond-detect-mode=carrier ovs-vsctl add-port ovsbr0 vhost0 -- set interface vhost0 type=dpdkvhostuserclient options:vhost-server-path=/tmp/vhost0 options:n_rxq=8 mtu_request=9120 ovs-ofctl del-flows ovsbr0 ovs-ofctl add-flow ovsbr0 actions=NORMAL # ovs-vsctl list port dpdkbond _uuid : a8071430-2205-4a8d-9829-088a0ac15ebe bond_active_slave : "04:3f:72:b0:35:33" bond_downdelay : 0 bond_fake_iface : false bond_mode : balance-slb bond_updelay : 0 cvlans : [] external_ids : {} fake_bridge : false interfaces : [13144d1b-ad14-4c9b-af61-401e6f8f0834, ccfac4d2-b80c-41f1-a6ed-2ad962d44ffe] lacp : active mac : [] name : dpdkbond other_config : {bond-detect-mode=carrier, lacp-time=slow, lb-output-action="false"} protected : false qos : [] rstp_statistics : {} rstp_status : {} statistics : {} status : {} tag : [] trunks : [] sw-cisco9364# show port-channel summary Flags: D - Down P - Up in port-channel (members) I - Individual H - Hot-standby (LACP only) s - Suspended r - Module-removed b - BFD Session Wait S - Switched R - Routed U - Up (port-channel) p - Up in delay-lacp mode (member) M - Not in use. Min-links not met -------------------------------------------------------------------------------- Group Port- Type Protocol Member Ports Channel -------------------------------------------------------------------------------- 46 Po46(SU) Eth LACP Eth1/3/1(P) Eth1/3/2(P) sw-cisco9364(config)# show port-channel internal info interface port-channel 46 port-channel46 channel : 46 bundle : 65535 ifindex : 0x1600002d admin mode : active oper mode : active nports : 2 active : 2 pre cfg : 0 ltl : 0x4 (4) lif : 0x104f iod : 0x50 (80) global id : 3 flag : 0 lock count : 0 num. of SIs: 0 ac mbrs : 0 0 lacp graceful conv disable : 0 lacp suspend indiv disable : 1 pc min-links : 1 pc max-bundle : 32 pc max active members : 32 pc is-suspend-minlinks : 0 port load defer enable : 0 port-channel bfd config enabled : 0 port-channel bfd config complete: 0 port-channel bfd destination: null port-channel bfd start timeout: 0 lacp fast-select-hot-standby disable : 0 port-channel port hash-distribution : none ethpm bundle lock count : 0 lacp delayed-enable fop Ethernet1/3/2 0x38015000 lacp delayed-enable : 0 lacp delayed-enable cfg-port none lacp delayed-enable oper-port none lacp delayed-enable local best priority : 0xffffffff lacp delayed-enable remote best priority : 0xffffffff lacp vpc conv enabled : 0 gir conv enabled : 0 bundle number map: 1-2Members: Ethernet1/3/1 [bundle_no = 1] is_ltl_programmed = 1 Port BFD session state: 5 (none) Ethernet1/3/2 [bundle_no = 0] is_ltl_programmed = 1 Port BFD session state: 5 (none) port-channel external lock: Lock Info: resource [eth-port-channel 46] type[0] p_gwrap[(nil)] FREE @ 820349 usecs after Thu Aug 25 11:34:41 2022 type[1] p_gwrap[(nil)] FREE @ 648245 usecs after Thu Aug 25 11:34:44 2022 type[2] p_gwrap[(nil)] FREE @ 646842 usecs after Thu Aug 25 11:34:44 2022 0x1600002d internal (ethpm bundle) lock: Lock Info: resource [eth-port-channel 46] type[0] p_gwrap[(nil)] FREE @ 820313 usecs after Thu Aug 25 11:34:41 2022 type[1] p_gwrap[(nil)] FREE @ 778893 usecs after Thu Aug 25 11:35:00 2022 type[2] p_gwrap[(nil)] FREE @ 778107 usecs after Thu Aug 25 11:35:00 2022 0x1600002d 6. Repeat step 2 to start the virtual machine. 7. use two ports to send traffic and got result as below: # python trex_rfc2544.py --guest-flavor=single_guest_8Q_8PMD_9VCPUs --store-file=result.json --test-name=balance-slb_single --dst-mac=76:2c:79:1f:1e:79 --trex-host=10.73.89.32 --trex-dir=/mnt/tests/kernel/networking/rt-kernel/new-bonding/current/ --frame-rate=10 --frame-size=64 --multistream=1024 --learning-mode --tput-threshold=0.01 --maximum-verification-trials=10 --test-duration=20 --verification-duration=20 --use-flow-stats --learning-duration=30 --use-port=2 throughput_result is: OrderedDict([('total_opackets', 331399385), ('total_ipackets', 331398394), ('frame_loss_percentage', 0.0002990349544553319), ('total_tx_pps', 16532262.0), ('total_rx_pps', 16532208.5), ('total_tx_bps', 8464.512256), ('total_rx_bps', 8464.49408), ('min_latency_microsec', 15.0), ('max_latency_microsec', 1322.0), ('avg_latency_microsec', 50.5), ('jitter', 17.0)]) half_percentage_latency is: OrderedDict([('total_opackets', 165679781), ('total_ipackets', 165679781), ('frame_loss_percentage', 0.0), ('total_tx_pps', 8263582.0), ('total_rx_pps', 8263593.75), ('total_tx_bps', 4230.95424), ('total_rx_bps', 4230.960256), ('min_latency_microsec', 11.0), ('max_latency_microsec', 72.0), ('avg_latency_microsec', 22.5), ('jitter', 4.0)]) Actual results: without lacp negotiated 'total_rx_pps', 3464517.625 enable lacp negotiated total_rx_pps', 16532208.5 Expected results: The opening and closing of lacp will not bring unnecessary performance loss Additional info: Run the same test step but change to active-backup mode for dpdkbond Active-backup mode and enable lacp throughput_result is: OrderedDict([('total_opackets', 312280602), ('total_ipackets', 312280602), ('frame_loss_percentage', 0.0), ('total_tx_pps', 15575161.5), ('total_rx_pps', 15575178.5), ('total_tx_bps', 7974.479616), ('total_rx_bps', 7974.4896), ('min_latency_microsec', 15.0), ('max_latency_microsec', 1614.5), ('avg_latency_microsec', 48.5), ('jitter', 13.0)]) half_percentage_latency is: OrderedDict([('total_opackets', 156120347), ('total_ipackets', 156120347), ('frame_loss_percentage', 0.0), ('total_tx_pps', 7786722.25), ('total_rx_pps', 7786715.25), ('total_tx_bps', 3986.802688), ('total_rx_bps', 3986.799232), ('min_latency_microsec', 11.5), ('max_latency_microsec', 1752.0), ('avg_latency_microsec', 24.0), ('jitter', 6.0)]) 'total_rx_pps', 15575178.5 Active-backup mode and disable lacp throughput_result is: OrderedDict([('total_opackets', 180013741), ('total_ipackets', 180013741), ('frame_loss_percentage', 0.0), ('total_tx_pps', 8980397.5), ('total_rx_pps', 8980325.0), ('total_tx_bps', 4597.964032), ('total_rx_bps', 4597.928704), ('min_latency_microsec', 11.0), ('max_latency_microsec', 1519.0), ('avg_latency_microsec', 39.5), ('jitter', 28.5)]) half_percentage_latency is: OrderedDict([('total_opackets', 89986847), ('total_ipackets', 89986847), ('frame_loss_percentage', 0.0), ('total_tx_pps', 4488220.5), ('total_rx_pps', 4488266.25), ('total_tx_bps', 2297.968896), ('total_rx_bps', 2297.988352), ('min_latency_microsec', 11.0), ('max_latency_microsec', 57.0), ('avg_latency_microsec', 18.5), ('jitter', 6.5)]) 8980325.0 Upload openvswitch log on attachment.