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

 Cryptographic Co-Processor(CCP)

      在《海光处理器与AMD Zen1的指令差异-优快云博客》 中,发现海光缺少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

感谢大家点赞关注收藏! 

### 海光硬件平台概述 海光硬件平台主要由一系列高性能处理器及其配套工具组成,旨在提供强大的计算能力支持各种应用场景。对于想要深入了解或使用该平台的开发者而言,获取相关文档和支持资料至关重要。 #### 获取官方文档与教程 为了获得最权威的息和技术指导,建议访问光合开发者社区网站 (https://developer.hpccube.com/)。在此平台上不仅能够找到详细的开发指南、技术白皮书以及最佳实践案例,还可以通过特定路径下载所需的工具包和参考资料[^1]。 具体来说: - **资源下载中心**:进入首页后导航至“资源下载中心”,这里集中了各类软硬件产品的最新版本发布。 - **DCU Toolkit (DTK)**:在上述板块下定位到“DCU Toolkit”部分,根据个人需求挑选合适的DTK版本并完成下载操作。此工具集专为优化应用程序性能而设计,特别适用于基于海光CPU的工作负载环境。 #### 安装过程简介 虽然针对不同操作系统可能有不同的安装流程,但一般情况下会遵循如下原则来部署海光硬件平台上的应用软件: 1. 确认目标机器已正确安装对应的操作系统镜像文件;如果是Linux发行版,则可参照类似统一操作系统(UOS)[^3]或其他主流Linux系统的安装方法进行初步设置。 2. 对于某些特殊库依赖项或者编译器配置等问题,在准备阶段应当仔细阅读随附的手册说明,确保所有前置条件均已满足。 3. 利用命令行界面执行解压、复制等常规动作将所下载下来的压缩包放置到指定目录内,并按照提示逐步推进后续环节直至整个程序框架搭建完毕。 4. 验证安装成果的有效性——启动测试实例验证新集成组件能否正常运作,比如运行简单的C/C++源码片段检验编译链接机制是否通畅无阻。 ```bash gcc hello_world.c -o hello_world ./hello_world ``` #### 使用入门指引 当一切准备工作就绪以后,便可以着手探索更多高级特性和功能模块了。例如学习如何利用MIGraphX加速图形处理任务时遇到的概念定义[^2],或是掌握建复杂物理仿真场景所需要的参数设定技巧[^4]。这些都将有助于充分发挥出海光硬件平台的优势特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值