%20-%20%E5%B8%B6%E6%9C%89%20dracut%20%E7%9A%84%E8%87%AA%E8%A8%82%20initramfs.png)
我們希望運行帶有 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 引擎,因此這不僅僅是模組載入順序的問題:在 zfs 的 modprobing 之前
adf_ctl
必須執行。
據我所知,zfs 附帶了一個 dracut 模組 zfs-dracut,用於在 initramfs 中載入 zfs 根分區的模組。
有誰可以分享使用 Intel QAT 和 ZFS 的經驗嗎?
理想情況下,我們希望在 zfs dracut 模組之前編寫一個 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 經驗的人可能會有所幫助?