%20-%20dracut%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%EC%82%AC%EC%9A%A9%EC%9E%90%20%EC%A0%95%EC%9D%98%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 서비스를 초기화하기 위해 adf_ctl 프로그램을 사용하는 초기화 스크립트 qat_service에 로드됩니다. 이 qat_service는 마지막으로 실행되는 서비스로 예약되어 있습니다!
기본적 으로 qat 엔진을 시작하는 qat_service
프로그램을 시작하므로 adf_ctl
모듈 로딩 순서의 문제일 뿐만 아니라 zfs에 대한 modprobing을
adf_ctl
실행해야 합니다.
내가 볼 수 있듯이 zfs에는 zfs의 루트 파티션에 대해 initramfs의 모듈을 로드하기 위한 dracut 모듈 zfs-dracut이 함께 제공됩니다.
ZFS에서 Intel QAT 사용에 관해 공유해 주실 수 있는 사람이 있습니까?
이상적으로 우리는 ZFS를 로드하기 전에 initramfs에서 QAT 초기화를 수행하기 위해 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 안에 두 개의 파일을 넣습니다.
[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 이미지를 생성합니다.
이유는 모르겠지만 zfs-dracut 모듈도 유지하면 모듈이 올바른 순서로 로드되지 02zfsexpandknowledge
않습니다 90zfs
.
dracut에 대한 경험이 더 많은 사람이 도움이 될 수 있을까요?