%20-%20dracut%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%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 (Intel の最新版)
./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 モジュールは init スクリプト qat_service にロードされ、そこでプログラム adf_ctl を使用して QAT サービスを初期化します。この qat_service は、最後に実行されるサービスとしてスケジュールされます。
基本qat_service
的に、qat エンジンを起動するプログラムを起動するadf_ctl
ため、モジュールの読み込み順序の問題だけではありません。その前に、zfs の modprobing を
adf_ctl
実行する必要があります。
私の見るところ、zfs には、zfs のルート パーティションの initramfs にモジュールをロードするための dracut モジュール zfs-dracut が付属しています。
ZFS で Intel QAT を使用した経験を共有できる人はいますか?
理想的には、ZFS をロードする前に initramfs で QAT の init を実行するために、zfs dracut モジュールの前に配置される dracut モジュールを作成したいと考えています。
答え1
dracut を使用したカスタム initramfs でなんとか動作させることができました...
02zfsexpandknowledge
zfs:およびの dracut モジュールを除外する必要があります
90zfs
。
次に、qat のカスタム モジュールを追加します。
[root@dellqat ~]# cd /usr/lib/dracut/modules.d/
[root@dellqat modules.d]# mkdir 89qat
89qat の中に 2 つのファイルを置きます:
[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 の経験が豊富な人が助けてくれるかもしれませんか?