海光加解密指令不足硬件来补

 Cryptographic Co-Processor(CCP)

      在《海光处理器与AMD Zen1的指令差异-CSDN博客》 中,发现海光缺少AES、pclmulqdq、sha_ni指令集,加解密的性能先天不足。例如通过命令行使用 OpenSSL 的 EVP 接口来加速 AES 加密,可以使用 openssl enc 命令,并指定所需的 AES 加密算法。以下是一个示例命令:

​​​​​​​openssl enc -aes-256-cbc -in plaintext.txt -out encrypted.bin -pass pass:yourpassword -engine aesni

在这个命令中:

  • -aes-256-cbc 指定使用 AES-256-CBC 加密。
  • -in 和 -out 分别指定输入和输出文件。
  • -pass 用于指定密码。
  • -engine aesni(如果可用)指明使用 AES-NI 加速。

        上述openssl调用AES指令的方式,在海光上是不行的。指令不足,硬件来补,海光内置了硬件引擎CCP来加速加解密。

        CCP即Cryptographic Co-Processor (CCP)不是海光发明的,也是来自于AMD,类似于Intel的QAT(Intel QuickAssist Technology)。例如DPDK支持AMD CCP: 7. AMD CCP Poll Mode Driver — Data Plane Development Kit 24.11.0-rc0 documentation (dpdk.org)

        Hygon CPU芯片中包含两类CCP协处理器,一类为PSP CCP(Platform Secure Processor and Cryptographic Co-Processor),一类为NTB CCP(Cryptographic Co-Processor)。

内核驱动是否支持CCP

        有了加解密的硬件,Linux内核是否支持?关注一下Linux kernel及国产openEuler和OpenAnolis。

  • upstrem Linux kernel

截止当前,在upstream社区最新的Linux kernel 6.11,驱动drivers/crypto/ccp并没有包含对Hygon CCP的支持:

sp-pci.c « ccp « crypto « drivers - kernel/git/torvalds/linux.git - Linux kernel source tree

drivers/crypto/ccp/sp-pci.c:

static const struct pci_device_id sp_pci_table[] = {
	{ PCI_VDEVICE(AMD, 0x1537), (kernel_ulong_t)&dev_vdata[0] },
	{ PCI_VDEVICE(AMD, 0x1456), (kernel_ulong_t)&dev_vdata[1] },
	{ PCI_VDEVICE(AMD, 0x1468), (kernel_ulong_t)&dev_vdata[2] },
	{ PCI_VDEVICE(AMD, 0x1486), (kernel_ulong_t)&dev_vdata[3] },
	{ PCI_VDEVICE(AMD, 0x15DF), (kernel_ulong_t)&dev_vdata[4] },
	{ PCI_VDEVICE(AMD, 0x14CA), (kernel_ulong_t)&dev_vdata[5] },
	{ PCI_VDEVICE(AMD, 0x15C7), (kernel_ulong_t)&dev_vdata[6] },
	{ PCI_VDEVICE(AMD, 0x1649), (kernel_ulong_t)&dev_vdata[6] },
	{ PCI_VDEVICE(AMD, 0x17E0), (kernel_ulong_t)&dev_vdata[7] },
	{ PCI_VDEVICE(AMD, 0x156E), (kernel_ulong_t)&dev_vdata[8] },
	/* Last entry must be zero */
	{ 0, }
};
MODULE_DEVICE_TABLE(pci, sp_pci_table);
  • openEuler

openEuler的最新的版本是openEuler 24.03 LTS ,是基于6.6内核的长周期版本。从openEuler Long-term support Kernel OLK-6.6 分支,已经看到了对Hygon的支持:

drivers/crypto/ccp/sp-pci.c · openEuler/kernel - 码云 - 开源中国 (gitee.com)

