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 서비스를 초기화하기 위해 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로 작업하게 되었습니다...

02zfsexpandknowledgezfs: 및 에 대한 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에 대한 경험이 더 많은 사람이 도움이 될 수 있을까요?

관련 정보