147. Cryptodev virtio Performance Application Tests

147.1. Description

This document provides the test plan for testing Cryptodev virtio performance by crypto perf application. The crypto perf application is a DPDK app under DPDK app folder.

Cryptodev virtio performance supports AESNI MB PMD, VIRTIO PMD

AESNI MB PMD algorithm table The table below contains AESNI MB algorithms which supported in crypto virtio perf. Part of the algorithms are not supported currently.

Algorithm Mode Detail
aes cbc Encrypt/Decrypt;Key size: 128, 192, 256 bits
sha   sha1, sha2-224, sha2-384, sha2-256, sha2-512
hmac  

Support sha implementations sha1, sha2-224, sha2-256,

sha2-384, sha2-512

VIRTIO PMD algorithm table The table below contains virtio algorithms which supported in crypto virtio perf. Part of the algorithms are not supported currently.

Algorithm Mode Detail
aes cbc Encrypt/Decrypt;Key size: 128, 192, 256 bits
sha   sha1, sha2-224, sha2-384, sha2-256, sha2-512
hmac  

Support sha implementations sha1, sha2-224, sha2-256,

sha2-384, sha2-512

147.2. Prerequisites

qemu version >= 2.12 in qemu enable vhost-user-crypto:

./configure --target-list=x86_64-softmmu --enable-vhost-crypto --prefix=/root/qemu-2.12 && make && make install

the bin is in /root/qemu-2.12 folder, which is your specified

147.3. Test case setup:

VM
HOST

In Host:

# Build DPDK and vhost_crypto app:

enable CONFIG_RTE_LIBRTE_VHOST in config/common_base
make install -j T=x86_64-native-linuxapp-gcc
make -C examples/vhost_crypto

# Compile the latest qemu # Run the dpdk vhost sample:

./examples/vhost_crypto/build/vhost-crypto --socket-mem 2048,0 --legacy-mem --vdev crypto_aesni_mb_pmd_1 -l 8,9,10 -n 4  -- --config "(9,0,0),(10,0,0)" --socket-file 9,/tmp/vm0_crypto0.sock --socket-file=10,/tmp/vm0_crypto1.sock

# bind vfio-pci:

usertools/dpdk-devbind.py --bind=vfio-pci 0000:60:00.0 0000:60:00.1

# Start VM by the qemu:

taskset -c 11,12,13,14 /root/qemu-2/bin/qemu-system-x86_64  -name vm0
    -enable-kvm -pidfile /tmp/.vm0.pid
    -cpu host -smp 4
    -m 5120 -object memory-backend-file,id=mem,size=5120M,mem-path=/mnt/huge,share=on -numa node,memdev=mem -mem-prealloc
    -net nic,vlan=0,macaddr=00:00:00:18:38:11,model=e1000,addr=1f -net user,vlan=0,hostfwd=tcp:10.67.111.126:6000-:22
    -chardev socket,path=/tmp/vm0_qga0.sock,server,nowait,id=vm0_qga0
    -device virtio-serial
    -device virtserialport,chardev=vm0_qga0,name=org.qemu.guest_agent.0
    -daemonize -monitor unix:/tmp/vm0_monitor.sock,server,nowait
    -vnc :1
    -chardev socket,path=/tmp/vm0_crypto0.sock,id=vm0_crypto0 -object cryptodev-vhost-user,id=cryptodev0,chardev=vm0_crypto0 -device virtio-crypto-pci,id=crypto0,cryptodev=cryptodev0
    -chardev socket,path=/tmp/vm0_crypto1.sock,id=vm0_crypto1 -object cryptodev-vhost-user,id=cryptodev1,chardev=vm0_crypto1 -device virtio-crypto-pci,id=crypto1,cryptodev=cryptodev1
    -drive file=/root/VMs/virtio_crypto_test_710_1.img
    -device vfio-pci,host=0000:60:00.0,id=pt_0
    -device vfio-pci,host=0000:60:00.1,id=pt_1

In VM:

# set virtio device:

modprobe uio_pci_generic
echo -n 0000:00:04.0 > /sys/bus/pci/drivers/virtio-pci/unbind
echo -n 0000:00:05.0 > /sys/bus/pci/drivers/virtio-pci/unbind
echo "1af4 1054" > /sys/bus/pci/drivers/uio_pci_generic/new_id

# Run the virtio performance test cases

  1. The AESNI_MB case Command line Eg:

    ./build/app/dpdk-test-crypto-perf -c 0xf --vdev crypto_aesni_mb_pmd  \
    -- --ptest throughput --devtype crypto_aesni_mb --optype cipher-then-auth  \
    --cipher-algo aes-cbc --cipher-op encrypt --cipher-key-sz 16 --cipher-iv-sz 16 \
    --auth-algo sha1-hmac --auth-op generate --auth-key-sz 64 --auth-aad-sz 0 \
    --auth-digest-sz 20 --total-ops 10000000 --burst-sz 32 --buffer-sz 1024
    
  2. The VIRTIO case Command line Eg:

    ./build/app/dpdk-test-crypto-perf -c 0xf  -w 00:05.0 -- --ptest throughput \
    --devtype crypto_qat --optype cipher-then-auth  --cipher-algo aes-cbc --cipher-op encrypt \
    --cipher-key-sz 16 --cipher-iv-sz 16 --auth-algo sha1-hmac --auth-op generate --auth-key-sz 64 \
    --auth-aad-sz 0 --auth-digest-sz 20 --total-ops 10000000 --burst-sz 32 --buffer-sz 1024