Bug 2211356
| Summary: | ixgbe/i40e driver: ovs dpdk vhostuser pvp got very low performance when send 9200byte traffic | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux Fast Datapath | Reporter: | liting <tli> |
| Component: | openvswitch | Assignee: | Timothy Redaelli <tredaelli> |
| openvswitch sub component: | ovs-dpdk | QA Contact: | qding |
| Status: | NEW --- | Docs Contact: | |
| Severity: | unspecified | ||
| Priority: | unspecified | CC: | ctrautma, jhsiao, ktraynor |
| Version: | FDP 23.E | ||
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| 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: | |||
The issue exist on 10g ixgbe/i40e card. For 25g i40e card, it has another issue. The 9200byte cases of 2queue and 4queue got the unstable performance. https://beaker.engineering.redhat.com/jobs/7918378 https://beaker-archive.hosts.prod.psi.bos.redhat.com/beaker-logs/2023/06/79183/7918378/14010045/161103495/i40e_25.html https://beaker.engineering.redhat.com/jobs/7918816 https://beaker-archive.hosts.prod.psi.bos.redhat.com/beaker-logs/2023/06/79188/7918816/14010615/161107881/i40e_25.html |
Description of problem: ixgbe/i40e driver: ovs dpdk vhostuser pvp got very low performance when send 9200byte traffic Version-Release number of selected component (if applicable): It exist on both rhel8.6 and rhel9.2. rhel8.6: kernel 4.18.0-372.56.1.el8_6.x86_64 openvswitch3.1-3.1.0-29.el8fdp dpdk-21.11-1.el8 rhel9.2: 5.14.0-284.15.1.el9_2.x86_64 openvswitch3.1-3.1.0-24.el9 dpdk-22.11-1.el9 How reproducible: Steps to Reproduce: 1. Build ovs dpdk vhostuser pvp topo [root@dell-per730-53 ~]# ovs-vsctl show ccd0efcd-f8da-42c1-8dea-9bd6d492aefa Bridge ovsbr0 datapath_type: netdev Port dpdk1 Interface dpdk1 type: dpdk options: {dpdk-devargs="0000:04:00.1", n_rxq="1", n_rxq_desc="1024", n_txq_desc="1024"} Port vhost0 Interface vhost0 type: dpdkvhostuserclient options: {vhost-server-path="/tmp/vhostuser/vhost0"} Port vhost1 Interface vhost1 type: dpdkvhostuserclient options: {vhost-server-path="/tmp/vhostuser/vhost1"} Port dpdk0 Interface dpdk0 type: dpdk options: {dpdk-devargs="0000:04:00.0", n_rxq="1", n_rxq_desc="1024", n_txq_desc="1024"} Port ovsbr0 Interface ovsbr0 type: internal ovs_version: "3.1.2" 2. use following xml to define guest <domain type='kvm'> <name>g1</name> <memory unit='KiB'>8388608</memory> <currentMemory unit='KiB'>8388608</currentMemory> <memoryBacking> <hugepages> <page size='1048576' unit='KiB'/> </hugepages> <locked/> <access mode='shared'/> </memoryBacking> <vcpu placement='static'>3</vcpu> <cputune> <vcpupin vcpu='0' cpuset='2'/> <vcpupin vcpu='1' cpuset='38'/> <vcpupin vcpu='2' cpuset='4'/> <emulatorpin cpuset='0,36'/> </cputune> <numatune> <memory mode='strict' nodeset='0'/> </numatune> <resource> <partition>/machine</partition> </resource> <os> <type arch='x86_64' machine='q35'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pmu state='off'/> <vmport state='off'/> <ioapic driver='qemu'/> </features> <cpu mode='host-passthrough' check='none'> <feature policy='require' name='tsc-deadline'/> <numa> <cell id='0' cpus='0-2' 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='/var/lib/libvirt/images/g1.qcow2'/> <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='bridge'> <mac address='52:54:00:01:02:03'/> <source bridge='virbr0'/> <model type='virtio'/> </interface> <interface type='vhostuser'> <mac address='00:de:ad:00:00:01'/> <source type='unix' path='/tmp/vhostuser/vhost0' mode='server'/> <model type='virtio'/> <driver name='vhost' queues='1' rx_queue_size='1024' tx_queue_size='1024' iommu='on' ats='on'> <host mrg_rxbuf='off'/> </driver> <address type='pci' domain='0x0000' bus='0x3' slot='0x00' function='0x0'/> </interface> <interface type='vhostuser'> <mac address='00:de:ad:00:00:02'/> <source type='unix' path='/tmp/vhostuser/vhost1' mode='server'/> <model type='virtio'/> <driver name='vhost' queues='1' rx_queue_size='1024' tx_queue_size='1024' iommu='on' ats='on'> <host mrg_rxbuf='off'/> </driver> <address type='pci' domain='0x0000' bus='0x4' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <source path='/dev/pts/1'/> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> <alias name='serial0'/> </serial> <console type='pty' tty='/dev/pts/1'> <source path='/dev/pts/1'/> <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> <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> <iommu model='intel'> <driver intremap='on' caching_mode='on' iotlb='on'/> </iommu> </devices> <seclabel type='dynamic' model='selinux' relabel='yes'/> </domain> 3. start testpmd inside guest dpdk-testpmd -l 0-2 -n 1 --socket-mem 1024 -- -i --forward-mode=io --burst=32 --rxd=8192 --txd=8192 --max-pkt-len=9600 --mbuf-size=9728 --nb-cores=2 --rxq=1 --txq=1 --mbcache=512 --auto-start 4. On the trex server, send the traffic with 9200byte packet ./binary-search.py --traffic-generator=trex-txrx --frame-size=9200 --num-flows=1024 --max-loss-pct=0 --search-runtime=10 --validation-runtime=60 --rate-tolerance=10 --runtime-tolerance=10 --rate=25 --rate-unit=% --duplicate-packet-failure=retry-to-fail --negative-packet-loss=retry-to-fail --warmup-trial --warmup-trial-runtime=10 --rate=25 --rate-unit=% --one-shot=0 --use-src-ip-flows=1 --use-dst-ip-flows=1 --use-src-mac-flows=1 --use-dst-mac-flows=1 --send-teaching-measurement --send-teaching-warmup --teaching-warmup-packet-type=generic --teaching-warmup-packet-rate=1000 Actual results: It got about 0.069mpps when send the traffic with 9200byte. But if send traffic with another size, such as 64byte or 2000byte, and then send the traffic with 9200byte, it can got the normal result(0.27mpps) Expected results: It should got the normal result(0.27mpps) when send the traffic with 9200byte firstly. Additional info: The following job just run 9200byte traffic, it got 0.069mpps. rhel9.2 i40e https://beaker.engineering.redhat.com/jobs/7912643 rhel8.6 ixgbe https://beaker.engineering.redhat.com/jobs/7911924 rhel8.6 i40e https://beaker.engineering.redhat.com/jobs/7911599 The following job run with 2000byte and 9200byte. The 9200byte got normal 0.27mpps https://beaker.engineering.redhat.com/jobs/7911601