使用英特尔 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。以下是变化的原因

  1. QAT HW 加密是在 Xeon cascade lake 核心上完成的
  2. SW Crypto 在第 11 代 corei7 平台上 运行
  3. corei7 上的核心时钟在涡轮增压下高达 5Ghz
  4. HW 加密是 运行,具有来自远程 NUMACPU 个内核
  5. HW 加密仅限于内存控制器与 -n 4
  6. 一起使用
  7. HW 加密 运行 总共 30000000,SW 加密 运行 总共 10000000
  8. HW 加密设备是 3,但传递的 lcores 是 5,导致 2 个 lcores 共享相同的硬件。
  9. 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 设置进一步减少。