From: JiangShui Yang <yangjiangshui(a)h-partners.com>
Added the accelerator WayCa SIG document.
Signed-off-by: JiangShui Yang <yangjiangshui(a)h-partners.com>
---
.../openEuler-WayCa-SIG-加速器介绍.md | 462 ++++++++++++++++++
1 file changed, 462 insertions(+)
create mode 100644 WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/openEuler-WayCa-SIG-加速器介绍.md
diff --git a/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/openEuler-WayCa-SIG-加速器介绍.md b/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/openEuler-WayCa-SIG-加速器介绍.md
new file mode 100644
index 0000000..9e2c0da
--- /dev/null
+++ b/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/openEuler-WayCa-SIG-加速器介绍.md
@@ -0,0 +1,462 @@
+# openEuler WayCa SIG 加速器介绍
+
+* 加速器模块包含基于CRYPTO、HWRNG、UACCE、UADK框架实现的支持鲲鹏加速器设备的内核态与用户态驱动。加速器模块包括5个子模块,分别为队列管理模块QM、高性能RSA计算引擎HPRE、硬件安全加速引擎SEC、压缩算法加速引擎ZIP、真随机数产生器TRNG模块。QM是为了统一加速器设备和软件之间的接口,采用统一的队列管理模块QM来和软件进行交互。加速器HPRE、SEC、ZIP设备都集成QM模块。HPRE模块支持RSA/DH/ECDH/X25519/X448/ECDSA/SM2算法,ZIP模块支持gzip/zlib/deflate/lz77_zstd算法,SEC模块支持AEAD/SKCIPHER/DIGEST算法,TRNG模块支持获取随机数。加速器驱动代码已上传到linux和linaro社区。
+
+## ACC 模块介绍
+
+* ACC模块是加速器内核态硬件驱动,内核态驱动主要实现加速器设备虚拟化(SRIOV)、限流、DFX信息查询、crypto内核态硬件算法、虚拟化热迁移、RAS硬件错误处理、FLR复位、低功耗等这几大特性。
+
+### 一、内核态驱动使能
+
+#### 源码获取路径
+
+* linux kernel 仓库:<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git>
+* openeuler 仓库:<https://gitee.com/openeuler/kernel.git>
+* 源码目录:drivers/crypto/hisilicon/
+
+#### 内核配置
+
+* 加速器模块,内核态驱动涉及的config选项有:
+
+ * CONFIG_CRYPTO_DEV_HISI_QM=m hisi_qm.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_ZIP=m hisi_zip.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_HPRE=m hisi_hpre.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_SEC2=m hisi_sec2.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_TRNG=m hisi-trng-v2.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_MIGRATION=m hisi_migration.ko编译配置选项
+ CONFIG_UACCE=m uacce.ko编译配置选项,该模块用于支持用户态驱动,如果不使能加速器仅支持内核态驱动
+
+* 虚拟化热迁移依赖的内核config选项有:
+
+ * CONFIG_VFIO=m vfio.ko编译配置选项
+ CONFIG_VFIO_PCI=m vfio_pci.ko编译配置选项
+
+ 此外加速器内核态算法的实现依赖于内核crypto子系统。
+
+#### 模块依赖及参数配置指导
+
+* 当用户态驱动依赖的config项CONFIG_UACCE未配置时,ZIP、HPRE、SEC驱动支持内核态。hisi_qm模块为zip、sec、hpre三个加速器设备驱动提供内核态中间层接口,故这几个ko的依赖关系为:
+ * hisi_zip.ko《== hisi_qm.ko
+ * hisi_sec2.ko《== hisi_qm.ko
+ * hisi_hpre.ko《== hisi_qm.ko
+ * hisi-trng-v2.ko《== rng-core.ko
+* 加速器模块(SEC、ZIP、HPRE)参数如下表所示,模块参数的支持范围和配置策略会在配置说明中列出。加载驱动时模块参数没有先后顺序。加载驱动后,可以通过cat /sys/bus/pci/drivers/<driver>/module/parameters/ 来查询模块参数。模块参数在加载驱动后不支持更新。如zip驱动的加载(示例为不支持用户态的情况下):
+ * insmod hisi_zip.ko pf_q_num =16 vfs_num=1 sgl_sge_nr=16
+* 模块参数说明
+
+| 参数 | 参数范围 | 加载配置示例 | 配置说明 |
+| ---------- | :-------------------------------------- | ------------------------------------------------------------ | ------------------------ |
+| pf_q_num | 2~1024 SEC 默认为256 HPRE/ZIP 默认为64 | insmod hisi_zip.ko pf_q_num=16<br />insmod hisi_hpre.ko pf_q_num=16<br />insmod hisi_sec2.ko pf_q_num=16 | PF可用队列数 |
+| vfs_num | 0~63 默认值为0 | insmod hisi_zip.ko vfs_num=1<br />insmod hisi_hpre.ko vfs_num=1<br />insmod hisi_sec2.ko vfs_num=1 | 使能VF数 |
+| sgl_sge_nr | 1~225 默认值为10 | insmod hisi_zip.ko sgl_sge_nr=16 | 单个sgl的sge数量 (仅ZIP模块参数) |
+| ctx_q_num | 2~32,仅偶数默认值为2 | insmod hisi_sec2.ko ctx_q_num=16 | crypto tfm下的硬件队列数 |
+| uacce_mode | 0、1 默认值为0 | insmod hisi_zip.ko uacce_mode=1<br />insmod hisi_hpre.ko uacce_mode=1<br />insmod hisi_sec.ko <u>uacce_mode=1</u> | 用户态驱动开关 |
+
+### 二、ZIP SEC HPRE内核态特性
+
+#### 1、加速器支持SRIOV
+
+* 特性介绍
+
+ 加速器设备支持通过PCI驱动框架注册设备驱动,加速器设备支持PCI function的SRIOV功能实现设备虚拟化操作,并且支持通过驱动模块参数直接配置虚拟化设备VF的个数。
+
+ 用户通过vfs_num模块参数,可设置初始的vf数目,加载驱动模块后,每个加速器PF将产生对应数量的vf(不支持模块加载后再对该模块参数进行更新,且通过模块参数只能查询到初始配置的值)。同时,支持pci sysfs方式更新vf的个数,可用于更新对应PCI物理设备的vf数量,配置功能仅在PF,同时pf支持的算法业务、FLR、限流vf同样支持。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | 5ec302a364bf | crypto: hisilicon - add SRIOV support for HPRE | Y |
+ | 35ee280fb1fb | crypto: hisilicon - add vfs_num module parameter for hpre/sec | Y |
+ | 73bcb049a77 | crypto: hisilicon - add SRIOV for HiSilicon SEC | Y |
+ | 79e09f30eeba | crypto: hisilicon - add SRIOV support for ZIP | Y |
+ | 39977f4b51c | crypto: hisilicon - add vfs_num module param for zip | Y |
+
+
+
+* 示例
+
+ 用户也可以在加载驱动时直接通过模块参数vfs_num配置vf:
+
+ ~~~
+ modprobe hisi_zip vfs_num=1
+ ~~~
+
+ 模块加载之后支持pci sysfs方式跟新vf个数:
+
+ ~~~
+ echo 2 > /sys/devices/<pci_bus>/<pci_device>/<device>/sriov_numvfs
+ echo 2 > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.0/sriov_numvfs
+ ~~~
+
+#### 2、加速器支持限流功能
+
+* 特性介绍
+
+ HAC(HPRE/ZIP/SEC)加速器设备在支持虚拟化时,不同VF设备分配给不同的虚拟机VM,即不同的用户使用,考虑到加速器作为附加的硬件计算资源,需要以‘算力’为单位,每个VF的算力应该定量分配出去,让每个用户能够获得足够的计算资源,同时,让同一个加速器物理设备上的VF的‘算力’相互不受干扰,用户购买了多少算力,比如AES-CBC 20Gbps,那么就给可以用户配20Gbps算力。仅支持root权限用户可以配置算力,可对各个function(包括PF) 进行‘算力’大小查询与配置,VF用户只能查询,不能配置。
+
+ 用户可以在设备debugfs下面看到alg_qos文件节点,算力配置命令为echo bdf qos > alg_qos,以Hip09为例,用户知道aes-cbc满配是100Gbps,用户想要设置0000:39:00.1配置20Gbps,那么实际上输入为20%,则echo 0000:39:00.1 200 > alg_qos,如果想要配置0000:39:00.2,则echo 0000:76:00.2 200 > alg_qos ,zip支持压缩、解压缩,hpre支持ECC、RSA。sec支持加解密算法配置、qos表示流量比例。从1~1000, 表示0.1%~100.0%。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | 72b010dc33b9 | crypto: hisilicon/qm - supports writing QoS int the host | Y |
+ | cc0c40c613d2 | crypto: hisilicon/qm - add the "alg_qos" file node | Y |
+ | 362c50bad3a7 | crypto: hisilicon/qm - merges the work initialization process into a single function | Y |
+ | 2966d9d3078c | crypto: hisilicon/qm - add pf ping single vf function | Y |
+ | 3bbf0783636b | crypto: hisilicon/qm - supports to inquiry each function's QoS | Y |
+ | 3d2a429271bb | crypto: hisilicon/sec - adds the max shaper type rate | Y |
+
+
+
+* 示例
+
+ sec vf流量配置:
+
+ ~~~
+ modprobe hisi_sec2 vfs_num=2
+ echo 0000:39:00.1 200 > /sys/kernel/debug/hisi_sec2/0000:39:00.1/alg_qos
+ cat /sys/kernel/debug/hisi_sec2/0000:39:00.1/alg_qos
+ ~~~
+
+#### 3、加速器提供配置信息查询功能
+
+* 特性介绍
+
+ 支持通过DebugFS文件系统,查询当前设备的基本配置信息,错误信息和业务运行时的状态信息。
+
+ DebugFS能够查询到的信息:
+
+ * 首先是基本的状态查询,包含软件和硬件:QM状态查询功能,SQC/CQC配置信息,配置寄存器等信息。
+ * 其次,正常和异常下收发包数量统计。
+ * 另外包括临终遗言功能,复位前将异常变化的寄存器dump,这些寄存器复位后会被还原。
+ * 还包括提供寄存器一键比对check功能,快速发现前后变化的寄存器状态。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ---------------------------------------------------------- | ------------------------ |
+ | 72c7a68d2ea3 | crypto: hisilicon - add debugfs for ZIP and QM | Y |
+ | 8502652542c6 | crypto: hisilicon/qm - add debugfs for QM | Y |
+ | 0a3a3960210b | crypto: hisilicon/qm - add debugfs to the QM state machine | Y |
+ | c31dc9fe165d | crypto: hisilicon/qm - add DebugFS for xQC and xQE dump | Y |
+ | 848974151618 | crypto: hisilicon - Add debugfs for HPRE | Y |
+ | 1e9bc276f | crypto: hisilicon - add DebugFS for HiSilicon SEC | Y |
+
+
+
+* 示例
+
+ 查看zip设备qm dfx:
+
+ ~~~
+ cat /sys/kernel/debug/hisi_zip/0000:31:00.0/qm/regs 查看qm相关寄存器
+ cat /sys/kernel/debug/hisi_zip/0000:31:00.0/comp_core0/regs 查看算法核相关寄存器
+ ~~~
+
+ 更多更详细DFX功能可查看加速器DFX手册。
+
+#### 4、加速器内核态基本算法加速功能
+
+* 特性介绍
+
+ linux内核加/解密和压缩/算法有内核crypto子系统承载,crypto子系统支持内核态算法扩展及替换。加速器内核态驱动在模块初始化阶段将加速器硬算算法接口注册到crypto子系统中,通过crypto相关算法的接口可以调用加速器设备。
+
+ 查看加速器驱动支持的算法
+
+ ~~~
+ cat /proc/crypto | grep -B 4 -A 8 hisi_sec2 //查看sec设备支持的算法
+ cat /proc/crypto | grep -B 4 -A 8 hisi_hpre //查看hpre设备支持的算法
+ cat /proc/crypto | grep -B 4 -A 8 hisi_zip //查看zip设备支持的算法
+ ~~~
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | 62c455ca853e | crypto: hisilicon - add HiSilicon ZIP accelerator support | Y |
+ | 7b44c0eecd6a | crypto: hisilicon/sec - add new skcipher mode for SEC | Y |
+ | 2f072d75d1ab | crypto: hisilicon - Add aead support on SEC2 | Y |
+ | c16a70c1f253 | crypto: hisilicon/sec - add new algorithm mode for AEAD | Y |
+ | 6c46a3297bea | crypto: hisilicon/sec - add fallback tfm supporting for aeads | Y |
+ | c8b4b477079d | crypto: hisilicon - add HiSilicon HPRE accelerator | Y |
+ | fbc75d03fda0 | crypto: hisilicon/hpre - enable Elliptic curve cryptography | Y |
+ | 05e7b906aa7c | crypto: hisilicon/hpre - add 'ECDH' algorithm | Y |
+ | b981f7990e1a | crypto: hisilicon/hpre - register ecdh NIST P384 | Y |
+ | 90274769cf79 | crypto: hisilicon/hpre - add 'CURVE25519' algorithm | Y |
+ | 3e90efd12959 | hwrng: hisi - add HiSilicon TRNG driver support | Y |
+ | 6e57871c3b75 | crypto: hisilicon/trng - add version to adapt new algorithm | Y |
+
+* zlib、gzip算法调用
+
+ 加载hisi_zip.ko后,通过crypto子系统acomp接口实现压缩解压缩功能。
+
+ 接口路径:<linux/include/crypto/acompress.h>
+
+* DH算法调用
+
+ 加载hisi_hpre.ko后,通过crypto子系统KPP接口实现密钥协商功能。
+
+ 接口路径:<linux/include/crypto/kpp.h>
+
+ 规格限制:HPRE硬件设备支持DH算法规格如下表。
+
+ DH group1/2/5/14/15/16模幂长度
+
+ | group | 模值(bits) |
+ | ------- | ---------- |
+ | group1 | 768 |
+ | group2 | 1024 |
+ | group5 | 1536 |
+ | group14 | 2048 |
+ | group15 | 3072 |
+ | group16 | 4096 |
+
+* RSA算法调用
+
+ 加载hisi_hpre.ko后,通过crypto子系统AKCIPHER接口实现加解密与签名功能。
+
+ 接口路径:<linux/include/crypto/akcipher.h>
+
+ 规格限制:HPRE硬件设备支持RSA算法规格如下表。
+
+ RSA密钥位宽
+
+ | 模式 | 密钥位宽(bits) |
+ | ---- | ---------------------- |
+ | 标准 | 1024、2048、3072、4096 |
+ | CRT | 1024、2048、3072、4096 |
+
+* ECDH算法调用
+
+ 加载hisi_hpre.ko后,通过crypto子系统KPP和ECDH接口实现基于椭圆曲线的密钥协商功能。
+
+ 接口路径:<linux/include/crypto/kpp.h>
+
+ < linux/include/crypto/ecdh.h>
+
+ 规格限制:HPRE硬件设备支持ECDH算法的椭圆曲线规格如下表所示。
+
+ ECDH椭圆曲线规格
+
+ | 曲线名称 | 密钥位宽(bits) |
+ | ------------------- | -------------- |
+ | ECC_CURVE_NIST_P192 | 192 |
+ | ECC_CURVE_NIST_P224 | 224 |
+ | ECC_CURVE_NIST_P256 | 256 |
+ | ECC_CURVE_NIST_P384 | 384 |
+ | ECC_CURVE_NIST_P521 | 521 |
+
+* X25519算法调用
+
+ 加载hisi_hpre.ko后,通过crypto子系统CURVE25519接口实现基于椭圆曲线curve25519的密钥协商功能。
+
+ 接口路径:<linux/include/crypto/curve25519.h>
+
+ 规格限制:HPRE硬件设备支持X25519算法的椭圆曲线规格如下表所示。
+
+ X25519椭圆曲线规格
+
+ | 曲线名称 | 密钥位宽(bits) |
+ | ---------- | -------------- |
+ | Curve25519 | 256 |
+
+* SKCIPHER算法调用
+
+ 加载hisi_sec2.ko后,通过crypto子系统SKCIPHER接口实现加解密功能。
+
+ 接口路径:<linux/include/crypto/skcipher.h>
+
+ 规格限制:SEC硬件设备支持SKCIPHER算法规格如下表。
+
+ SKCIPHER算法规格
+
+ | SKCIPHER算法名称 | 设置key长(bits) |
+ | ---------------- | --------------- |
+ | ecb(aes) | 128、192、256 |
+ | cbc(aes) | 128、192、256 |
+ | xts(aes) | 256、512 |
+ | ecb(des3_ede) | 192 |
+ | cbc(des3_ede) | 192 |
+ | cbc(sm4) | 128 |
+ | xts(sm4) | 256 |
+
+* AEAD算法调用
+
+ 加载hisi_sec2.ko后,通过crypto子系统AEAD接口实现加解密功能。
+
+ 接口路径:<linux/include/crypto/aead.h>
+
+ 规格限制:SEC硬件设备支持AEAD算法规格如下表。
+
+ AEAD算法规格
+
+ | AEAD算法名称 | 设置key长(bits) | 设置author key长(bits) | Author长度(bits) |
+ | ------------------------------ | --------------- | ---------------------- | ---------------- |
+ | authenc(hmac(sha1),cbc(aes)) | 128、192、256 | 0~512 | 1~160 |
+ | authenc(hmac(sha256),cbc(aes)) | 128、192、256 | 0~512 | 1~256 |
+ | authenc(hmac(sha512),cbc(aes)) | 128、192、256 | 0~1024 | 1~512 |
+
+* drbg算法调用
+
+ 加载hisi-trng-v2.ko后,通过crypto子系统drbg接口实现获取随机数功能。
+
+ 接口路径:<linux/include/crypto/drbg.h>
+
+ 规格限制:只支持seed大小为384bits,最大获取随机数长度为4095*128bits。
+
+* 真随机数获取
+
+ 加载hisi-trng-v2.ko后,支持通过/dev/hwrng获取TRNG设备产生的真随机数。用户从/dev/random中获取的随机数有部分是TRNG设备产生的真随机数
+
+#### 5、加速器支持热迁移功能
+
+* 特性介绍
+
+ 加速器热迁移主要配合KVM-QEMU完成直通加速器VF设备的VM和VM之间的动态热迁移,在热迁移的过程中保证业务的不中断和用户不感知。因为openeuler是5.10的内核,没有合入linux主线最新的热迁移框架,当前openeuler使用的是V1版的热迁移(祥见下面patch)适配qemu 6.2.0到8.0之间的版本,qemu 8.x的版本已经不在支持V1版的热迁移。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ----------------------------------------------------------- | ------------------------ |
+ | a0464f0b70f9 | vfio/hisilicon: add acc live migration driver | Y |
+ | e073afaff8c1 | crypto: hisilicon/qm - support the userspace task resetting | Y |
+
+* 示例
+
+ zip热迁移:
+
+ ~~~
+ modprobe hisi_zip
+ 创建vf:
+ echo 0 > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.0/sriov_numvfs
+ echo 2 > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.0/sriov_numvfs
+
+ 绑定vfio:
+ echo 0000:31:00.1 > /sys/bus/pci/drivers/hisi_zip/unbind
+ echo vfio-pci > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.1/driver_override
+ echo 0000:31:00.1 > /sys/bus/pci/drivers_probe
+
+ echo 0000:31:00.2 > /sys/bus/pci/drivers/hisi_zip/unbind
+ echo vfio-pci > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.2/driver_override
+ echo 0000:31:00.2 > /sys/bus/pci/drivers_probe
+
+ 启动迁出端:
+ qemu-system-aarch64 -machine virt,gic-version=3 -enable-kvm -cpu host -m 2G -smp 1 \
+ -kernel /home/Image -initrd /home/shan/minifs.cpio.gz -nographic \
+ -append "rdinit=init console=ttyAMA0 earlycon=pl011,0x9000000 kpti=off cma=2G" \
+ -device vfio-pci,host=31:00.1,x-enable-migration=true,x-pre-copy-dirty-page-tracking=off \
+ -monitor stdio -serial telnet:0.0.0.0:1111,server,nowait -net none
+
+ 启动迁入端:
+ qemu-system-aarch64 -machine virt,gic-version=3 -enable-kvm -cpu host -m 2G -smp 1 \
+ -kernel /home/Image -initrd /home/shan/minifs.cpio.gz -nographic \
+ -append "rdinit=init console=ttyAMA0 earlycon=pl011,0x9000000 kpti=off cma=2G" \
+ -device vfio-pci,host=31:00.2,x-enable-migration=true,x-pre-copy-dirty-page-tracking=off \
+ -monitor stdio -serial telnet:0.0.0.0:2222,server,nowait -net none -incoming tcp:0:6666
+
+ 迁出端vm加载加速器驱动:
+ insmod hisi_zip.ko (可跑加速器业务,目前openEuler VM仅支持内核态业务)
+
+ host迁出端控制台启动迁移:
+ migrate tcp:0.0.0.0:6666
+ ~~~
+
+#### 6、加速器支持RAS复位特性
+
+* 特性介绍
+
+ Reliability—可靠性 、Availability—可用性、Serviceability—可服务性简称RAS,RAS是用于保障HAC设备的可靠性,即当HAC出现硬件错误时,尽最大可能不影响业务连续性与正确性。加速器RAS特性主要包括设备停流、缓存现场、复位、恢复业务。当加速器设备发生硬件错误时会触发RAS中断,在保证用户(UADK接口或者内核Crypto接口的调用者)业务连续性和正确性的前提下,中断处理程序完成对硬件错误的纠正。
+
+* 使涉及代码与能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | b67202e8ed30 | crypto: hisilicon/qm - add state machine for QM | Y |
+ | dbdc1ec31fc0 | crypto: hisilicon - add device error report through abnormal irq | Y |
+ | 6c6dd5802c2d | crypto: hisilicon/qm - add controller reset interface | Y |
+ | 1f5c9f34f0cc | crypto: hisilicon/hpre - add controller reset support for HPRE | Y |
+ | c4aab24448a3 | crypto: hisilicon - enable new error types for QM | Y |
+ | ed278023708b | crypto: hisilicon/hpre - add two RAS correctable errors processing | Y |
+ | 141876c252a4 | crypto: hisilicon/sec2 - add controller reset support for SEC2 | Y |
+ | 1db0016e0d22 | crypto: hisilicon/qm - do not reset hardware when CE happens | Y |
+
+
+#### 7、加速器支持FLR复位功能
+
+* 特性介绍
+
+ 加速器设备支持通过PCI驱动框架注册设备驱动,提供基于PCI设备的FLR复位功能,完成Function级别的复位,同时实现软件和硬件恢复到初始化的状态,在复位场景下,保证业务流合理停止处理(合理停止:停流时用户会被通知,用户对未完成的任务进行相应处理,用户可以选择,在复位完成后,基于初始状态的function设备继续进行业务,或也可以直接退出业务处理,其中用户是指UADK接口或者内核Crypto接口的调用者)
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | 7ce396fa12a9 | crypto: hisilicon - add FLR support | Y |
+ | 38cd3968bf28 | crypto: hisilicon/qm - adjust reset interface | Y |
+ | 7ed83901326f | crypto: hisilicon/qm - add stop queue by hardware | Y |
+ | e3ac4d20e936 | crypto: hisilicon/qm - enable PF and VFs communication | Y |
+ | 3cd53a27c2fc | crypto: hisilicon/qm - add callback to support communication | Y |
+ | 760fe22cf5e9 | crypto: hisilicon/qm - update reset flow | Y |
+
+* 示例
+
+ ~~~
+ zip pf reset:
+ echo 1 > /sys/bus/pci/devices/0000:31:00.0/reset
+
+ zip vf reset:
+ echo 1 > /sys/bus/pci/devices/0000:31:00.1/reset
+ ~~~
+
+#### 8、加速器设备支持低功耗特性
+
+* 对于加速器设备,硬件上支持对单个PF设备进行电源的打开与关闭。用户可以通过Device SysFS(/sys/devices/.../power/control)对单个PF设备进行低功耗控制配置,如果使能‘auto’策略,设备将在被使用时(内核与用户态应用在调用Crypto或Warpdrive接口获取硬件资源)自动进入运行状态,如果使能了‘on’策略,那么该设备就一直处于运作状态,不进行任何功耗控制。由于PCIE协议要求在D3cold电源状态下VF不应该使能起来,因此在使能VF时不进入下电状态,此时依赖芯片本身支持的clock-gating来降低功耗。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | d7ea53395b72 | crypto: hisilicon - add runtime PM ops | Y |
+ | 607c191b371d | crypto: hisilicon - support runtime PM for accelerator device | Y |
+ | ed5fa39fa8a6 | crypto: hisilicon - enable zip device clock gating | Y |
+ | 3d845d497b23 | crypto: hisilicon - enable sec device clock gating | Y |
+ | ea5202dff79c | crypto: hisilicon - enable hpre device clock gating | Y |
+
+* 示例
+
+ zip设备配置低功耗策略
+
+ ~~~
+ cat /sys/bus/pci/devices/0000:31:00.1/power/runtime_status
+ echo auto > /sys/bus/pci/devices/0000:31:00.1/power/control
+ cat /sys/bus/pci/devices/0000:31:00.1/power/runtime_status
+ ~~~
+
+#### 9、支持获取硬件随机数特性
+
+* 特性介绍
+
+ 芯片TRNG模块提供硬件随机数算法,内核TRNG驱动(drivers/crypto/hisilicon/trng)提供Crypto RNG算法,往Kernel Crypto子系统进行注册,同时注册TRNG真随机数设备驱动到HWRANDOM子系统。这样,通过内核CRYPTO RNG接口与/dev/random接口可分别使用芯片TRNG所提供的DRBG与TRNG真随机数。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ----------------------------------------------------------- | ------------------------ |
+ | 3e90efd12959 | hwrng: hisi - add HiSilicon TRNG driver support | Y |
+ | 6e57871c3b75 | crypto: hisilicon/trng - add version to adapt new algorithm | Y |
+
+
+
+* 示例
+
+ ~~~
+ cat /dev/hwrng
+ cat /dev/random
+ ~~~
+
+
+
+## UADK 模块介绍
+* 详情可以参考UADK用户手册 https://gitee.com/openeuler/uadk/wikis/%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3…
--
2.30.0
1
0
From: JiangShui Yang <yangjiangshui(a)h-partners.com>
---
...g-加速器-xxx技术用户使用指南.md | 39 --
...Kunpeng-加速器-xxx模块特性介绍.md | 38 --
.../openEuler-WayCa-SIG-加速器介绍.md | 462 ++++++++++++++++++
3 files changed, 462 insertions(+), 77 deletions(-)
delete mode 100644 WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/Wayca-Kunpeng-加速器-xxx技术用户使用指南.md
delete mode 100644 WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/Wayca-Kunpeng-加速器-xxx模块特性介绍.md
create mode 100644 WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/openEuler-WayCa-SIG-加速器介绍.md
diff --git a/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/Wayca-Kunpeng-加速器-xxx技术用户使用指南.md b/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/Wayca-Kunpeng-加速器-xxx技术用户使用指南.md
deleted file mode 100644
index 1a3e151..0000000
--- a/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/Wayca-Kunpeng-加速器-xxx技术用户使用指南.md
+++ /dev/null
@@ -1,39 +0,0 @@
-
-# openEuler WayCa 鲲鹏xxx xxx用户使用指南
-
-## 使用场景
-
-- 存储、ceph、待探索 (NA或介绍各场景收益及使用特性)
-
-## 硬件环境
-- 鲲鹏920
-- 固件依赖需求可按照实际情况补齐 bmc cpld bios 最低版本要求。
-
-## 软件版本
-
-- openEuler 22.03 lts
-- openEuler 22.03 lts SP1
-
-## 安装使用
-
-- 1)安装openEuler系统
--- 详见安装指导
-- 2)本地ISO 源配置
--- 挂载BMC iso
--- mount xxx
--- 修改 sourcelist
--- rpm update
-- 3)安装dpdk软件包
--- rpm install xxx
--- xxx -v
-- 4)基本功能测试
--- testpm xxx
--- xxx效果
-备注:保证功能可用
-
-## 交流答疑
-
-- https://gitee.com/openeuler/wayca/issue
-提单title 标识: 【Way-Kunpeng-高速网络-dpdk】
-
-备注:用于交流基本使用、特性、场景、需求和问题答疑等。
\ No newline at end of file
diff --git a/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/Wayca-Kunpeng-加速器-xxx模块特性介绍.md b/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/Wayca-Kunpeng-加速器-xxx模块特性介绍.md
deleted file mode 100644
index c4cf2a1..0000000
--- a/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/Wayca-Kunpeng-加速器-xxx模块特性介绍.md
+++ /dev/null
@@ -1,38 +0,0 @@
-
-# openEuler WayCa 鲲鹏xxx xxx模块介绍
-
-## xxx功能描述
-
-xxx 全称为 Data Plane Development Kit,是 Intel 提供的一套用户态库,为用户在多个平台提供一套高速处理数据报文的编程接口,为通信领域,云数据中心等网络或存储应用场景提供高性能加速。
-DPDK加强了对 ARM64 的支持,集成了 hns3 PMD 驱动,完整支持鲲鹏芯片网口特性。鲲鹏芯片板载网口配套 hns3 PMD 支持 10G、25G、100G 等速率,支持单播、多播、广播、混杂等网口基本特性,支持 VLAN、流表、TSO、GRO 等高级特性,并利用 NEON 指令实现数据面高速转
-原生 DPDK 以轮询代替中断,避免上下文切换开销,并利用多核实现并行 IO,通过旁路内核实现零拷贝,实现用户态
-高速转发能力。
-DPDK 在鲲鹏网卡支持关键特性如下:
-• 支持 SRIOV:DPDK 可使用多个 VF 进行业务处理,充分挖掘设备在 VM 或容器场景下的扩展能力。
-• 支持单播、多播、广播、混杂等网络特性。
-• 支持 RSS:支持使用网卡多队列,实现多处理器系统下使接收报文在多个 CPU 之间高效分发,增加 cache 命中率,
-提高收发速率。
-• 支持 VLAN:支持 VLAN 过滤,VLAN 添加删除,VLAN 剥离等功能。
-• 支持流表:支持流规则设置,根据报文元组等信息进行数据流路由到指定队列。
-• 支持 checksum 卸载:卸载 checksum 校验、计算到网卡,释放 CPU 能力,提高转发速率。
-• 支持 TSO、GRO 卸载:支持报文 TCP 分片、聚合卸载到网卡,降低 CPU 负载,加快报文处理速率。
-• 支持 SIMD 向量指令处理:利用 NEON 指令高效处理网卡收发报文,提高报文处理速率。
-• 支持 bonding: 支持网口聚合功能,提高带宽能力,增大冗余能力。
-• 支持 dfx 维护:提供设备各功能状态查询、报文统计查询,提供在线定位能力。
-
-## 特性详解
-
-### 特性1:支持 SRIOV:DPDK 可使用多个 VF 进行业务处理,充分挖掘设备在 VM 或容器场景下的扩展能力。
-- 特性详解
-描述特性1。
-- 支持版本: openEuler 22.03 lts
-
-### 特性2:支持 RSS:支持使用网卡多队列,实现多处理器系统下使接收报文在多个 CPU 之间高效分发,增加 cache 命中率,提高收发速率。
-- 特性详解
-描述特性2。
-- 支持版本: openEuler 22.03 lts openEuler 22.03 lts SP1
-
-### 特性XX:支持 RSS:支持使用网卡多队列,实现多处理器系统下使接收报文在多个 CPU 之间高效分发,增加 cache 命中率,提高收发速率。
-- 特性详解
-描述特性X。
-- 支持版本: openEuler 22.03 lts openEuler 22.03 lts SP1
\ No newline at end of file
diff --git a/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/openEuler-WayCa-SIG-加速器介绍.md b/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/openEuler-WayCa-SIG-加速器介绍.md
new file mode 100644
index 0000000..62b4538
--- /dev/null
+++ b/WayCa-Kunpeng-底软/Wayca-Kunpeng-加速器/openEuler-WayCa-SIG-加速器介绍.md
@@ -0,0 +1,462 @@
+# openEuler WayCa SIG 加速器介绍
+
+* 加速器模块包含基于CRYPTO、HWRNG、UACCE、UADK框架实现的支持鲲鹏加速器设备的内核态与用户态驱动。加速器模块包括5个子模块,分别为队列管理模块QM、高性能RSA计算引擎HPRE、硬件安全加速引擎SEC、压缩算法加速引擎ZIP、真随机数产生器TRNG模块。QM是为了统一加速器设备和软件之间的接口,采用统一的队列管理模块QM来和软件进行交互。加速器HPRE、SEC、ZIP设备都集成QM模块。HPRE模块支持RSA/DH/ECDH/X25519/X448/ECDSA/SM2算法,ZIP模块支持gzip/zlib/deflate/lz77_zstd算法,SEC模块支持AEAD/SKCIPHER/DIGEST算法,TRNG模块支持获取随机数。加速器驱动代码已上传到linux和linaro社区。
+
+## ACC 模块介绍
+
+* ACC模块是加速器内核态硬件驱动,内核态驱动主要实现加速器设备虚拟化(SRIOV)、限流、DFX信息查询、crypto内核态硬件算法、虚拟化热迁移、RAS硬件错误处理、FLR复位、低功耗等这几大特性。
+
+### 一、内核态驱动使能
+
+#### 源码获取路径
+
+* linux kernel 仓库:<https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git>
+* openeuler 仓库:<https://gitee.com/openeuler/kernel.git>
+* 源码目录:drivers/crypto/hisilicon/
+
+#### 内核配置
+
+* 加速器模块,内核态驱动涉及的config选项有:
+
+ * CONFIG_CRYPTO_DEV_HISI_QM=m hisi_qm.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_ZIP=m hisi_zip.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_HPRE=m hisi_hpre.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_SEC2=m hisi_sec2.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_TRNG=m hisi-trng-v2.ko编译配置选项
+ CONFIG_CRYPTO_DEV_HISI_MIGRATION=m hisi_migration.ko编译配置选项
+ CONFIG_UACCE=m uacce.ko编译配置选项,该模块用于支持用户态驱动,如果不使能加速器仅支持内核态驱动
+
+* 虚拟化热迁移依赖的内核config选项有:
+
+ * CONFIG_VFIO=m vfio.ko编译配置选项
+ CONFIG_VFIO_PCI=m vfio_pci.ko编译配置选项
+
+ 此外加速器内核态算法的实现依赖于内核crypto子系统。
+
+#### 模块依赖及参数配置指导
+
+* 当用户态驱动依赖的config项CONFIG_UACCE未配置时,ZIP、HPRE、SEC驱动支持内核态。hisi_qm模块为zip、sec、hpre三个加速器设备驱动提供内核态中间层接口,故这几个ko的依赖关系为:
+ * hisi_zip.ko《== hisi_qm.ko
+ * hisi_sec2.ko《== hisi_qm.ko
+ * hisi_hpre.ko《== hisi_qm.ko
+ * hisi-trng-v2.ko《== rng-core.ko
+* 加速器模块(SEC、ZIP、HPRE)参数如下表所示,模块参数的支持范围和配置策略会在配置说明中列出。加载驱动时模块参数没有先后顺序。加载驱动后,可以通过cat /sys/bus/pci/drivers/<driver>/module/parameters/ 来查询模块参数。模块参数在加载驱动后不支持更新。如zip驱动的加载(示例为不支持用户态的情况下):
+ * insmod hisi_zip.ko pf_q_num =16 vfs_num=1 sgl_sge_nr=16
+* 模块参数说明
+
+| 参数 | 参数范围 | 加载配置示例 | 配置说明 |
+| ---------- | :-------------------------------------- | ------------------------------------------------------------ | ------------------------ |
+| pf_q_num | 2~1024 SEC 默认为256 HPRE/ZIP 默认为64 | insmod hisi_zip.ko pf_q_num=16<br />insmod hisi_hpre.ko pf_q_num=16<br />insmod hisi_sec2.ko pf_q_num=16 | PF可用队列数 |
+| vfs_num | 0~63 默认值为0 | insmod hisi_zip.ko vfs_num=1<br />insmod hisi_hpre.ko vfs_num=1<br />insmod hisi_sec2.ko vfs_num=1 | 使能VF数 |
+| sgl_sge_nr | 1~225 默认值为10 | insmod hisi_zip.ko sgl_sge_nr=16 | 单个sgl的sge数量 (仅ZIP模块参数) |
+| ctx_q_num | 2~32,仅偶数默认值为2 | insmod hisi_sec2.ko ctx_q_num=16 | crypto tfm下的硬件队列数 |
+| uacce_mode | 0、1 默认值为0 | insmod hisi_zip.ko uacce_mode=1<br />insmod hisi_hpre.ko uacce_mode=1<br />insmod hisi_sec.ko <u>uacce_mode=1</u> | 用户态驱动开关 |
+
+### 二、ZIP SEC HPRE内核态特性
+
+#### 1、加速器支持SRIOV
+
+* 特性介绍
+
+ 加速器设备支持通过PCI驱动框架注册设备驱动,加速器设备支持PCI function的SRIOV功能实现设备虚拟化操作,并且支持通过驱动模块参数直接配置虚拟化设备VF的个数。
+
+ 用户通过vfs_num模块参数,可设置初始的vf数目,加载驱动模块后,每个加速器PF将产生对应数量的vf(不支持模块加载后再对该模块参数进行更新,且通过模块参数只能查询到初始配置的值)。同时,支持pci sysfs方式更新vf的个数,可用于更新对应PCI物理设备的vf数量,配置功能仅在PF,同时pf支持的算法业务、FLR、限流vf同样支持。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | 5ec302a364bf | crypto: hisilicon - add SRIOV support for HPRE | Y |
+ | 35ee280fb1fb | crypto: hisilicon - add vfs_num module parameter for hpre/sec | Y |
+ | 73bcb049a77 | crypto: hisilicon - add SRIOV for HiSilicon SEC | Y |
+ | 79e09f30eeba | crypto: hisilicon - add SRIOV support for ZIP | Y |
+ | 39977f4b51c | crypto: hisilicon - add vfs_num module param for zip | Y |
+
+
+
+* 示例
+
+ 用户也可以在加载驱动时直接通过模块参数vfs_num配置vf:
+
+ ~~~
+ modprobe hisi_zip vfs_num=1
+ ~~~
+
+ 模块加载之后支持pci sysfs方式跟新vf个数:
+
+ ~~~
+ echo 2 > /sys/devices/<pci_bus>/<pci_device>/<device>/sriov_numvfs
+ echo 2 > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.0/sriov_numvfs
+ ~~~
+
+#### 2、加速器支持限流功能
+
+* 特性介绍
+
+ HAC(HPRE/ZIP/SEC)加速器设备在支持虚拟化时,不同VF设备分配给不同的虚拟机VM,即不同的用户使用,考虑到加速器作为附加的硬件计算资源,需要以‘算力’为单位,每个VF的算力应该定量分配出去,让每个用户能够获得足够的计算资源,同时,让同一个加速器物理设备上的VF的‘算力’相互不受干扰,用户购买了多少算力,比如AES-CBC 20Gbps,那么就给可以用户配20Gbps算力。仅支持root权限用户可以配置算力,可对各个function(包括PF) 进行‘算力’大小查询与配置,VF用户只能查询,不能配置。
+
+ 用户可以在设备debugfs下面看到alg_qos文件节点,算力配置命令为echo bdf qos > alg_qos,以Hip09为例,用户知道aes-cbc满配是100Gbps,用户想要设置0000:39:00.1配置20Gbps,那么实际上输入为20%,则echo 0000:39:00.1 200 > alg_qos,如果想要配置0000:39:00.2,则echo 0000:76:00.2 200 > alg_qos ,zip支持压缩、解压缩,hpre支持ECC、RSA。sec支持加解密算法配置、qos表示流量比例。从1~1000, 表示0.1%~100.0%。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | 72b010dc33b9 | crypto: hisilicon/qm - supports writing QoS int the host | Y |
+ | cc0c40c613d2 | crypto: hisilicon/qm - add the "alg_qos" file node | Y |
+ | 362c50bad3a7 | crypto: hisilicon/qm - merges the work initialization process into a single function | Y |
+ | 2966d9d3078c | crypto: hisilicon/qm - add pf ping single vf function | Y |
+ | 3bbf0783636b | crypto: hisilicon/qm - supports to inquiry each function's QoS | Y |
+ | 3d2a429271bb | crypto: hisilicon/sec - adds the max shaper type rate | Y |
+
+
+
+* 示例
+
+ sec vf流量配置:
+
+ ~~~
+ modprobe hisi_sec2 vfs_num=2
+ echo 0000:39:00.1 200 > /sys/kernel/debug/hisi_sec2/0000:39:00.1/alg_qos
+ cat /sys/kernel/debug/hisi_sec2/0000:39:00.1/alg_qos
+ ~~~
+
+#### 3、加速器提供配置信息查询功能
+
+* 特性介绍
+
+ 支持通过DebugFS文件系统,查询当前设备的基本配置信息,错误信息和业务运行时的状态信息。
+
+ DebugFS能够查询到的信息:
+
+ * 首先是基本的状态查询,包含软件和硬件:QM状态查询功能,SQC/CQC配置信息,配置寄存器等信息。
+ * 其次,正常和异常下收发包数量统计。
+ * 另外包括临终遗言功能,复位前将异常变化的寄存器dump,这些寄存器复位后会被还原。
+ * 还包括提供寄存器一键比对check功能,快速发现前后变化的寄存器状态。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ---------------------------------------------------------- | ------------------------ |
+ | 72c7a68d2ea3 | crypto: hisilicon - add debugfs for ZIP and QM | Y |
+ | 8502652542c6 | crypto: hisilicon/qm - add debugfs for QM | Y |
+ | 0a3a3960210b | crypto: hisilicon/qm - add debugfs to the QM state machine | Y |
+ | c31dc9fe165d | crypto: hisilicon/qm - add DebugFS for xQC and xQE dump | Y |
+ | 848974151618 | crypto: hisilicon - Add debugfs for HPRE | Y |
+ | 1e9bc276f | crypto: hisilicon - add DebugFS for HiSilicon SEC | Y |
+
+
+
+* 示例
+
+ 查看zip设备qm dfx:
+
+ ~~~
+ cat /sys/kernel/debug/hisi_zip/0000:31:00.0/qm/regs 查看qm相关寄存器
+ cat /sys/kernel/debug/hisi_zip/0000:31:00.0/comp_core0/regs 查看算法核相关寄存器
+ ~~~
+
+ 更多更详细DFX功能可查看加速器DFX手册。
+
+#### 4、加速器内核态基本算法加速功能
+
+* 特性介绍
+
+ linux内核加/解密和压缩/算法有内核crypto子系统承载,crypto子系统支持内核态算法扩展及替换。加速器内核态驱动在模块初始化阶段将加速器硬算算法接口注册到crypto子系统中,通过crypto相关算法的接口可以调用加速器设备。
+
+ 查看加速器驱动支持的算法
+
+ ~~~
+ cat /proc/crypto | grep -B 4 -A 8 hisi_sec2 //查看sec设备支持的算法
+ cat /proc/crypto | grep -B 4 -A 8 hisi_hpre //查看hpre设备支持的算法
+ cat /proc/crypto | grep -B 4 -A 8 hisi_zip //查看zip设备支持的算法
+ ~~~
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | 62c455ca853e | crypto: hisilicon - add HiSilicon ZIP accelerator support | Y |
+ | 7b44c0eecd6a | crypto: hisilicon/sec - add new skcipher mode for SEC | Y |
+ | 2f072d75d1ab | crypto: hisilicon - Add aead support on SEC2 | Y |
+ | c16a70c1f253 | crypto: hisilicon/sec - add new algorithm mode for AEAD | Y |
+ | 6c46a3297bea | crypto: hisilicon/sec - add fallback tfm supporting for aeads | Y |
+ | c8b4b477079d | crypto: hisilicon - add HiSilicon HPRE accelerator | Y |
+ | fbc75d03fda0 | crypto: hisilicon/hpre - enable Elliptic curve cryptography | Y |
+ | 05e7b906aa7c | crypto: hisilicon/hpre - add 'ECDH' algorithm | Y |
+ | b981f7990e1a | crypto: hisilicon/hpre - register ecdh NIST P384 | Y |
+ | 90274769cf79 | crypto: hisilicon/hpre - add 'CURVE25519' algorithm | Y |
+ | 3e90efd12959 | hwrng: hisi - add HiSilicon TRNG driver support | Y |
+ | 6e57871c3b75 | crypto: hisilicon/trng - add version to adapt new algorithm | Y |
+
+* zlib、gzip算法调用
+
+ 加载hisi_zip.ko后,通过crypto子系统acomp接口实现压缩解压缩功能。
+
+ 接口路径:<linux/include/crypto/acompress.h>
+
+* DH算法调用
+
+ 加载hisi_hpre.ko后,通过crypto子系统KPP接口实现密钥协商功能。
+
+ 接口路径:<linux/include/crypto/kpp.h>
+
+ 规格限制:HPRE硬件设备支持DH算法规格如下表。
+
+ DH group1/2/5/14/15/16模幂长度
+
+ | group | 模值(bits) |
+ | ------- | ---------- |
+ | group1 | 768 |
+ | group2 | 1024 |
+ | group5 | 1536 |
+ | group14 | 2048 |
+ | group15 | 3072 |
+ | group16 | 4096 |
+
+* RSA算法调用
+
+ 加载hisi_hpre.ko后,通过crypto子系统AKCIPHER接口实现加解密与签名功能。
+
+ 接口路径:<linux/include/crypto/akcipher.h>
+
+ 规格限制:HPRE硬件设备支持RSA算法规格如下表。
+
+ RSA密钥位宽
+
+ | 模式 | 密钥位宽(bits) |
+ | ---- | ---------------------- |
+ | 标准 | 1024、2048、3072、4096 |
+ | CRT | 1024、2048、3072、4096 |
+
+* ECDH算法调用
+
+ 加载hisi_hpre.ko后,通过crypto子系统KPP和ECDH接口实现基于椭圆曲线的密钥协商功能。
+
+ 接口路径:<linux/include/crypto/kpp.h>
+
+ < linux/include/crypto/ecdh.h>
+
+ 规格限制:HPRE硬件设备支持ECDH算法的椭圆曲线规格如下表所示。
+
+ ECDH椭圆曲线规格
+
+ | 曲线名称 | 密钥位宽(bits) |
+ | ------------------- | -------------- |
+ | ECC_CURVE_NIST_P192 | 192 |
+ | ECC_CURVE_NIST_P224 | 224 |
+ | ECC_CURVE_NIST_P256 | 256 |
+ | ECC_CURVE_NIST_P384 | 384 |
+ | ECC_CURVE_NIST_P521 | 521 |
+
+* X25519算法调用
+
+ 加载hisi_hpre.ko后,通过crypto子系统CURVE25519接口实现基于椭圆曲线curve25519的密钥协商功能。
+
+ 接口路径:<linux/include/crypto/curve25519.h>
+
+ 规格限制:HPRE硬件设备支持X25519算法的椭圆曲线规格如下表所示。
+
+ X25519椭圆曲线规格
+
+ | 曲线名称 | 密钥位宽(bits) |
+ | ---------- | -------------- |
+ | Curve25519 | 256 |
+
+* SKCIPHER算法调用
+
+ 加载hisi_sec2.ko后,通过crypto子系统SKCIPHER接口实现加解密功能。
+
+ 接口路径:<linux/include/crypto/skcipher.h>
+
+ 规格限制:SEC硬件设备支持SKCIPHER算法规格如下表。
+
+ SKCIPHER算法规格
+
+ | SKCIPHER算法名称 | 设置key长(bits) |
+ | ---------------- | --------------- |
+ | ecb(aes) | 128、192、256 |
+ | cbc(aes) | 128、192、256 |
+ | xts(aes) | 256、512 |
+ | ecb(des3_ede) | 192 |
+ | cbc(des3_ede) | 192 |
+ | cbc(sm4) | 128 |
+ | xts(sm4) | 256 |
+
+* AEAD算法调用
+
+ 加载hisi_sec2.ko后,通过crypto子系统AEAD接口实现加解密功能。
+
+ 接口路径:<linux/include/crypto/aead.h>
+
+ 规格限制:SEC硬件设备支持AEAD算法规格如下表。
+
+ AEAD算法规格
+
+ | AEAD算法名称 | 设置key长(bits) | 设置author key长(bits) | Author长度(bits) |
+ | ------------------------------ | --------------- | ---------------------- | ---------------- |
+ | authenc(hmac(sha1),cbc(aes)) | 128、192、256 | 0~512 | 1~160 |
+ | authenc(hmac(sha256),cbc(aes)) | 128、192、256 | 0~512 | 1~256 |
+ | authenc(hmac(sha512),cbc(aes)) | 128、192、256 | 0~1024 | 1~512 |
+
+* drbg算法调用
+
+ 加载hisi-trng-v2.ko后,通过crypto子系统drbg接口实现获取随机数功能。
+
+ 接口路径:<linux/include/crypto/drbg.h>
+
+ 规格限制:只支持seed大小为384bits,最大获取随机数长度为4095*128bits。
+
+* 真随机数获取
+
+ 加载hisi-trng-v2.ko后,支持通过/dev/hwrng获取TRNG设备产生的真随机数。用户从/dev/random中获取的随机数有部分是TRNG设备产生的真随机数
+
+#### 5、加速器支持热迁移功能
+
+* 特性介绍
+
+ 加速器热迁移主要配合KVM-QEMU完成直通加速器VF设备的VM和VM之间的动态热迁移,在热迁移的过程中保证业务的不中断和用户不感知。因为openeuler是5.10的内核,没有合入linux主线最新的热迁移框架,当前openeuler使用的是V1版的热迁移(祥见下面patch)适配qemu 6.2.0到8.0之间的版本,qemu 8.x的版本已经不在支持V1版的热迁移。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ----------------------------------------------------------- | ------------------------ |
+ | a0464f0b70f9 | vfio/hisilicon: add acc live migration driver | Y |
+ | e073afaff8c1 | crypto: hisilicon/qm - support the userspace task resetting | Y |
+
+* 示例
+
+ zip热迁移:
+
+ ~~~
+ modprobe hisi_zip
+ 创建vf:
+ echo 0 > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.0/sriov_numvfs
+ echo 2 > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.0/sriov_numvfs
+
+ 绑定vfio:
+ echo 0000:31:00.1 > /sys/bus/pci/drivers/hisi_zip/unbind
+ echo vfio-pci > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.1/driver_override
+ echo 0000:31:00.1 > /sys/bus/pci/drivers_probe
+
+ echo 0000:31:00.2 > /sys/bus/pci/drivers/hisi_zip/unbind
+ echo vfio-pci > /sys/devices/pci0000:30/0000:30:00.0/0000:31:00.2/driver_override
+ echo 0000:31:00.2 > /sys/bus/pci/drivers_probe
+
+ 启动迁出端:
+ qemu-system-aarch64 -machine virt,gic-version=3 -enable-kvm -cpu host -m 2G -smp 1 \
+ -kernel /home/Image -initrd /home/shan/minifs.cpio.gz -nographic \
+ -append "rdinit=init console=ttyAMA0 earlycon=pl011,0x9000000 kpti=off cma=2G" \
+ -device vfio-pci,host=31:00.1,x-enable-migration=true,x-pre-copy-dirty-page-tracking=off \
+ -monitor stdio -serial telnet:0.0.0.0:1111,server,nowait -net none
+
+ 启动迁入端:
+ qemu-system-aarch64 -machine virt,gic-version=3 -enable-kvm -cpu host -m 2G -smp 1 \
+ -kernel /home/Image -initrd /home/shan/minifs.cpio.gz -nographic \
+ -append "rdinit=init console=ttyAMA0 earlycon=pl011,0x9000000 kpti=off cma=2G" \
+ -device vfio-pci,host=31:00.2,x-enable-migration=true,x-pre-copy-dirty-page-tracking=off \
+ -monitor stdio -serial telnet:0.0.0.0:2222,server,nowait -net none -incoming tcp:0:6666
+
+ 迁出端vm加载加速器驱动:
+ insmod hisi_zip.ko (可跑加速器业务,目前openEuler VM仅支持内核态业务)
+
+ host迁出端控制台启动迁移:
+ migrate tcp:0.0.0.0:6666
+ ~~~
+
+#### 6、加速器支持RAS复位特性
+
+* 特性介绍
+
+ Reliability—可靠性 、Availability—可用性、Serviceability—可服务性简称RAS,RAS是用于保障HAC设备的可靠性,即当HAC出现硬件错误时,尽最大可能不影响业务连续性与正确性。加速器RAS特性主要包括设备停流、缓存现场、复位、恢复业务。当加速器设备发生硬件错误时会触发RAS中断,在保证用户(UADK接口或者内核Crypto接口的调用者)业务连续性和正确性的前提下,中断处理程序完成对硬件错误的纠正。
+
+* 使涉及代码与能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | b67202e8ed30 | crypto: hisilicon/qm - add state machine for QM | Y |
+ | dbdc1ec31fc0 | crypto: hisilicon - add device error report through abnormal irq | Y |
+ | 6c6dd5802c2d | crypto: hisilicon/qm - add controller reset interface | Y |
+ | 1f5c9f34f0cc | crypto: hisilicon/hpre - add controller reset support for HPRE | Y |
+ | c4aab24448a3 | crypto: hisilicon - enable new error types for QM | Y |
+ | ed278023708b | crypto: hisilicon/hpre - add two RAS correctable errors processing | Y |
+ | 141876c252a4 | crypto: hisilicon/sec2 - add controller reset support for SEC2 | Y |
+ | 1db0016e0d22 | crypto: hisilicon/qm - do not reset hardware when CE happens | Y |
+
+
+#### 7、加速器支持FLR复位功能
+
+* 特性介绍
+
+ 加速器设备支持通过PCI驱动框架注册设备驱动,提供基于PCI设备的FLR复位功能,完成Function级别的复位,同时实现软件和硬件恢复到初始化的状态,在复位场景下,保证业务流合理停止处理(合理停止:停流时用户会被通知,用户对未完成的任务进行相应处理,用户可以选择,在复位完成后,基于初始状态的function设备继续进行业务,或也可以直接退出业务处理,其中用户是指UADK接口或者内核Crypto接口的调用者)
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | 7ce396fa12a9 | crypto: hisilicon - add FLR support | Y |
+ | 38cd3968bf28 | crypto: hisilicon/qm - adjust reset interface | Y |
+ | 7ed83901326f | crypto: hisilicon/qm - add stop queue by hardware | Y |
+ | e3ac4d20e936 | crypto: hisilicon/qm - enable PF and VFs communication | Y |
+ | 3cd53a27c2fc | crypto: hisilicon/qm - add callback to support communication | Y |
+ | 760fe22cf5e9 | crypto: hisilicon/qm - update reset flow | Y |
+
+* 示例
+
+ ~~~
+ zip pf reset:
+ echo 1 > /sys/bus/pci/devices/0000:31:00.0/reset
+
+ zip vf reset:
+ echo 1 > /sys/bus/pci/devices/0000:31:00.1/reset
+ ~~~
+
+#### 8、加速器设备支持低功耗特性
+
+* 对于加速器设备,硬件上支持对单个PF设备进行电源的打开与关闭。用户可以通过Device SysFS(/sys/devices/.../power/control)对单个PF设备进行低功耗控制配置,如果使能‘auto’策略,设备将在被使用时(内核与用户态应用在调用Crypto或Warpdrive接口获取硬件资源)自动进入运行状态,如果使能了‘on’策略,那么该设备就一直处于运作状态,不进行任何功耗控制。由于PCIE协议要求在D3cold电源状态下VF不应该使能起来,因此在使能VF时不进入下电状态,此时依赖芯片本身支持的clock-gating来降低功耗。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ------------------------------------------------------------ | ------------------------ |
+ | d7ea53395b72 | crypto: hisilicon - add runtime PM ops | Y |
+ | 607c191b371d | crypto: hisilicon - support runtime PM for accelerator device | Y |
+ | ed5fa39fa8a6 | crypto: hisilicon - enable zip device clock gating | Y |
+ | 3d845d497b23 | crypto: hisilicon - enable sec device clock gating | Y |
+ | ea5202dff79c | crypto: hisilicon - enable hpre device clock gating | Y |
+
+* 示例
+
+ zip设备配置低功耗策略
+
+ ~~~
+ cat /sys/bus/pci/devices/0000:31:00.1/power/runtime_status
+ echo auto > /sys/bus/pci/devices/0000:31:00.1/power/control
+ cat /sys/bus/pci/devices/0000:31:00.1/power/runtime_status
+ ~~~
+
+#### 9、支持获取硬件随机数特性
+
+* 特性介绍
+
+ 芯片TRNG模块提供硬件随机数算法,内核TRNG驱动(drivers/crypto/hisilicon/trng)提供Crypto RNG算法,往Kernel Crypto子系统进行注册,同时注册TRNG真随机数设备驱动到HWRANDOM子系统。这样,通过内核CRYPTO RNG接口与/dev/random接口可分别使用芯片TRNG所提供的DRBG与TRNG真随机数。
+
+* 涉及代码与使能
+
+ | commitid | subject | openeuler enabled(Y/N) |
+ | ------------ | ----------------------------------------------------------- | ------------------------ |
+ | 3e90efd12959 | hwrng: hisi - add HiSilicon TRNG driver support | Y |
+ | 6e57871c3b75 | crypto: hisilicon/trng - add version to adapt new algorithm | Y |
+
+
+
+* 示例
+
+ ~~~
+ cat /dev/hwrng
+ cat /dev/random
+ ~~~
+
+
+
+## UADK 模块介绍
+* 详情可以参考UADK用户手册 https://gitee.com/openeuler/uadk/wikis/%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3…
--
2.30.0
1
0
1
0
您好!
sig-WayCa SIG 邀请您参加 2023-05-24 15:30 召开的Zoom会议
会议主题:加速器系列~acc
会议链接:https://us06web.zoom.us/j/85386310326?pwd=ZWZQZmlqUllsMi9ndFVBQWxrZVgwQT09
会议纪要:https://etherpad.openeuler.org/p/sig-WayCa-meetings
温馨提醒:建议接入会议后修改参会人的姓名,也可以使用您在gitee.com的ID
更多资讯尽在:https://openeuler.org/zh/
Hello!
openEuler sig-WayCa SIG invites you to attend the Zoom conference will be held at 2023-05-24 15:30,
The subject of the conference is 加速器系列~acc,
You can join the meeting at https://us06web.zoom.us/j/85386310326?pwd=ZWZQZmlqUllsMi9ndFVBQWxrZVgwQT09.
Add topics at https://etherpad.openeuler.org/p/sig-WayCa-meetings.
Note: You are advised to change the participant name after joining the conference or use your ID at gitee.com.
More information: https://openeuler.org/en/
1
0
From 19b8bc3d41ec8b248f8c9027aeae68954a010e18 Mon Sep 17 00:00:00 2001
From: Jian Shen <shenjian15(a)huawei.com>
Date: Tue, 9 May 2023 14:39:51 +0800
Subject: [PATCH] Modified the format and description for hns3 driver
Signed-off-by: Jian Shen <shenjian15(a)huawei.com>
---
.../WayCa-Kunpeng-高速网络/README.md | 27 +-
...网络-板载网卡驱动特性介绍.md | 237 ++++++++++++------
2 files changed, 176 insertions(+), 88 deletions(-)
diff --git a/WayCa-Kunpeng-底软/WayCa-Kunpeng-高速网络/README.md
b/WayCa-Kunpeng-底软/WayCa-Kunpeng-高速网络/README.md
index b5931da..b064c6a 100644
--- a/WayCa-Kunpeng-底软/WayCa-Kunpeng-高速网络/README.md
+++ b/WayCa-Kunpeng-底软/WayCa-Kunpeng-高速网络/README.md
@@ -1,26 +1,29 @@
-# openEuler WayCa SIG 鲲鹏 高速网络
+# openEuler WayCa 鲲鹏 高速网络
-## 高速网络
+## 高速网络
--
鲲鹏高速网络主要使用鲲鹏硬件板载网络模块,主要应用涉及DPDK技术和roce、rdma-core等高速网络技术,
+- 鲲鹏高速网络主要使用鲲鹏硬件板载网络模块,
主要应用涉及DPDK技术和Roce、rdma-core 、nic 和roh等高速网络技术。
本文档提供了鲲鹏高速网络特性的基本使用和模块的特性介绍,具体内容详见如下:
+## NIC 技术文档
-## DPDK技术文档
+- WayCa-Kunpeng-高速网络-板载网卡驱动模块特性介绍.md
+-
https://gitee.com/openeuler/Wayca/wayca-Kunpeng-高速网络/WayCa-Kunpeng-高速网络-板载网…
+
+## DPDK 技术文档
- WayCa-Kunpeng-高速网络-dpdk技术用户使用指南.md
-- https://gitee.com/openeuler/xxxx/wayca-kunpeng
+- https://gitee.com/openeuler/Wayca/wayca-Kunpeng-高速网络/xx文档
- WayCa-Kunpeng-高速网络-dpdk模块特性介绍.md
-- https://gitee.com/openeuler/xxxx/wayca-kunpeng
-
-## Roce和RDMA-CORE技术文档
+- https://gitee.com/openeuler/Wayca/wayca-Kunpeng-高速网络/xx文档
-- WayCa-Kunpeng-高速网络-xx技术用户使用指南.md
-- https://gitee.com/openeuler/xxxx/wayca-kunpeng
+## Roce rdma-core 技术文档
-- WayCa-Kunpeng-高速网络-xx模块特性介绍.md
-- https://gitee.com/openeuler/xxxx/wayca-kunpeng
+- WayCa-Kunpeng-高速网络-xxx技术用户使用指南.md
+- https://gitee.com/openeuler/Wayca/wayca-Kunpeng-高速网络/xx文档
+- WayCa-Kunpeng-高速网络-xxx模块特性介绍.md
+- https://gitee.com/openeuler/Wayca/wayca-Kunpeng-高速网络/xx文档
diff --git
a/WayCa-Kunpeng-底软/WayCa-Kunpeng-高速网络/WayCa-Kunpeng-高速网络-板载网卡驱动特性介绍.md
b/WayCa-Kunpeng-底软/WayCa-Kunpeng-高速网络/WayCa-Kunpeng-高速网络-板载网卡驱动特性介绍.md
index 327f162..4ef75b8 100644
---
a/WayCa-Kunpeng-底软/WayCa-Kunpeng-高速网络/WayCa-Kunpeng-高速网络-板载网卡驱动特性介绍.md
+++
b/WayCa-Kunpeng-底软/WayCa-Kunpeng-高速网络/WayCa-Kunpeng-高速网络-板载网卡驱动特性介绍.md
@@ -1,14 +1,18 @@
# openEuler WayCa SIG 板载网卡驱动(内核态)模块介绍
## HNS3内核网卡驱动简介
+
- HNS3
driver是适配鲲鹏920系列处理器网络控制器的驱动模块,提供了完备的ethernet网卡功能。
- 基础特性已在linux kernel 5.5 完成支持。
+ 基础特性已在linux kernel 5.5完成支持。新增重要特性为linux kernel
5.5及以上支持的特性, 涵盖特性简介和社区信息。
+
- **源码获取路径**
linux kernel
仓库:[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git](htt…
openeuler
仓库:[https://gitee.com/openeuler/kernel.git](https://gitee.com/openeuler/ker…
源码目录:**drivers/net/ethernet/hisilicon/hns3**
+
- **内核相关配置**
- HNS3模块涉及以下5个Config选项:
+
| 配置项 | 功能 |
| :---- | :---- |
| CONFIG_HNS3 | 必选,基础配置 |
@@ -18,11 +22,13 @@
| CONFIG_HNS3_DCB | 可选,DCB功能 |
- 部分特性依赖的内核Config选项
+
| 配置项 | 功能 |
| :---- | :---- |
| CONFIG_RFS_ACCEL | 可选,aRFS功能 |
| CONFIG_PCI_IOV | 可选,SRIOV功能 |
| CONFIG_VLAN_8021Q | 可选,802.1Q VLAN卸载功能 |
+
- **基础版本特性列表**
- **支持多种接口形态**
- 支持光口、电口、背板多种形态
@@ -64,7 +70,6 @@
- 支持RAS
- 支持异常中断处理
- 支持环回自检
-
- **新增重要特性包括**
- 支持查询光模块 eeprom 信息
- 支持UDP GSO卸载
@@ -73,73 +78,107 @@
- 支持各层级复位
- 支持 rx pagepool
- 支持DSCP
- - 支持FEC统计
- 支持PMU
-### SR1: 支持查询光模块eeprom信息
-- 特性介绍
+### 特性1: 支持查询光模块eeprom信息
+- 特性介绍
光口上可能会插入不同类型的光模块介质,PF可以向IMP查询介质模块的eeprom信息,供上层应用读取和解析。可以用于识别检查设备介质是否被更换或故障定位。
- 内核相关配置
-
无
- 软件接口
-
可通过ethtool -m <pf name> [raw on|off] [hex on|off] [offset N] [length
N]命令,来查询当前介质模块的eeprom信息。显示形式由参数决定,可以为二进制、十六进制、或解析后的文本形式。可自定义查询的偏移和长度。
-
驱动对外接口
- <code></codeint>int hns3_get_module_eeprom(struct net_device *netdev,
+ <code>int hns3_get_module_eeprom(struct net_device *netdev,
struct ethtool_eeprom *ee, u8 *data)</code>
- 涉及代码与使能
-| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
-| :----: | :----: | :----: |
-| cb10228d234c | net: hns3: adds support for reading module eeprom
info | Y |
-### SR2: 支持UDP GSO卸载
+linux 主线合入信息
+
+| COMMITID | SUBJECT | TAG |
+| :----: | :----: | :----: |
+| cb10228d234c | [net: hns3: adds support for reading module eeprom
info](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/co…
| kernel v5.7-rc2 |
+
+openEuler OLK-5.10使能信息
+
+| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
+| :----: | :----: | :----: |
+| cb10228d234c | net: hns3: adds support for reading module eeprom info
| Y |
+
+### 特性2: 支持UDP GSO卸载
+
- 特性介绍
-UDP segment offload(UDP GSO),类似TSO(TCP
GSO),使得应用层可能生成比实际MTU更多的网络报文,
实际大小受底层网络和链路层协议限制。网络协议栈能够将大块buffer推送至网卡,由网卡执行分片工作,这样减轻了CPU的负荷。鲲鹏920B/C板载网卡硬件提供了对UDP报文的分片功能。此功能PF/VF可以单独使能,支持UDPv4/UDPv6
以及隧道报文。
+ UDP segment offload(UDP GSO),类似TSO(TCP
GSO),使得应用层可能生成比实际MTU更多的网络报文,
实际大小受底层网络和链路层协议限制。网络协议栈能够将大块buffer推送至网卡,由网卡执行分片工作,这样减轻了CPU的负荷。鲲鹏920系列处理器上板载网卡硬件提供了对UDP报文的分片功能。此功能PF/VF可以单独使能,支持UDPv4/UDPv6
以及隧道报文。
- 内核相关配置
无
- 软件接口
-
驱动要声明支持NETIF_F_GSO_UDP_L4 feature,
方可使能此功能。可通过ethtool -K <devname> tx-udp-segmentation on/off
命令控制该功能的开启和关闭。
UDP协议并不是面向字节流的,如果要支持UDP
GSO,它需要通过发送缓冲区的大小隐式地表示了数据报的边界。应用程序必须在send调用时**使用额外参数明确标示这个数据报的gso大小**(socket
option SOL_UDP/UDP_SEGMENT 或control
message,使用udpgso_bench_tx/rx工具测试时,如果不指定MSS,将由协议栈分段,指定时由硬件分段)。内核构造较大的数据报,并连同相应元数据传递给UDP和IP层。网络设备或GSO层接收大数据报,将有效负载分成gso大小的段,然后复制头部。
- 涉及代码与使能
-| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
+
+linux 主线合入信息
+
+| COMMITID | SUBJECT | TAG |
| :----: | :----: | :----: |
-| cb10228d234c | net: hns3: adds support for reading module eeprom
info | Y |
+| 507e46ae26ea | [net: hns3: add getting capabilities of gro offload
and fd from
firmware](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.gi…
| v5.18-rc7 |
+
+openEuler OLK-5.10使能信息
-### SR3: 支持PTP
+| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
+| :----: | :----: | :----: |
+| 72b042b4288c | net: hns3: add getting capabilities of gro offload and
fd from firmware | Y |
+
+### 特性3: 支持PTP
- 特性介绍
-PTP(precision time protocol),精确时钟协议,又称IEEE
1588(v2)协议,用于对分布式系统提供亚微秒级别的时钟同步功能。PTP作为一种主从同步系统,在系统过程中,主时钟周期性发布PTP时间同步协议及时间信息,从时钟端口接收主时钟端口发来的时间戳信息,系统据此计算出主从线路时间延迟及主从时间差,并利用时间差调整本地时间,使从设备时间保持与主设备时间一致的频率和相位。
+ PTP(precision time protocol),精确时钟协议,又称IEEE
1588(v2)协议,用于对分布式系统提供亚微秒级别的时钟同步功能。PTP作为一种主从同步系统,在系统过程中,主时钟周期性发布PTP时间同步协议及时间信息,从时钟端口接收主时钟端口发来的时间戳信息,系统据此计算出主从线路时间延迟及主从时间差,并利用时间差调整本地时间,使从设备时间保持与主设备时间一致的频率和相位。
+
- 内核相关配置
- 内核选项为CONFIG_PTP_1588_CLOCK
+
+| 配置项 | 功能 |
+| :---- | :---- |
+| CONFIG_PTP_1588_CLOCK | 可选,ptp功能 |
+
- 软件接口
可通过ethtool -T <pf_name> 查询当前物理设备支持的时钟能力。
驱动侧实现ndo_do_ioctl接口和ethtool_ops.
get_ts_info接口,对应SIOCGHWTSTAMP,返回硬件时间戳信息配置,包括hwtstamp_tx_types和hwtstamp_rx_filters。
Linux提供了标准的ptp配置工具,需要安装linuxptp,详见ptp4l/ptp2sys,使用方法可以参考[redhat的帮助文档](https…
+
- 涉及代码与使能
-| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
-| :----: | :----: | :----: |
-| 0bf5eb788512 | net: hns3: add support for PTP | Y |
-| b34c157f0cdd | net: hns3: add debugfs support for ptp info | Y |
-| 8373cd38a888 | net: hns3: change the method of obtaining default ptp
cycle | Y |
-| 974557020a59 | ptp: hclge: convert .adjfreq to .adjfine | N |
-### SR4: 支持硬件tc 卸载
+
+linux 主线合入信息
+
+| COMMITID | SUBJECT | TAG |
+| :----: | :----: | :----: |
+| 0bf5eb788512 | [net: hns3: add support for
PTP](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/com…
| v5.13-rc3 |
+| b34c157f0cdd | [net: hns3: add debugfs support for ptp
info](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/co…
| v5.13-rc3 |
+| 8373cd38a888 | [net: hns3: change the method of obtaining default ptp
cycle](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/c…
| v5.13-rc3 |
+
+openEuler OLK-5.10使能信息
+
+| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
+| :----: | :----: | :----: |
+| 56acfb181aba | net: hns3: add support for PTP | Y |
+| 0e093eb72d95 | net: hns3: add debugfs support for ptp info | Y |
+| f61992ad87f2 | net: hns3: change the method of obtaining default ptp
cycle | Y |
+
+### 特性4: 支持硬件tc 卸载
- 特性介绍
基线版本的驱动中,只支持了TC_MQPRIO_MODE_DCB模式,卸载了用户优先级和TC之间的映射关系,新驱动对此进行了增强,通过指定channel模式和hw配置全卸载,即TC_MQPRIO_MODE_CHANNEL模式,可以进一步为每个TC指定队列(各个TC可以不同,但受硬件限制,要求都是2的指数幂)。
+
- 内核相关配置
+
| 配置项 | 功能 |
| :---- | :---- |
| CONFIG_NET_SCH_MQPRIO | 可选,硬件tc卸载功能 |
+
- 软件接口
可通过tc qdisc命令进行配置,参数如下:
<code>tc qdisc add dev <pf name> root mqprio num_tc <tc num> map <P0
P1 P2... > queues count1@offset1 count2@offset2 ... hw 1 mode
channel</code>
@@ -149,39 +188,65 @@ PTP(precision time protocol),精确时钟协议,又称IEEE
1588(v2)协议,
查询配置命令 <code>tc filter show dev eth1 parent ffff:</code>
- 涉及代码与使能
-| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
-| :----: | :----: | :----: |
-| 35244430d624 | net: hns3: refine the struct hane3_tc_info | Y |
-| 5a5c90917467 | net: hns3: add support for tc mqprio offload | Y |
-| d82650be60ee | net: hns3: don't rollback when destroy mqprio fail | Y |
-| a8e76fefe3de | net: hns3: remove tc enable checking | Y |
-| 161ad669e6c2 | net: hns3: reconstruct function hclge_ets_validate()
| Y |
-| ae9e492a3664 | net: hns3: remove redundant client_setup_tc handle | Y |
-| 0472e95ffeac | net: hns3: fix mixed flag HCLGE_FLAG_MQPRIO_ENABLE
and HCLGE_FLAG_DCB_ENABLE | Y |
-
-### SR5: 支持各层级复位
+linux 主线合入信息
+
+| COMMITID | SUBJECT | TAG |
+| :----: | :----: | :----: |
+| 35244430d624 | [net: hns3: refine the struct
hane3_tc_info](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin…
| v5.10-rc6 |
+| 5a5c90917467 | [net: hns3: add support for tc mqprio
offload](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git…
| v5.10-rc6 |
+| ae9e492a3664 | [net: hns3: remove redundant client_setup_tc
handle](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/…
| v5.11-rc6 |
+| 0472e95ffeac | [net: hns3: fix mixed flag HCLGE_FLAG_MQPRIO_ENABLE
and
HCLGE_FLAG_DCB_ENABLE](https://git.kernel.org/pub/scm/linux/kernel/git/torv…
| v5.15-rc2 |
+| 161ad669e6c2 | [net: hns3: reconstruct function
hclge_ets_validate()](https://git.kernel.org/pub/scm/linux/kernel/git/torva…
| v5.14-rc7 |
+| d82650be60ee | [net: hns3: don't rollback when destroy mqprio
fail](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/co…
| v5.15-rc2 |
+| a8e76fefe3de | [net: hns3: remove tc enable
checking](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.gi…
| v5.15-rc2 |
+
+openEuler OLK-5.10使能信息
+
+| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
+| :----: | :----: | :----: |
+| e887fccc775f | net: hns3: refine the struct hane3_tc_info | Y |
+| 46961be39152 | net: hns3: add support for tc mqprio offload | Y |
+| bdb36e4c1180 | net: hns3: remove redundant client_setup_tc handle | Y |
+| 9bb0177d462e | net: hns3: fix mixed flag HCLGE_FLAG_MQPRIO_ENABLE and
HCLGE_FLAG_DCB_ENABLE | Y |
+| 688795be38d6 | net: hns3: reconstruct function hclge_ets_validate | Y |
+| ba250d23d0c6 | net: hns3: don't rollback when destroy mqprio fail | Y |
+| dad19338e6a5 | net: hns3: remove tc enable checking | Y |
+
+### 特性5: 支持各层级复位
- 特性介绍
- 支持function复位
-
function复位包含PF复位和VF复位,PF产生了FLR复位,其管理的所有VF也要一起复位。当VF复位时,仅需复位VF自身。复位前后,网卡的配置需要保持一致。允许高优先级复位打断低优先级复位。
- - 支持FLR复位
-
FLR复位是由PCIE框架下发的复位请求,与function复位类似,区别是触发调用的接口不同。
+
function复位包含PF复位和VF复位,PF产生了复位,其管理的所有VF也要一起复位。当VF复位时,仅需复位VF自身。复位前后,网卡的配置保持一致。
- PF支持global复位
global复位是整个DIE上所有PF、VF复位。通常是在硬件发生严重故障时发生,需要通过global复位重置更多硬件模块才可能恢复。
- PF支持IMP复位
-
IMP复位不仅复位整个DIE上所有PF、VF,同时还复位IMP。在硬件处理上,IMP复位重置的硬件模块和global复位一样。
+
IMP复位不仅复位整个DIE上所有PF、VF,同时还复位IMP固件。在硬件处理上,IMP复位重置的硬件模块和global复位一样。
- 优先级上 IMP复位 > Global复位 > FLR复位 > Function复位
+ 优先级上 IMP复位 > Global复位 >
Function复位,同时产生多个复位源时,优先执行高优先级复位
+ - 支持FLR复位
+
FLR复位是由PCIE框架下发的复位请求,与function复位类似,区别是触发调用的接口不同。
- 内核相关配置
-无
+ FLR依赖PCIe的capbility中置位FLR能力,为可选项
+
+- 复位触发源
+ - 异常中断
+
当芯片检测到NIC硬件异常时,会上报异常中断,NIC驱动会从IMP查询异常中断源及建议恢复方式,包括仅记录日志、VF复位、PF复位、Global复位和IMP复位。
+ - tx timeout
+ tx
timeout是协议栈的发包超时检测机制,默认单个报文5秒钟未发送完成,则会调用NIC驱动的发包超时处理接口。默认处理为function复位。
+ - pci框架触发
+ 解绑或绑定pci设备时,会触发FLR复位
+ AER故障恢复时触发复位
+ - 用户接口触发
+ 通过ethtool工具可以触发PF复位、VF复位、global复位和imp复位
+ echo命令触发flr复位
- 软件接口
- 支持function复位
用户可以通过ethtool --reset ethX dedicated对网口发起function复位。
- 支持FLR复位
- 用户可通过“echo 1 >
/sys/class/net/ethx/device/reset”命令直接发起FLR。FLR依赖PCIe的capbility中置位FLR能力,为可选项。
+ 用户可通过“echo 1 >
/sys/class/net/ethx/device/reset”命令直接发起FLR。FLR依赖PCIe的capbility中置位FLR能力,为可选项。需避免FLR复位与其他复位并发。
- PF支持global复位
用户可以通过ethtool --reset ethx all发起global复位。
@@ -190,60 +255,80 @@ PTP(precision time protocol),精确时钟协议,又称IEEE
1588(v2)协议,
用户可以通过ethtool --reset ethx mgmt发起IMP复位
- 涉及代码与使能
-| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
+
+linux 主线合入信息
+
+| COMMITID | SUBJECT | TAG |
| :----: | :----: | :----: |
-| ddccc5e368a3 | net: hns3: add support for triggering reset by
ethtool | Y |
-| 6b9a97ee43b2 | net: hns3: add PCIe FLR support for PF | Y |
+| ddccc5e368a3 | [net: hns3: add support for triggering reset by
ethtool](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git…
| v5.14-rc4 |
+| 82229c4dbb8a | [net: hns3: fix incorrect components info of ethtool
--reset
command](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git…
| v5.16-rc3 |
+
+openEuler OLK-5.10使能信息
+
+| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
+| :----: | :----: | :----: |
+| 3d489ec0f3a4 | net: hns3: add support for triggering reset by ethtool
| Y |
+| 238a3d250c35 | net: hns3: fix incorrect components info of ethtool
--reset command | Y |
+
+### 特性6: 支持DSCP
-### SR6: 支持DSCP
- 特性介绍
-DSCP由RFC2474定义,它重新命名了IPv4报头中TOS字节和IPv6报头中数据类(TrafficClass)字节,新的名字称为DS字段(Differentiated
ServicesField)。该字段的作用没有变,仍然被QoS工具用来标记数据。DSCP使用高6bit,最低2bit特不用,DSCP范围为0~63。驱动新增配置DSCP和TC的映射。
+
DSCP由RFC2474定义,它重新命名了IPv4报头中TOS字节和IPv6报头中数据类(TrafficClass)字节,新的名字称为DS字段(Differentiated
ServicesField)。该字段的作用没有变,仍然被QoS工具用来标记数据。DSCP使用高6bit,最低2bit特不用,DSCP范围为0~63。驱动新增配置DSCP和TC的映射。
- 内核相关配置
无
- 软件接口
-驱动下发优先级和TC映射命令给IMP时,IMP会将芯片切到priority映射TC模式。驱动下发DSCP和TC映射命令给IMP时,IMP会将芯片切到DSCP映射TC模式。当前dcb标准工具和协议栈支持配置DSCP和priority的映射,驱动新增实现配置DSCP和priority映射的接口,并在驱动中转换成DSCP和TC的映射。
-在debugfs的tm目录增加qos_dscp_map文件,用户cat此文件时将DSCP与priority、TC的映射关系打印出来(仅打印用户已配置的DSCP),以及当前TC映射的模式。
+
驱动下发优先级和TC映射命令给IMP时,IMP会将芯片切到priority映射TC模式。驱动下发DSCP和TC映射命令给IMP时,IMP会将芯片切到DSCP映射TC模式。当前dcb标准工具和协议栈支持配置DSCP和priority的映射,驱动新增实现配置DSCP和priority映射的接口,并在驱动中转换成DSCP和TC的映射。
+
在debugfs的tm目录增加qos_dscp_map文件,用户cat此文件时将DSCP与priority、TC的映射关系打印出来(仅打印用户已配置的DSCP),以及当前TC映射的模式。
- 涉及代码与使能
-| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
-| :----: | :----: | :----: |
-| dfea275e06c2 | net: hns3: optimize converting dscp to priority
process of hns3_nic_select_queue() | Y |
-| fddc02eb583a | net: hns3: debugfs add dump dscp map info | Y |
-| f6e32724ca13 | net: hns3: support ndo_select_queue() | Y |
-| 0ba22bcb222d | net: hns3: add support config dscp map to tc | Y |
-| cfdcb075048c | net: hns3: fix get wrong value of function
hclge_get_dscp_prio() | Y |
-### SR7: 支持FEC统计
-- 特性介绍
-当前标准工具已有接口查询FEC统计。驱动支持查询FEC的可纠码和不可纠码的统计,支持ethtool的FEC查询接口,支持从IMP查询并更新FEC统计。
+linux 主线合入信息
-- 内核相关配置
-无
+| COMMITID | SUBJECT | TAG |
+| :----: | :----: | :----: |
+| dfea275e06c2 | [net: hns3: optimize converting dscp to priority
process of
hns3_nic_select_queue()](https://git.kernel.org/pub/scm/linux/kernel/git/to…
| v5.18-rc7 |
+| fddc02eb583a | [net: hns3: debugfs add dump dscp map
info](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/co…
| v5.18-rc7 |
+| f6e32724ca13 | [net: hns3: support
ndo_select_queue()](https://git.kernel.org/pub/scm/linux/kernel/git/torvald…
| v5.18-rc7 |
+| 0ba22bcb222d | [net: hns3: add support config dscp map to
tc](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/comm…
| v5.18-rc7 |
+| cfdcb075048c | [net: hns3: fix get wrong value of function
hclge_get_dscp_prio()](https://git.kernel.org/pub/scm/linux/kernel/git/torv…
| v5.18-rc7 |
-- 软件接口
-可通过ethtool -I --show-fec
ethx查询FEC统计。FEC统计根据采用的FEC算法不同,分为Base-R和RS两种。Base-R和RS区别z在于可纠块和不可纠块的统计方式,BaseR统计为total
+ per lane; RS只统计total。其中total统计所有lane的和,per
lan是支持的每条lane的统计
+openEuler OLK-5.10使能信息
-- 涉及代码与使能
| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
| :----: | :----: | :----: |
-| 2cb343b9d3e5 | net: hns3: add querying fec statistics | N |
+| 3f0019a0e172 | net: hns3: optimize converting dscp to priority
process of hns3_nic_select_queue() | Y |
+| da7620f6b113 | net: hns3: debugfs add dump dscp map info | Y |
+| 757d2e9b7454 | net: hns3: support ndo_select_queue() | Y |
+| 7a1313b356de | net: hns3: add support config dscp map to tc | Y |
+| fb96fb425027 | net: hns3: fix get wrong value of function
hclge_get_dscp_prio() | Y |
-### SR8: 支持PMU
+### 特性7: 支持PMU
- 特性介绍
-在分析端到端的性能瓶颈时,需要分析软件和硬件每个处理阶段的耗时。硬件在鲲鹏920B/C上为板载网卡提供了IO
PMU硬件模块,NIC驱动以实现一个perf驱动的方式将该模块适配到内核的perf框架中,并提供合理的用户接口给perf用户。用户可以用IO
PMU模块来收集在实际业务场景下的硬件关键点的耗时点。
+在分析端到端的性能瓶颈时,需要分析软件和硬件每个处理阶段的耗时。硬件在鲲鹏920系列处理器上为板载网卡提供了IO
PMU硬件模块,NIC驱动以实现一个perf驱动的方式将该模块适配到内核的perf框架中,并提供合理的用户接口给perf用户。用户可以用IO
PMU模块来收集在实际业务场景下的硬件关键点的耗时点。
- 内核相关配置
- - PMU模块涉及以下1个Config选项:
- CONFIG_HNS3_PMU
+
+| 配置项 | 功能 |
+| :---- | :---- |
+| CONFIG_HNS3_PMU | 可选,IO PMU功能 |
- 软件接口
功能使能需要加载模块hns3_pmu.ko。设备路径名/sys/devices/hns3_pmu_sicl_\<sicl_id>
。可通过命令进行事件查询perf stat -g -e
hns3_pmu_sicl_0/config=0x00002,global=1/ -e
hns3_pmu_sicl_0/config=0x10002,global=1/ -I 1000,
其中config=0xXXXXX代表查询事件。查询显示结果为两列查询事件统计信息,
一列是counter数据,主要事件有: 字节数,包个数,时钟数,中断个数;
另一列是ext_counter数据, 主要事件有:
包个数,时钟数。对数据进行统计计算可以计算出事件的检测值, 计算公式为result =
counter ÷ ext_counter
- 涉及代码与使能
-| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
+
+| COMMITID | SUBJECT | TAG |
| :----: | :----: | :----: |
-| aaaee7b55c9e | docs: perf: Include hns3-pmu.rst in toctree to fix
'htmldocs' WARNING | Y |
-| 66637ab137b4 | drivers/perf: hisi: add driver for HNS3 PMU | Y |
-| 39915b6b5fc2 | drivers/perf: hisi: Add description for HNS3 PMU
driver | Y |
\ No newline at end of file
+| aaaee7b55c9e | [docs: perf: Include hns3-pmu.rst in toctree to fix
'htmldocs'
WARNING](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git…
| v5.18-rc7 |
+| 66637ab137b4 | [drivers/perf: hisi: add driver for HNS3
PMU](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/com…
| v5.18-rc7 |
+| 39915b6b5fc2 | [drivers/perf: hisi: Add description for HNS3 PMU
driver](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/…
| v5.18-rc7 |
+
+openEuler OLK-5.10使能信息
+
+| COMMITID | SUBJECT | openeuler OLK-5.10 ENABLED(Y/N) |
+| :----: | :----: | :----: |
+| 494f4da5dbc1 | docs: perf: Include hns3-pmu.rst in toctree to fix
'htmldocs' WARNING | Y |
+| 5766c797a02a | drivers/perf: hisi: add driver for HNS3 PMU | Y |
+| 36b83702e3cc | drivers/perf: hisi: Add description for HNS3 PMU
driver | Y |
--
2.30.0
1
0
您好!
sig-WayCa SIG 邀请您参加 2023-05-10 15:30 召开的Zoom会议
会议主题:高速网络系列-NIC
会议链接:https://us06web.zoom.us/j/81828264482?pwd=bGFLbmxrRmlaSmp3ak1OL3RLVjc4dz09
会议纪要:https://etherpad.openeuler.org/p/sig-WayCa-meetings
温馨提醒:建议接入会议后修改参会人的姓名,也可以使用您在gitee.com的ID
更多资讯尽在:https://openeuler.org/zh/
Hello!
openEuler sig-WayCa SIG invites you to attend the Zoom conference will be held at 2023-05-10 15:30,
The subject of the conference is 高速网络系列-NIC,
You can join the meeting at https://us06web.zoom.us/j/81828264482?pwd=bGFLbmxrRmlaSmp3ak1OL3RLVjc4dz09.
Add topics at https://etherpad.openeuler.org/p/sig-WayCa-meetings.
Note: You are advised to change the participant name after joining the conference or use your ID at gitee.com.
More information: https://openeuler.org/en/
1
0