Intel DH895XCC Series QAT und ZFS (2.0.0) – benutzerdefiniertes Initramfs mit Dracut

Intel DH895XCC Series QAT und ZFS (2.0.0) – benutzerdefiniertes Initramfs mit Dracut

Wir möchten ZFS mit QAT-Offloading für Komprimierungen und Prüfsummen ausführen.

Die Distribution ist Centos 8.2 mit dem Standardkernel:

[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

für die QAT haben wir:

qat1.7.l.4.11.0-00001 (neueste Version von Intel)

./configure --enable-icp-trace --enable-icp-debug --enable-icp-log-syslog --enable-kapi
make
make install

für ZFS haben wir:

[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

Das Problem ist die Ladereihenfolge der Module: ZFS verwendet QAT nicht richtig, da das ZFS-Modul vor QAT geladen wird. Darüber hinaus werden die QAT-Module in einem Init-Skript qat_service geladen, in dem das Programm adf_ctl verwendet wird, um die QAT-Dienste zu initialisieren. Dieser qat_service ist als letzter auszuführender Dienst geplant!

Grundsätzlich qat_servicewird ein Programm adf_ctlzum Starten der Qat-Engines gestartet. Daher handelt es sich nicht nur um ein Problem der Ladereihenfolge der Module, sondern zunächst adf_ctlmuss Modprobing für ZFS ausgeführt werden.

So wie ich sehe, wird zfs mit einem Dracut-Modul namens zfs-dracut geliefert, um die Module in initramfs für Root-Partitionen in zfs zu laden.

Hat jemand Erfahrungen mit der Verwendung von Intel QAT mit ZFS, die er teilen möchte?

Idealerweise würden wir gerne ein Dracut-Modul schreiben, das vor dem ZFS-Dracut-Modul läuft, um die Initialisierung von QAT in Initramfs durchzuführen, bevor ZFS geladen wird.

Antwort1

Ich habe es mit einem benutzerdefinierten Initramfs mit Dracut irgendwie zum Laufen gebracht ...

Sie müssen die Dracut-Module für zfs: 02zfsexpandknowledgeund ausschließen 90zfs.

Anschließend fügen Sie ein benutzerdefiniertes Modul für qat hinzu:

[root@dellqat ~]# cd /usr/lib/dracut/modules.d/
[root@dellqat modules.d]# mkdir 89qat

In 89qat legen Sie zwei Dateien ab:

[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
}

Und

[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;

Beide Dateien müssen chmod 755 sein.

Anschließend erstellen Sie das Image mit Dracut neu: dracut foobar.img $(uname -r) --force -v

welches das Initramfs-Image „foobar.img“ für den aktuellen Kernel erstellt.

Ich weiß nicht, warum, aber die Module werden nicht in der richtigen Reihenfolge geladen, wenn Sie auch die zfs-dracut-Module behalten: 02zfsexpandknowledgeund 90zfs.

Vielleicht kann jemand mit mehr Erfahrung mit Dracut helfen?

verwandte Informationen