Bug 2121444

Summary: [dpdkbond]balance-slb performance degradation without lacp negotiated
Product: Red Hat Enterprise Linux Fast Datapath Reporter: mhou <mhou>
Component: openvswitchAssignee: 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:
Description Flags
ovs-vswitchd.log none

Description mhou 2022-08-25 13:24:17 UTC
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.