static const struct pci_device_id sp_pci_table[] = {
	{ PCI_VDEVICE(AMD, 0x1537), (kernel_ulong_t)&dev_vdata[0] },
	{ PCI_VDEVICE(AMD, 0x1456), (kernel_ulong_t)&dev_vdata[1] },
	{ PCI_VDEVICE(AMD, 0x1468), (kernel_ulong_t)&dev_vdata[2] },
	{ PCI_VDEVICE(AMD, 0x1486), (kernel_ulong_t)&dev_vdata[3] },
	{ PCI_VDEVICE(AMD, 0x15DF), (kernel_ulong_t)&dev_vdata[4] },
	{ PCI_VDEVICE(AMD, 0x14CA), (kernel_ulong_t)&dev_vdata[5] },
	{ PCI_VDEVICE(AMD, 0x15C7), (kernel_ulong_t)&dev_vdata[6] },
	{ PCI_VDEVICE(AMD, 0x1649), (kernel_ulong_t)&dev_vdata[6] },
	{ PCI_VDEVICE(AMD, 0x17E0), (kernel_ulong_t)&dev_vdata[7] },
	{ PCI_VDEVICE(AMD, 0x156E), (kernel_ulong_t)&dev_vdata[8] },
	{ PCI_VDEVICE(HYGON, 0x1456), (kernel_ulong_t)&hygon_dev_vdata[0] },
	{ PCI_VDEVICE(HYGON, 0x1468), (kernel_ulong_t)&hygon_dev_vdata[1] },
	{ PCI_VDEVICE(HYGON, 0x1486), (kernel_ulong_t)&hygon_dev_vdata[2] },
	{ PCI_VDEVICE(HYGON, 0x14b8), (kernel_ulong_t)&hygon_dev_vdata[1] },
	{ PCI_VDEVICE(HYGON, 0x14a6), (kernel_ulong_t)&hygon_dev_vdata[2] },
	/* Last entry must be zero */
	{ 0, }
};
MODULE_DEVICE_TABLE(pci, sp_pci_table);
  •  OpenAnolis

龙蜥操作系统 Anolis OS 23 是 OpenAnolis 龙蜥社区基于操作系统分层分类理论,面向上游原生社区独立选型,拉齐软硬件兼容性软件包的首款国产操作系统。当前 Anolis OS 23 最新的版本号为 Anolis OS 23.1(GA)。Anolis OS 23.1 现提供 5.10/6.6 两种内核可供使用,6.6 为默认内核,ISO 中默认只携带 6.6 版本内核.

在6.6内核分支中,可以看到对Hygon CCP的支持:

static const struct pci_device_id sp_pci_table[] = {
	{ PCI_VDEVICE(AMD, 0x1537), (kernel_ulong_t)&dev_vdata[0] },
	{ PCI_VDEVICE(AMD, 0x1456), (kernel_ulong_t)&dev_vdata[1] },
	{ PCI_VDEVICE(AMD, 0x1468), (kernel_ulong_t)&dev_vdata[2] },
	{ PCI_VDEVICE(AMD, 0x1486), (kernel_ulong_t)&dev_vdata[3] },
	{ PCI_VDEVICE(AMD, 0x15DF), (kernel_ulong_t)&dev_vdata[4] },
	{ PCI_VDEVICE(AMD, 0x14CA), (kernel_ulong_t)&dev_vdata[5] },
	{ PCI_VDEVICE(AMD, 0x15C7), (kernel_ulong_t)&dev_vdata[6] },
	{ PCI_VDEVICE(AMD, 0x1649), (kernel_ulong_t)&dev_vdata[6] },
	{ PCI_VDEVICE(AMD, 0x17E0), (kernel_ulong_t)&dev_vdata[7] },
	{ PCI_VDEVICE(AMD, 0x156E), (kernel_ulong_t)&dev_vdata[8] },
	{ PCI_VDEVICE(HYGON, 0x1456), (kernel_ulong_t)&dev_vdata[9] },
	{ PCI_VDEVICE(HYGON, 0x1468), (kernel_ulong_t)&dev_vdata[10] },
	{ PCI_VDEVICE(HYGON, 0x1486), (kernel_ulong_t)&dev_vdata[11] },
	{ PCI_VDEVICE(HYGON, 0x14b8), (kernel_ulong_t)&dev_vdata[10] },
	{ PCI_VDEVICE(HYGON, 0x14a6), (kernel_ulong_t)&dev_vdata[11] },
	/* Last entry must be zero */
	{ 0, }
};
MODULE_DEVICE_TABLE(pci, sp_pci_table);

海光专属:密码算法加速软件开发套件HCT

        在OpenAnolis龙蜥操作系统社区,找到了一篇文章。重点是可以和openssl对接,这样原来的应用程序只要保持和openssl的兼容即可,基本不需要改动。

        HCT通过 openssl 标准接口(EVP)向应用提供接口,使用HCT套件时,通过e=ENGINE_by_id("hct")选择密码引擎为hct,然后直接通过openssl标准(EVP)接口即可完成对HCT密码计算套件的调用。

参考:

1-HCT用户手册 - OpenAnolis龙蜥操作系统开源社区

[OLK-6.6] Support PSPCCP/NTBCCP identification for Hygon 2th and 3th CPU · Pull Request !5212 · openEuler/kernel - Gitee.com

感谢大家点赞关注收藏! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值