From 51b774526070ba04aa5a7a5238524d8e61686fed Mon Sep 17 00:00:00 2001 From: Hyeongju Johannes Lee Date: Thu, 26 Sep 2024 12:32:11 -0700 Subject: [PATCH] qat, initcontainer: add enablement of auto_reset Signed-off-by: Hyeongju Johannes Lee --- .../docker/intel-qat-initcontainer.Dockerfile | 3 +- .../intel-qat-initcontainer.Dockerfile.in | 4 +- cmd/qat_plugin/README.md | 1 + demo/qat-autoreset.sh | 45 +++++++++++++++++++ 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100755 demo/qat-autoreset.sh diff --git a/build/docker/intel-qat-initcontainer.Dockerfile b/build/docker/intel-qat-initcontainer.Dockerfile index 30cff41d..48623c51 100644 --- a/build/docker/intel-qat-initcontainer.Dockerfile +++ b/build/docker/intel-qat-initcontainer.Dockerfile @@ -64,5 +64,6 @@ LABEL summary='IntelĀ® QAT initcontainer for Kubernetes' LABEL description='Intel QAT initcontainer initializes devices' COPY --from=builder /install_root / COPY demo/qat-init.sh /usr/local/bin/ +COPY demo/qat-autoreset.sh /usr/local/bin/ WORKDIR /qat-init -ENTRYPOINT ["/usr/local/bin/qat-init.sh"] +ENTRYPOINT ["bash", "-c", "/usr/local/bin/qat-init.sh && /usr/local/bin/qat-autoreset.sh"] diff --git a/build/docker/templates/intel-qat-initcontainer.Dockerfile.in b/build/docker/templates/intel-qat-initcontainer.Dockerfile.in index f2d27e5a..3bd549f5 100644 --- a/build/docker/templates/intel-qat-initcontainer.Dockerfile.in +++ b/build/docker/templates/intel-qat-initcontainer.Dockerfile.in @@ -22,6 +22,8 @@ COPY --from=builder /install_root / COPY demo/qat-init.sh /usr/local/bin/ +COPY demo/qat-autoreset.sh /usr/local/bin/ + WORKDIR /qat-init -ENTRYPOINT ["/usr/local/bin/qat-init.sh"] +ENTRYPOINT ["bash", "-c", "/usr/local/bin/qat-init.sh && /usr/local/bin/qat-autoreset.sh"] diff --git a/cmd/qat_plugin/README.md b/cmd/qat_plugin/README.md index d6bfdf0f..780ae4c8 100644 --- a/cmd/qat_plugin/README.md +++ b/cmd/qat_plugin/README.md @@ -131,6 +131,7 @@ In addition to the default configuration, you can add device-specific configurat | Device | Possible Configuration | How To Customize | Options | Notes | |:-------|:-----------------------|:-----------------|:--------|:------| | 4xxx, 401xx, 402xx, 420xx | [cfg_services](https://github.com/torvalds/linux/blob/v6.6-rc5/Documentation/ABI/testing/sysfs-driver-qat) reports the configured services (crypto services or compression services) of the QAT device. | `ServicesEnabled=` | compress:`dc`, crypto:`sym;asym`,
crypto+compress:`asym;dc`,
crypto+compress:`sym;dc` | 4xxx/401xx/402xx: Linux 6.0+ kernel. 420xx: Linux 6.8+ kernel. | +| 4xxx, 401xx, 402xx, 420xx | [auto_reset](https://github.com/torvalds/linux/blob/a38297e3fb012ddfa7ce0321a7e5a8daeb1872b6/Documentation/ABI/testing/sysfs-driver-qat#L145) reports the setting of the QAT device's automatic error recovery functionality. | `AutoresetEnabled=` | `on`, `off`, | Linux 6.8+ kernel. | To create a provisioning `configMap`, run the following command before deploying initcontainer: diff --git a/demo/qat-autoreset.sh b/demo/qat-autoreset.sh new file mode 100755 index 00000000..0e144175 --- /dev/null +++ b/demo/qat-autoreset.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +NODE_NAME="${NODE_NAME:-}" +ENABLED_QAT_PF_PCIIDS=${ENABLED_QAT_PF_PCIIDS:-37c8 4940 4942 4944 4946} +DEVS=$(for pf in $ENABLED_QAT_PF_PCIIDS; do lspci -n | grep -e "$pf" | grep -o -e "^\\S*"; done) + +AUTORESET_ENABLED="NONE" +AUTORESET_ENABLED_FOUND="FALSE" +AUTORESET_OPTIONS_LIST="on off" + +check_config() { + [ -f "conf/qat.conf" ] && AUTORESET_ENABLED=$(grep "^AutoresetEnabled=" conf/qat.conf | cut -d= -f 2 | grep '\S') + [ -f "conf/qat-$NODE_NAME.conf" ] && AUTORESET_ENABLED=$(grep "^AutoresetEnabled=" conf/qat-"$NODE_NAME".conf | cut -d= -f 2 | grep '\S') + + if [ "$AUTORESET_ENABLED" != "NONE" ]; then + AUTORESET_ENABLED_FOUND="FALSE" + for OPTION in $AUTORESET_OPTIONS_LIST + do + if [ "$OPTION" = "$AUTORESET_ENABLED" ]; then + AUTORESET_ENABLED_FOUND="TRUE" + break + fi + done + fi +} + +enable_auto_reset() { + if [ "$AUTORESET_ENABLED_FOUND" = "TRUE" ]; then + for dev in $DEVS; do + devpath="/sys/bus/pci/devices/0000:$dev" + autoreset_path="$devpath/qat/auto_reset" + if ! test -w "$autoreset_path"; then + echo "error: $autoreset_path is not found or not writable. Check if QAT driver module is loaded. Skipping..." + exit 1 + fi + if [ "$(cat "$autoreset_path")" = "$AUTORESET_ENABLED" ]; then + echo "$devpath's auto reset is already $AUTORESET_ENABLED" + else + echo "$AUTORESET_ENABLED" > "$autoreset_path" && echo "$devpath's auto reset has been set $AUTORESET_ENABLED" + fi + done + fi +} + +check_config +enable_auto_reset