223. vhost/virtio-user interrupt mode with cbdma test plan¶
223.1. Description¶
Virtio-user interrupt need test with l3fwd-power sample, small packets send from traffic generator to virtio side, check virtio-user cores can be wakeup status, and virtio-user cores should be sleep status after stop sending packets from traffic generator. This test plan tests virtio-user Rx interrupt and LSC interrupt with vhost-user as the backend when cbdma enable.
Note
DPDK local patch that about vhost pmd is needed when testing Vhost asynchronous data path with testpmd.
223.2. Prerequisites¶
223.2.1. Software¶
Scapy
223.2.2. General set up¶
Compile DPDK:
# CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib -Dexamples=all --default-library=static <dpdk build dir> # ninja -C <dpdk build dir> -j 110 For example: CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib -Dexamples=all --default-library=static x86_64-native-linuxapp-gcc ninja -C x86_64-native-linuxapp-gcc -j 110
Get the PCI device ID and DMA device ID of DUT, for example, 0000:18:00.0 is PCI device ID, 0000:00:04.0, 0000:00:04.1 is DMA device ID:
<dpdk dir># ./usertools/dpdk-devbind.py -s Network devices using kernel driver =================================== 0000:18:00.0 'Device 159b' if=ens785f0 drv=ice unused=vfio-pci DMA devices using kernel driver =============================== 0000:00:04.0 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=vfio-pci 0000:00:04.1 'Sky Lake-E CBDMA Registers 2021' drv=ioatdma unused=vfio-pci
223.3. Test case¶
223.3.1. Test Case 1: Split ring LSC event between vhost-user and virtio-user with cbdma enable¶
This case tests the LSC interrupt of split ring virtio-user with vhost-user as the back-end when vhost uses the asynchronous operations with CBDMA channels. Flow: Vhost <–> Virtio
Bind 1 CBDMA port to vfio-pci driver, then start vhost-user side:
./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x3000 -n 4 -a 0000:00:04.0 --file-prefix=vhost \ --vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0]' \ -- -i testpmd> set fwd mac testpmd> start
Start virtio-user side:
./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xc000 -n 4 --no-pci --file-prefix=virtio \ --vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net \ -- -i --tx-offloads=0x00 testpmd> set fwd mac testpmd> start
Check the virtio-user side link status:
testpmd> show port info 0 #it should show "up"
Quit the vhost-user side with testpmd, then check the virtio-user side link status:
testpmd> show port info 0 #it should show "down"
223.3.2. Test Case 2: Split ring virtio-user interrupt test with vhost-user as backend and cbdma enable¶
This case tests Rx interrupt of split ring virtio-user with vhost-user as the back-end when vhost uses the asynchronous operations with CBDMA channels. Flow: TG –> NIC –> Vhost –> Virtio
Bind 1 CBDMA port and 1 NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:
./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 -a 0000:af:00.0 -a 0000:00:04.0 \ --vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0]' \ -- -i --rxq=1 --txq=1 testpmd> start
Start l3fwd-power with a virtio-user device:
./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ --vdev=virtio_user0,path=./vhost-net -- -p 1 --config="(0,0,14)" --parse-ptype --interrupt-only
Send packets with packet generator, check the virtio-user related core can be wakeup status.
Stop sending packets with packet generator, check virtio-user related core change to sleep status.
Restart sending packets with packet generator, check virtio-user related core change to wakeup status again.
223.3.3. Test Case 3: Packed ring LSC event between vhost-user and virtio-user with cbdma enable¶
This case tests the LSC interrupt of packed ring virtio-user with vhost-user as the back-end when vhost uses the asynchronous operations with CBDMA channels. Flow: Vhost <–> Virtio
Bind 1 CBDMA port to vfio-pci driver, then start vhost-user side:
./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x3000 -n 4 -a 0000:00:04.0 --file-prefix=vhost \ --vdev 'net_vhost0,iface=vhost-net,queues=1,client=0,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0]' \ -- -i testpmd> set fwd mac testpmd> start
Start virtio-user side:
./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0xc000 -n 4 --no-pci --file-prefix=virtio \ --vdev=net_virtio_user0,mac=00:01:02:03:04:05,path=./vhost-net,packed_vq=1 \ -- -i --tx-offloads=0x00 testpmd> set fwd mac testpmd> start
Check the virtio-user side link status:
testpmd> show port info 0 #it should show "up"
Quit the vhost-user side with testpmd, then check the virtio-user side link status:
testpmd> show port info 0 #it should show "down"
223.3.4. Test Case 4: Packed ring virtio-user interrupt test with vhost-user as backend and cbdma enable¶
This case tests Rx interrupt of packed ring virtio-user with vhost-user as the back-end when vhost uses the asynchronous operations with CBDMA channels.
flow: TG –> NIC –> Vhost –> Virtio
Bind 1 CBDMA port and 1 NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:
./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 -a 0000:af:00.0 -a 0000:00:04.0 \ --vdev 'net_vhost0,iface=vhost-net,queues=1,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0]' \ -- -i --rxq=1 --txq=1 testpmd> start
Start l3fwd-power with a virtio-user device:
./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ --vdev=virtio_user0,path=./vhost-net,packed_vq=1 -- -p 1 --config="(0,0,14)" --parse-ptype --interrupt-only
Send packets with packet generator, check the virtio-user related core can be wakeup status.
Stop sending packets with packet generator, check virtio-user related core change to sleep status.
Restart sending packets with packet generator, check virtio-user related core change to wakeup status again.
223.3.5. Test Case 5: Split ring multi-queues virtio-user interrupt test with vhost-user as backend and cbdma enable¶
This case tests Rx interrupt of split ring virtio-user with multi-queues and vhost-user as the back-end when vhost uses the asynchronous operations with CBDMA channels.
flow: TG –> NIC –> Vhost –> Virtio
Bind 1 CBDMA port and 1 NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:
./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 -a 0000:af:00.0 -a 0000:00:04.0 \ --vdev 'net_vhost0,iface=vhost-net,queues=2,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0;txq1@0000:00:04.0;rxq1@0000:00:04.0]' \ -- -i --rxq=2 --txq=2 testpmd> start
Start l3fwd-power with a virtio-user device:
./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ --vdev=virtio_user0,path=./vhost-net,queues=2 -- -p 1 --config="(0,0,14),(0,1,15)" --parse-ptype --interrupt-only
Send packets with random ip from packet generator, check packets can forward back and both 2 queues exist packets, check the virtio-user related core can be wakeup status.
Stop sending packets with packet generator, check virtio-user related core change to sleep status.
Restart sending packets with packet generator, check virtio-user related core change to wakeup status again.
223.3.6. Test Case 6: Packed ring multi-queues virtio-user interrupt test with vhost-user as backend and cbdma enable¶
This case tests Rx interrupt of packed ring virtio-user with multi-queues and vhost-user as the back-end when vhost uses the asynchronous operations with CBDMA channels.
flow: TG –> NIC –> Vhost –> Virtio
Bind 1 CBDMA port and 1 NIC port to vfio-pci, launch testpmd with a virtual vhost device as backend:
./x86_64-native-linuxapp-gcc/app/dpdk-testpmd -c 0x7c -n 4 -a 0000:af:00.0 -a 0000:00:04.0 \ --vdev 'net_vhost0,iface=vhost-net,queues=2,dmas=[txq0@0000:00:04.0;rxq0@0000:00:04.0;txq1@0000:00:04.0;rxq1@0000:00:04.0]' \ -- -i --rxq=2 --txq=2 testpmd> start
Start l3fwd-power with a virtio-user device:
./x86_64-native-linuxapp-gcc/examples/dpdk-l3fwd-power -c 0xc000 -n 4 --log-level='user1,7' --no-pci --file-prefix=l3fwd-pwd \ --vdev=virtio_user0,path=./vhost-net,queues=2,packed_vq=1 -- -p 1 --config="(0,0,14),(0,1,15)" --parse-ptype --interrupt-only
Send packets with random ip from packet generator, check packets can forward back and both 2 queues exist packets, check the virtio-user related core can be wakeup status.
Stop sending packets with packet generator, check virtio-user related core change to sleep status.
Restart sending packets with packet generator, check virtio-user related core change to wakeup status again.