使用英特尔 QAT 的 pdk-test-crypto-perf 吞吐量低
pdk-test-crypto-perf throughput low using intel QAT
我正在使用英特尔 QAT 进行一些与 throughout 相关的 dpdk cryptodev 测试。
使用 dpdk 应用程序 dpdk-test-crypto-perf 时,我注意到吞吐量远低于 http://fast.dpdk.org/doc/perf/DPDK_20_11_Intel_crypto_performance_report.pdf
中提到的吞吐量
[root]# ./dpdk-test-crypto-perf --socket-mem 2048,0 --legacy-mem -w 0000:3d:01.0 -w 0000:3d:01.7 -w 0000:3d:02.7 -l 4,5,13,6,14 -n 4 -- --buffer-sz 64,128,256,512,1024,2048 --optype cipher-then-auth --ptest throughput --auth-key-sz 64 --cipher-key-sz 16 --devtype crypto_qat --cipher-iv-sz 16 --auth-op generate --burst-sz 32 --total-ops 30000000 --silent --digest-sz 20 --auth-algo sha1-hmac --cipher-algo aes-cbc --cipher-op encrypt
EAL: Detected 36 lcore(s)
EAL: Detected 2 NUMA nodes
Option -w, --pci-whitelist is deprecated, use -a, --allow option instead
Option -w, --pci-whitelist is deprecated, use -a, --allow option instead
Option -w, --pci-whitelist is deprecated, use -a, --allow option instead
Option -w, --pci-whitelist is deprecated, use -a, --allow option instead
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: Probe PCI driver: qat (8086:37c9) device: 0000:3d:01.0 (socket 0)
CRYPTODEV: Creating cryptodev 0000:3d:01.0_qat_sym
CRYPTODEV: Initialisation parameters - name: 0000:3d:01.0_qat_sym,socket id: 0, max queue pairs: 0
CRYPTODEV: Creating cryptodev 0000:3d:01.0_qat_asym
CRYPTODEV: Initialisation parameters - name: 0000:3d:01.0_qat_asym,socket id: 0, max queue pairs: 0
EAL: Probe PCI driver: qat (8086:37c9) device: 0000:3d:01.7 (socket 0)
CRYPTODEV: Creating cryptodev 0000:3d:01.7_qat_sym
CRYPTODEV: Initialisation parameters - name: 0000:3d:01.7_qat_sym,socket id: 0, max queue pairs: 0
CRYPTODEV: Creating cryptodev 0000:3d:01.7_qat_asym
CRYPTODEV: Initialisation parameters - name: 0000:3d:01.7_qat_asym,socket id: 0, max queue pairs: 0
EAL: Probe PCI driver: qat (8086:37c9) device: 0000:3d:02.7 (socket 0)
CRYPTODEV: Creating cryptodev 0000:3d:02.7_qat_sym
CRYPTODEV: Initialisation parameters - name: 0000:3d:02.7_qat_sym,socket id: 0, max queue pairs: 0
CRYPTODEV: Creating cryptodev 0000:3d:02.7_qat_asym
CRYPTODEV: Initialisation parameters - name: 0000:3d:02.7_qat_asym,socket id: 0, max queue pairs: 0
EAL: No legacy callbacks, legacy socket not created
Allocated pool "priv_sess_mp_0" on socket 0
CRYPTODEV: elt_size 0 is expanded to 240
Allocated pool "sess_mp_0" on socket 0
lcore id Buf Size Burst Size Enqueued Dequeued Failed Enq Failed Deq MOps Gbps Cycles/Buf
13 64 32 30000000 30000000 608024205 590361292 1.4151 0.7245 2190.68
14 64 32 30000000 30000000 657459751 640717849 1.4149 0.7244 2190.99
5 64 32 30000000 30000000 605264521 587610893 1.4148 0.7244 2191.05
6 64 32 30000000 30000000 657948166 641046769 1.4148 0.7244 2191.08
6 128 32 30000000 30000000 656326323 639492353 1.4120 1.4459 2195.45
5 128 32 30000000 30000000 603124442 585311776 1.4116 1.4455 2196.03
13 128 32 30000000 30000000 606420080 588546448 1.4116 1.4455 2196.11
14 128 32 30000000 30000000 656535199 639674449 1.4115 1.4454 2196.28
5 256 32 30000000 30000000 612548897 594307290 1.3874 2.8413 2234.44
6 256 32 30000000 30000000 661625698 644285343 1.3871 2.8407 2234.91
14 256 32 30000000 30000000 661348938 644025757 1.3869 2.8403 2235.23
13 256 32 30000000 30000000 615542904 597231595 1.3868 2.8403 2235.29
13 512 32 30000000 30000000 648544131 629851341 1.3264 5.4330 2337.10
6 512 32 30000000 30000000 690157406 672252121 1.3264 5.4328 2337.21
14 512 32 30000000 30000000 688334849 670537999 1.3260 5.4312 2337.88
5 512 32 30000000 30000000 646173682 627438866 1.3256 5.4297 2338.55
5 1024 32 30000000 30000000 787708296 768071019 1.1471 9.3970 2702.48
13 1024 32 30000000 30000000 792311812 772652910 1.1461 9.3888 2704.84
6 1024 32 30000000 30000000 829463330 810543251 1.1458 9.3866 2705.48
14 1024 32 30000000 30000000 828377296 809370537 1.1457 9.3860 2705.65
13 2048 32 30000000 30000000 1399981574 1379798969 0.7602 12.4550 4077.90
14 2048 32 30000000 30000000 1437924813 1418541434 0.7601 12.4533 4078.45
6 2048 32 30000000 30000000 1441794521 1422292353 0.7600 12.4514 4079.11
5 2048 32 30000000 30000000 1399004014 1378687062 0.7600 12.4512 4079.15
这是预期的吗?还是我的配置有问题?还有很多失败Enq/Deq。
[root]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-1127.19.1.rt56.1116.el7.x86_64 root=/dev/mapper/centos-root ro processor.max_cstate=1 intel_idle.max_cstate=0 intel_pstate=disable idle=poll default_hugepagesz=1G hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt selinux=0 enforcing=0 nmi_watchdog=0 audit=0 mce=off kthread_cpus=0,35 irqaffinity=0,35 skew_tick=1 isolcpus=1-34 intel_pstate=disable nosoftlockup nohz=on nohz_full=1-34 rcu_nocbs=1-34
如果我使用 sw 加密,我会得到更好的结果。
[root] # ./dpdk-test-crypto-perf --socket-mem 2048,0 --legacy-mem --vdev crypto_aesni_mb_pmd_1 -l 4,5 -n 4 -- --buffer-sz 64,128,256,512,1024,2048 --optype cipher-then-auth --ptest throughput --auth-key-sz 64 --cipher-key-sz 16 --devtype crypto_aesni_mb --cipher-iv-sz 16 --auth-op generate --burst-sz 32 --total-ops 10000000 --silent --digest-sz 12 --auth-algo sha1-hmac --cipher-algo aes-cbc --cipher-op encrypt
EAL: Detected 6 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probing VFIO support...
CRYPTODEV: Creating cryptodev crypto_aesni_mb_pmd_1
CRYPTODEV: Initialisation parameters - name: crypto_aesni_mb_pmd_1,socket id: 0, max queue pairs: 8
EAL: No legacy callbacks, legacy socket not created
Allocated pool "priv_sess_mp_0" on socket 0
CRYPTODEV: elt_size 0 is expanded to 320
Allocated pool "sess_mp_0" on socket 0
lcore id Buf Size Burst Size Enqueued Dequeued Failed Enq Failed Deq MOps Gbps Cycles/Buf
5 64 32 10000000 10000000 0 0 8.4491 4.3259 295.89
5 128 32 10000000 10000000 0 0 6.9138 7.0798 361.59
5 256 32 10000000 10000000 0 0 5.2645 10.7816 474.88
5 512 32 10000000 10000000 0 0 3.5384 14.4931 706.54
5 1024 32 10000000 10000000 0 0 2.1451 17.5729 1165.43
5 2048 32 10000000 10000000 0 0 1.1839 19.3968 2111.69
根据日志和现场调试得出 performance is in line with the expected values of both SW and HW
。以下是变化的原因
- QAT HW 加密是在 Xeon cascade lake 核心上完成的
- SW Crypto 在第 11 代 corei7 平台上 运行
- corei7 上的核心时钟在涡轮增压下高达 5Ghz
- HW 加密是 运行,具有来自远程 NUMACPU 个内核
- HW 加密仅限于内存控制器与
-n 4
一起使用
- HW 加密 运行 总共
30000000
,SW 加密 运行 总共 10000000
- HW 加密设备是 3,但传递的 lcores 是 5,导致 2 个 lcores 共享相同的硬件。
- HW 加密是在 3 VF 上完成的,因此总容量应该相加而不是单个结果。
使用这些正确的命令是
硬件:./dpdk-test-crypto-perf --socket-mem 2048,1 --legacy-mem -l 4,6 -w 0000:3d:01.0 -- --buffer-sz 64,128,256,512,1024,2048 --optype cipher-then-auth --ptest throughput --auth-key-sz 64 --cipher-key-sz 16 --cipher-iv-sz 16 --auth-op generate --burst-sz 32 --total-ops 30000000 --silent --digest-sz 20 --auth-algo sha1-hmac --cipher-algo aes-cbc --cipher-op encrypt --devtype crypto_qat
软件:./dpdk-test-crypto-perf --socket-mem 2048,1 --legacy-mem -l 4,6 --vdev crypto_aesni_mb_pmd_1 -a 0000:00:00.0 -- --buffer-sz 64,128,256,512,1024,2048 --optype cipher-then-auth --ptest throughput --auth-key-sz 64 --cipher-key-sz 16 --cipher-iv-sz 16 --auth-op generate --burst-sz 32 --total-ops 30000000 --silent --digest-sz 20 --auth-algo sha1-hmac --cipher-algo aes-cbc --cipher-op encrypt --devtype crypto_aesni_mb
对于 Xeon (3.1Ghz) 上的 64B,我们能够获得 3.2Gbps,而带有 SW 的 corei7 (5Ghz) 能够获得 4.2Gbps。 Xeon 上的 2048B HW 能够达到 50Gbps,而 SW 为 19.2Gbps。
注意:在 Xeon 中有入队和出队的下降,可以通过平台和 BIOS 设置进一步减少。
我正在使用英特尔 QAT 进行一些与 throughout 相关的 dpdk cryptodev 测试。 使用 dpdk 应用程序 dpdk-test-crypto-perf 时,我注意到吞吐量远低于 http://fast.dpdk.org/doc/perf/DPDK_20_11_Intel_crypto_performance_report.pdf
中提到的吞吐量 [root]# ./dpdk-test-crypto-perf --socket-mem 2048,0 --legacy-mem -w 0000:3d:01.0 -w 0000:3d:01.7 -w 0000:3d:02.7 -l 4,5,13,6,14 -n 4 -- --buffer-sz 64,128,256,512,1024,2048 --optype cipher-then-auth --ptest throughput --auth-key-sz 64 --cipher-key-sz 16 --devtype crypto_qat --cipher-iv-sz 16 --auth-op generate --burst-sz 32 --total-ops 30000000 --silent --digest-sz 20 --auth-algo sha1-hmac --cipher-algo aes-cbc --cipher-op encrypt
EAL: Detected 36 lcore(s)
EAL: Detected 2 NUMA nodes
Option -w, --pci-whitelist is deprecated, use -a, --allow option instead
Option -w, --pci-whitelist is deprecated, use -a, --allow option instead
Option -w, --pci-whitelist is deprecated, use -a, --allow option instead
Option -w, --pci-whitelist is deprecated, use -a, --allow option instead
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: Probe PCI driver: qat (8086:37c9) device: 0000:3d:01.0 (socket 0)
CRYPTODEV: Creating cryptodev 0000:3d:01.0_qat_sym
CRYPTODEV: Initialisation parameters - name: 0000:3d:01.0_qat_sym,socket id: 0, max queue pairs: 0
CRYPTODEV: Creating cryptodev 0000:3d:01.0_qat_asym
CRYPTODEV: Initialisation parameters - name: 0000:3d:01.0_qat_asym,socket id: 0, max queue pairs: 0
EAL: Probe PCI driver: qat (8086:37c9) device: 0000:3d:01.7 (socket 0)
CRYPTODEV: Creating cryptodev 0000:3d:01.7_qat_sym
CRYPTODEV: Initialisation parameters - name: 0000:3d:01.7_qat_sym,socket id: 0, max queue pairs: 0
CRYPTODEV: Creating cryptodev 0000:3d:01.7_qat_asym
CRYPTODEV: Initialisation parameters - name: 0000:3d:01.7_qat_asym,socket id: 0, max queue pairs: 0
EAL: Probe PCI driver: qat (8086:37c9) device: 0000:3d:02.7 (socket 0)
CRYPTODEV: Creating cryptodev 0000:3d:02.7_qat_sym
CRYPTODEV: Initialisation parameters - name: 0000:3d:02.7_qat_sym,socket id: 0, max queue pairs: 0
CRYPTODEV: Creating cryptodev 0000:3d:02.7_qat_asym
CRYPTODEV: Initialisation parameters - name: 0000:3d:02.7_qat_asym,socket id: 0, max queue pairs: 0
EAL: No legacy callbacks, legacy socket not created
Allocated pool "priv_sess_mp_0" on socket 0
CRYPTODEV: elt_size 0 is expanded to 240
Allocated pool "sess_mp_0" on socket 0
lcore id Buf Size Burst Size Enqueued Dequeued Failed Enq Failed Deq MOps Gbps Cycles/Buf
13 64 32 30000000 30000000 608024205 590361292 1.4151 0.7245 2190.68
14 64 32 30000000 30000000 657459751 640717849 1.4149 0.7244 2190.99
5 64 32 30000000 30000000 605264521 587610893 1.4148 0.7244 2191.05
6 64 32 30000000 30000000 657948166 641046769 1.4148 0.7244 2191.08
6 128 32 30000000 30000000 656326323 639492353 1.4120 1.4459 2195.45
5 128 32 30000000 30000000 603124442 585311776 1.4116 1.4455 2196.03
13 128 32 30000000 30000000 606420080 588546448 1.4116 1.4455 2196.11
14 128 32 30000000 30000000 656535199 639674449 1.4115 1.4454 2196.28
5 256 32 30000000 30000000 612548897 594307290 1.3874 2.8413 2234.44
6 256 32 30000000 30000000 661625698 644285343 1.3871 2.8407 2234.91
14 256 32 30000000 30000000 661348938 644025757 1.3869 2.8403 2235.23
13 256 32 30000000 30000000 615542904 597231595 1.3868 2.8403 2235.29
13 512 32 30000000 30000000 648544131 629851341 1.3264 5.4330 2337.10
6 512 32 30000000 30000000 690157406 672252121 1.3264 5.4328 2337.21
14 512 32 30000000 30000000 688334849 670537999 1.3260 5.4312 2337.88
5 512 32 30000000 30000000 646173682 627438866 1.3256 5.4297 2338.55
5 1024 32 30000000 30000000 787708296 768071019 1.1471 9.3970 2702.48
13 1024 32 30000000 30000000 792311812 772652910 1.1461 9.3888 2704.84
6 1024 32 30000000 30000000 829463330 810543251 1.1458 9.3866 2705.48
14 1024 32 30000000 30000000 828377296 809370537 1.1457 9.3860 2705.65
13 2048 32 30000000 30000000 1399981574 1379798969 0.7602 12.4550 4077.90
14 2048 32 30000000 30000000 1437924813 1418541434 0.7601 12.4533 4078.45
6 2048 32 30000000 30000000 1441794521 1422292353 0.7600 12.4514 4079.11
5 2048 32 30000000 30000000 1399004014 1378687062 0.7600 12.4512 4079.15
这是预期的吗?还是我的配置有问题?还有很多失败Enq/Deq。
[root]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-1127.19.1.rt56.1116.el7.x86_64 root=/dev/mapper/centos-root ro processor.max_cstate=1 intel_idle.max_cstate=0 intel_pstate=disable idle=poll default_hugepagesz=1G hugepagesz=1G hugepages=100 intel_iommu=on iommu=pt selinux=0 enforcing=0 nmi_watchdog=0 audit=0 mce=off kthread_cpus=0,35 irqaffinity=0,35 skew_tick=1 isolcpus=1-34 intel_pstate=disable nosoftlockup nohz=on nohz_full=1-34 rcu_nocbs=1-34
如果我使用 sw 加密,我会得到更好的结果。
[root] # ./dpdk-test-crypto-perf --socket-mem 2048,0 --legacy-mem --vdev crypto_aesni_mb_pmd_1 -l 4,5 -n 4 -- --buffer-sz 64,128,256,512,1024,2048 --optype cipher-then-auth --ptest throughput --auth-key-sz 64 --cipher-key-sz 16 --devtype crypto_aesni_mb --cipher-iv-sz 16 --auth-op generate --burst-sz 32 --total-ops 10000000 --silent --digest-sz 12 --auth-algo sha1-hmac --cipher-algo aes-cbc --cipher-op encrypt
EAL: Detected 6 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: Probing VFIO support...
CRYPTODEV: Creating cryptodev crypto_aesni_mb_pmd_1
CRYPTODEV: Initialisation parameters - name: crypto_aesni_mb_pmd_1,socket id: 0, max queue pairs: 8
EAL: No legacy callbacks, legacy socket not created
Allocated pool "priv_sess_mp_0" on socket 0
CRYPTODEV: elt_size 0 is expanded to 320
Allocated pool "sess_mp_0" on socket 0
lcore id Buf Size Burst Size Enqueued Dequeued Failed Enq Failed Deq MOps Gbps Cycles/Buf
5 64 32 10000000 10000000 0 0 8.4491 4.3259 295.89
5 128 32 10000000 10000000 0 0 6.9138 7.0798 361.59
5 256 32 10000000 10000000 0 0 5.2645 10.7816 474.88
5 512 32 10000000 10000000 0 0 3.5384 14.4931 706.54
5 1024 32 10000000 10000000 0 0 2.1451 17.5729 1165.43
5 2048 32 10000000 10000000 0 0 1.1839 19.3968 2111.69
根据日志和现场调试得出 performance is in line with the expected values of both SW and HW
。以下是变化的原因
- QAT HW 加密是在 Xeon cascade lake 核心上完成的
- SW Crypto 在第 11 代 corei7 平台上 运行
- corei7 上的核心时钟在涡轮增压下高达 5Ghz
- HW 加密是 运行,具有来自远程 NUMACPU 个内核
- HW 加密仅限于内存控制器与
-n 4
一起使用
- HW 加密 运行 总共
30000000
,SW 加密 运行 总共10000000
- HW 加密设备是 3,但传递的 lcores 是 5,导致 2 个 lcores 共享相同的硬件。
- HW 加密是在 3 VF 上完成的,因此总容量应该相加而不是单个结果。
使用这些正确的命令是
硬件:./dpdk-test-crypto-perf --socket-mem 2048,1 --legacy-mem -l 4,6 -w 0000:3d:01.0 -- --buffer-sz 64,128,256,512,1024,2048 --optype cipher-then-auth --ptest throughput --auth-key-sz 64 --cipher-key-sz 16 --cipher-iv-sz 16 --auth-op generate --burst-sz 32 --total-ops 30000000 --silent --digest-sz 20 --auth-algo sha1-hmac --cipher-algo aes-cbc --cipher-op encrypt --devtype crypto_qat
软件:./dpdk-test-crypto-perf --socket-mem 2048,1 --legacy-mem -l 4,6 --vdev crypto_aesni_mb_pmd_1 -a 0000:00:00.0 -- --buffer-sz 64,128,256,512,1024,2048 --optype cipher-then-auth --ptest throughput --auth-key-sz 64 --cipher-key-sz 16 --cipher-iv-sz 16 --auth-op generate --burst-sz 32 --total-ops 30000000 --silent --digest-sz 20 --auth-algo sha1-hmac --cipher-algo aes-cbc --cipher-op encrypt --devtype crypto_aesni_mb
对于 Xeon (3.1Ghz) 上的 64B,我们能够获得 3.2Gbps,而带有 SW 的 corei7 (5Ghz) 能够获得 4.2Gbps。 Xeon 上的 2048B HW 能够达到 50Gbps,而 SW 为 19.2Gbps。
注意:在 Xeon 中有入队和出队的下降,可以通过平台和 BIOS 设置进一步减少。