Intel DH895XCC 系列 QAT 和 ZFS (2.0.0) - 帶有 dracut 的自訂 initramfs

Intel DH895XCC 系列 QAT 和 ZFS (2.0.0) - 帶有 dracut 的自訂 initramfs

我們希望運行帶有 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 經驗的人可能會有所幫助?

相關內容