我们希望运行带有 QAT 卸载的 ZFS 来进行压缩和校验。
该发行版是带有标准内核的 Centos 8.2:
[root@dellqat ~]# uname -a
Linux dellqat 4.18.0-193.19.1.el8_2.x86_64 #1 SMP Mon Sep 14 14:37:00 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
对于 QAT,我们有:
qat1.7.l.4.11.0-00001(英特尔最新版本)
./configure --enable-icp-trace --enable-icp-debug --enable-icp-log-syslog --enable-kapi
make
make install
对于 ZFS,我们有:
[root@dellqat zfs_latest]# git status
On branch zfs-2.0-release
Your branch is up to date with 'origin/zfs-2.0-release'.
nothing to commit, working tree clean
export ICP_ROOT=/opt/A3C/qat1.7.l.4.11.0-00001
./configure --with-qat=/opt/A3C/qat1.7.l.4.11.0-00001
make
make install
ldconfig
问题在于模块加载顺序:ZFS 无法正确使用 QAT,因为 zfs 模块是在 QAT 之前加载的。不仅如此,QAT 模块还加载在初始化脚本 qat_service 中,其中使用程序 adf_ctl 来初始化 QAT 服务。此 qat_service 被安排为最后运行的服务!
基本上qat_service
启动一个程序adf_ctl
来启动 qat 引擎,因此它不仅仅是一个模块加载顺序的问题:之前
adf_ctl
必须运行 zfs 的 modprobing。
据我所知,zfs 带有一个 dracut 模块 zfs-dracut,用于将 initramfs 中的模块加载到 zfs 中的根分区中。
有谁有使用 Intel QAT 和 ZFS 的经验可以分享吗?
理想情况下,我们希望编写一个 dracut 模块,该模块位于 zfs dracut 模块之前,用于在加载 ZFS 之前在 initramfs 中执行 QAT 的初始化。
答案1
我使用带有 dracut 的自定义 initramfs 让它工作......
02zfsexpandknowledge
您必须排除 zfs :的 dracut 模块
90zfs
。
然后为 qat 添加自定义模块:
[root@dellqat ~]# cd /usr/lib/dracut/modules.d/
[root@dellqat modules.d]# mkdir 89qat
在 89qat 里面放入两个文件:
[root@dellqat modules.d]# cd 89qat/
[root@dellqat 89qat]# cat module-setup.sh
#!/usr/bin/env bash
check() {
return 0
}
depends() {
return 0
}
installkernel() {
instmods qat_dh895xcc
instmods qat_api
instmods usdm_drv
instmods intel_qat
instmods uio
}
install() {
inst_hook pre-mount 10 "${moddir}/qat_start.sh"
inst /etc/dh895xcc_dev0.conf /etc/dh895xcc_dev0.conf
inst /usr/local/bin/adf_ctl /sbin/adf_ctl
inst /usr/bin/sleep /sbin/sleep
}
和
[root@dellqat 89qat]# cat qat_start.sh
#!/bin/sh
modprobe -r qat_api;
/sbin/sleep 1;
modprobe -r qat_dh895xcc;
/sbin/sleep 1;
modprobe qat_dh895xcc;
/sbin/sleep 1;
modprobe qat_api;
/sbin/sleep 1;
/sbin/adf_ctl restart 1>/dev/null 2>&1;
/sbin/sleep 1;
两个文件均应为 chmod 755。
然后使用 dracut 重建图像:
dracut foobar.img $(uname -r) --force -v
为当前内核创建“foobar.img”initramfs 映像。
02zfsexpandknowledge
我不知道为什么,但是如果您还保留 zfs-dracut 模块:和90zfs
,模块就不会按正确的顺序加载。
也许有更多使用 dracut 经验的人可以提供帮助?