From 246458f95a29fd2adccfa82e9dc1fbe4e3e0906b Mon Sep 17 00:00:00 2001 From: "Al-Fahad, Rakib" Date: Thu, 10 Jul 2025 15:56:09 -0700 Subject: [PATCH 1/5] [madvise] Adapted the code to take care of variable names as we transition from 6.13 kernel baseline to 6.15 --- tests/madvise/collect_bpftraces.sh | 14 +++++++++++++- tests/madvise/collect_single_page.sh | 2 +- tests/madvise/enable_kernel_iaa.sh | 13 +++++++++++-- tests/madvise/madvise_test.c | 4 ++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/tests/madvise/collect_bpftraces.sh b/tests/madvise/collect_bpftraces.sh index 2e86690..35ba65a 100755 --- a/tests/madvise/collect_bpftraces.sh +++ b/tests/madvise/collect_bpftraces.sh @@ -75,7 +75,19 @@ else fi echo ${DBATCH} > /proc/sys/vm/page-cluster || handle_error "Failed to set page-cluster" -sysctl vm.compress-batchsize=${CBATCH} || handle_error "Failed to set compress-batchsize" + +# Note: This is a temporary solution as we transition the parameter names. +PARAM_VALUE=$(sysctl -n vm.compress-batchsize 2>/dev/null) +EXIT_CODE=$? +if [ ${EXIT_CODE} -eq 0 ]; then + sysctl vm.compress-batchsize=${CBATCH} || handle_error "Failed to set compress-batchsize" +fi + +PARAM_VALUE=$(sysctl -n vm.reclaim-batchsize 2>/dev/null) +EXIT_CODE=$? +if [ ${EXIT_CODE} -eq 0 ]; then + sysctl vm.reclaim-batchsize=${CBATCH} || handle_error "Failed to set compress-batchsize" +fi # Clear transparent huge pages configuration echo 'never' > /sys/kernel/mm/transparent_hugepage/hugepages-2048kB/enabled || handle_error "Failed to clear hugepages-2048kB configuration" diff --git a/tests/madvise/collect_single_page.sh b/tests/madvise/collect_single_page.sh index 8a7619b..77e30ab 100755 --- a/tests/madvise/collect_single_page.sh +++ b/tests/madvise/collect_single_page.sh @@ -53,7 +53,7 @@ fi comp_list=() # Create the compression algorihm list. Keep the alphabetical order for easy reporting if [ ${iaa_devices} -gt 0 ]; then - comp_list+=("deflate-iaa-canned" "deflate-iaa") + comp_list+=("deflate-iaa") fi comp_list+=("lz4") if [ ${QAT_ENABLED_IN_KERNEL} -gt 0 ]; then diff --git a/tests/madvise/enable_kernel_iaa.sh b/tests/madvise/enable_kernel_iaa.sh index 5142e8e..7d60b81 100755 --- a/tests/madvise/enable_kernel_iaa.sh +++ b/tests/madvise/enable_kernel_iaa.sh @@ -71,8 +71,17 @@ echo $config_json # apply verify-compress echo $verify_compress > ${VERIFY_COMPRESS_PATH} || handle_error "did not change verify_compress" -echo 1 > /sys/bus/dsa/drivers/crypto/g_wqs_per_iaa || handle_error "did not set g_wqs_per_iaa" -echo 1 > /sys/bus/dsa/drivers/crypto/g_consec_descs_per_gwq || handle_error "did not set g_consec_descs_per_gwq" +# Note: This is a temporary solution for during the kernel transition. +if [ -f /sys/bus/dsa/drivers/crypto/g_comp_wqs_per_iaa ];then + echo 1 > /sys/bus/dsa/drivers/crypto/g_comp_wqs_per_iaa || handle_error "did not set g_comp_wqs_per_iaa" +elif [ -f /sys/bus/dsa/drivers/crypto/g_wqs_per_iaa ];then + echo 1 > /sys/bus/dsa/drivers/crypto/g_comp_wqs_per_iaa || handle_error "did not set g_wqs_per_iaa" +fi + +if [ -f /sys/bus/dsa/drivers/crypto/g_consec_descs_per_gwq ];then + echo 1 > /sys/bus/dsa/drivers/crypto/g_consec_descs_per_gwq || handle_error "did not set g_consec_descs_per_gwq" +fi + echo ${iaa_crypto_mode} > /sys/bus/dsa/drivers/crypto/sync_mode || handle_error "could not set sync_mode" #echo sync > /sys/bus/dsa/drivers/crypto/sync_mode || handle_error "could not set sync_mode" diff --git a/tests/madvise/madvise_test.c b/tests/madvise/madvise_test.c index 1801da3..8a1add3 100644 --- a/tests/madvise/madvise_test.c +++ b/tests/madvise/madvise_test.c @@ -123,6 +123,10 @@ int main(int argc, char **argv) // Replace the newline character with a null terminator compressor[newline_pos] = '\0'; int cbatch = read_sysfs("/proc/sys/vm/compress-batchsize"); + // NOTE: This is a temporary solution as we transition to the new kernel + if ( cbatch == EXIT_FAILURE ) { + cbatch = read_sysfs("/proc/sys/vm/reclaim-batchsize"); + } int dbatch = read_sysfs("/proc/sys/vm/page-cluster"); // Add compress and decompress batch setting sprintf(compressor, "%s-c%d-d%d", compressor, cbatch, dbatch); From a93e4e2807bb2db23840840e9b1bb57db278886f Mon Sep 17 00:00:00 2001 From: bravindr Date: Fri, 11 Jul 2025 09:14:51 -0700 Subject: [PATCH 2/5] [madvise] cleaned up the input parameters --- tests/madvise/configure_iaa.sh | 96 ++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 tests/madvise/configure_iaa.sh diff --git a/tests/madvise/configure_iaa.sh b/tests/madvise/configure_iaa.sh new file mode 100755 index 0000000..d57c536 --- /dev/null +++ b/tests/madvise/configure_iaa.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +#SPDX-License-Identifier: BSD-3-Clause +#Copyright (c) 2025, Intel Corporation +#Description: Configure IAA devices + +# Usage : ./configure_iaa.sh +# devices: 0 - all devices or comma seperated device numbers +# wq_size: 0 - all devices or comma seperated device numbers +# For example, ./configure_iaa.sh 1 2 - configure 1 IAA device(s) and 2 WQs per device +# ./configure_iaa.sh 4 2 - configure 4 IAA device(s) and 2 WQs per device + +dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +#echo ${dir} +# +# count iax instances +# +iax_dev_id="0cfe" +num_iax=$(lspci -d:${iax_dev_id} | wc -l) +echo "Found ${num_iax} instances" + +device_num=${1:-$num_iax}; shift +iaa_wqs=${1:-2}; shift +iaa_engines=8 +wq_size=$(( 128 / iaa_wqs )) +mode="dedicated" + +# Take care of the enumeration, if DSA is enabled. +dsa=`lspci | grep -c 0b25` +#set first,step counters to correctly enumerate iax devices based on whether running on guest or host with or without dsa +first=0 +step=1 +[[ $dsa -gt 0 && -d /sys/bus/dsa/devices/dsa0 ]] && first=1 && step=2 +echo "first index: ${first}, step: ${step}" + +# +# disable iax wqs and devices +# +echo "Disable IAA devices before configuring" + +for ((i = ${first}; i < ${step} * ${num_iax}; i += ${step})); do + for ((j = 0; j < ${iaa_wqs}; j += 1)); do + cmd="accel-config disable-wq iax${i}/wq${i}.{j} >& /dev/null" + echo $cmd; eval $cmd + done + cmd="accel-config disable-device iax${i} >& /dev/null" + echo $cmd; eval $cmd +done + +echo "Configuring devices: ${device_num}" + +if [ ${device_num} == $num_iax ]; then + echo "Configuring all devices" + start=${first} + end=$(( ${step} * ${num_iax} )) +else + echo "Configuring devices ${device_num}" + declare -a array=($(echo ${device_num}| tr "," " ")) + start=${array[0]} + if [ ${array[1]} ];then + end=$((${array[1]} + 1 )) + else + end=$((${array[0]} + 1 )) + fi +fi + + + +# +# enable all iax devices and wqs +# +echo "Enable ${start} to ${end}" +for ((i = ${start}; i < ${end}; i += ${step})); do + # Config Devices, Engines and groups + for ((j = 0; j < ${iaa_engines}; j += 1)); do + cmd="accel-config config-engine iax${i}/engine${i}.${j} --group-id=0" + echo $cmd; eval $cmd + done + + # Config WQs + for ((j = 0; j < ${iaa_wqs}; j += 1)); do + # Config WQ: group 0, priority=10, mode=shared, type = kernel name=kernel, driver_name=crypto + cmd="accel-config config-wq iax${i}/wq${i}.${j} -g 0 -s ${wq_size} -p 10 -m ${mode} -y kernel -n iaa_crypto -b 1 -d crypto" + echo $cmd; eval $cmd + done + + # Enable Device and WQs + cmd="accel-config enable-device iax${i}" + echo $cmd; eval $cmd + for ((j = 0; j < ${iaa_wqs}; j += 1)); do + cmd="accel-config enable-wq iax${i}/wq${i}.${j}" + echo $cmd; eval $cmd + done + +done + + From e78f11c18daa04796b1d305e17a610880c2e9ddd Mon Sep 17 00:00:00 2001 From: Binuraj Ravindran Date: Fri, 11 Jul 2025 15:48:10 -0700 Subject: [PATCH 3/5] [madvise] updates for multi-socket --- tests/madvise/configure_iaa.sh | 109 +++++++++++++++++++++------------ 1 file changed, 70 insertions(+), 39 deletions(-) diff --git a/tests/madvise/configure_iaa.sh b/tests/madvise/configure_iaa.sh index d57c536..cecc435 100755 --- a/tests/madvise/configure_iaa.sh +++ b/tests/madvise/configure_iaa.sh @@ -3,26 +3,56 @@ #Copyright (c) 2025, Intel Corporation #Description: Configure IAA devices -# Usage : ./configure_iaa.sh -# devices: 0 - all devices or comma seperated device numbers -# wq_size: 0 - all devices or comma seperated device numbers -# For example, ./configure_iaa.sh 1 2 - configure 1 IAA device(s) and 2 WQs per device -# ./configure_iaa.sh 4 2 - configure 4 IAA device(s) and 2 WQs per device - -dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -#echo ${dir} -# -# count iax instances -# iax_dev_id="0cfe" -num_iax=$(lspci -d:${iax_dev_id} | wc -l) -echo "Found ${num_iax} instances" +num_iaa=$(lspci -d:${iax_dev_id} | wc -l) +sockets=$(lscpu | grep Socket | awk '{print $2}') +echo "Found ${num_iaa} instances in ${sockets} sockets(s)" + +# The same number of devices will be configured in each socket, if there are more than one socket +# Normalize with respect to the number of sockets +device_num_per_socket=$(( num_iaa/sockets )) +num_iaa_per_socket=$(( num_iaa / sockets )) -device_num=${1:-$num_iax}; shift -iaa_wqs=${1:-2}; shift +iaa_wqs=2 +verbose=0 iaa_engines=8 -wq_size=$(( 128 / iaa_wqs )) mode="dedicated" +wq_type="kernel" + + +# Process arguments + +while getopts "d:hq:v" opt; do + case $opt in + d) + device_num_per_socket=$OPTARG + ;; + q) + iaa_wqs=$OPTARG + ;; + v) + verbose=1 + ;; + h) + echo "Usage: $0 [-d ][-q ][-v]" + echo " -d - number of devices" + echo " -q - number of WQs per device" + echo " -v - verbose mode" + echo " -h - help" + exit + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + ;; + esac +done + +LOG="configure_iaa.log" + +# Update wq_size based on number of wqs +wq_size=$(( 128 / iaa_wqs )) + + # Take care of the enumeration, if DSA is enabled. dsa=`lspci | grep -c 0b25` @@ -37,60 +67,61 @@ echo "first index: ${first}, step: ${step}" # echo "Disable IAA devices before configuring" -for ((i = ${first}; i < ${step} * ${num_iax}; i += ${step})); do +for ((i = ${first}; i < ${step} * ${num_iaa}; i += ${step})); do for ((j = 0; j < ${iaa_wqs}; j += 1)); do - cmd="accel-config disable-wq iax${i}/wq${i}.{j} >& /dev/null" - echo $cmd; eval $cmd + cmd="accel-config disable-wq iax${i}/wq${i}.${j} >& /dev/null" + [[ $verbose == 1 ]] && echo $cmd; eval $cmd done cmd="accel-config disable-device iax${i} >& /dev/null" - echo $cmd; eval $cmd + [[ $verbose == 1 ]] && echo $cmd; eval $cmd done -echo "Configuring devices: ${device_num}" -if [ ${device_num} == $num_iax ]; then + + +echo "Configuring ${device_num_per_socket} device(s) out of $num_iaa_per_socket per socket" +if [ "${device_num_per_socket}" -le "${num_iaa_per_socket}" ]; then echo "Configuring all devices" start=${first} - end=$(( ${step} * ${num_iax} )) + end=$(( ${step} * ${device_num_per_socket} )) else - echo "Configuring devices ${device_num}" - declare -a array=($(echo ${device_num}| tr "," " ")) - start=${array[0]} - if [ ${array[1]} ];then - end=$((${array[1]} + 1 )) - else - end=$((${array[0]} + 1 )) - fi + echo "ERROR: Not enough devices" + exit fi - # # enable all iax devices and wqs # -echo "Enable ${start} to ${end}" +for (( socket = 0; socket < ${sockets}; socket += 1 )); do for ((i = ${start}; i < ${end}; i += ${step})); do - # Config Devices, Engines and groups + + echo "Configuring iaa$i on socket ${socket}" + for ((j = 0; j < ${iaa_engines}; j += 1)); do cmd="accel-config config-engine iax${i}/engine${i}.${j} --group-id=0" - echo $cmd; eval $cmd + [[ $verbose == 1 ]] && echo $cmd; eval $cmd done # Config WQs for ((j = 0; j < ${iaa_wqs}; j += 1)); do # Config WQ: group 0, priority=10, mode=shared, type = kernel name=kernel, driver_name=crypto - cmd="accel-config config-wq iax${i}/wq${i}.${j} -g 0 -s ${wq_size} -p 10 -m ${mode} -y kernel -n iaa_crypto -b 1 -d crypto" - echo $cmd; eval $cmd + cmd="accel-config config-wq iax${i}/wq${i}.${j} -g 0 -s ${wq_size} -p 10 -m ${mode} -y ${wq_type} -n iaa_crypto${i}${j} -d crypto" + [[ $verbose == 1 ]] && echo $cmd; eval $cmd done # Enable Device and WQs cmd="accel-config enable-device iax${i}" - echo $cmd; eval $cmd + [[ $verbose == 1 ]] && echo $cmd; eval $cmd + for ((j = 0; j < ${iaa_wqs}; j += 1)); do cmd="accel-config enable-wq iax${i}/wq${i}.${j}" - echo $cmd; eval $cmd + [[ $verbose == 1 ]] && echo $cmd; eval $cmd done done + start=$(( start + ${step} * ${num_iaa_per_socket} )) + end=$(( start + (${step} * ${device_num_per_socket}) )) +done From 617e9f05bc43eb8514be339829c2cccaa8625b4e Mon Sep 17 00:00:00 2001 From: bravindr Date: Fri, 11 Jul 2025 16:04:21 -0700 Subject: [PATCH 4/5] [madvise] added the checks for configured devices --- tests/madvise/configure_iaa.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/madvise/configure_iaa.sh b/tests/madvise/configure_iaa.sh index cecc435..b043cd6 100755 --- a/tests/madvise/configure_iaa.sh +++ b/tests/madvise/configure_iaa.sh @@ -125,3 +125,6 @@ done done +# Check if the configuration is correct +echo "Configured IAA devices:" +accel-config list | grep iax From b83ad98bb9b70a661c9a3ba569c5fada902f862e Mon Sep 17 00:00:00 2001 From: bravindr Date: Fri, 11 Jul 2025 18:32:59 -0700 Subject: [PATCH 5/5] [madvise] refactored IAA configuration file to a single file and removed json files. updated the single and batch scripts accordingly --- tests/madvise/collect_batch.sh | 3 +- tests/madvise/collect_single_page.sh | 3 +- .../{configure_iaa.sh => enable_iaa.sh} | 48 +++++++++++++++++-- tests/madvise/madvise_test.c | 4 +- 4 files changed, 49 insertions(+), 9 deletions(-) rename tests/madvise/{configure_iaa.sh => enable_iaa.sh} (71%) diff --git a/tests/madvise/collect_batch.sh b/tests/madvise/collect_batch.sh index d637d26..876796f 100755 --- a/tests/madvise/collect_batch.sh +++ b/tests/madvise/collect_batch.sh @@ -25,7 +25,8 @@ while getopts "hd:p:" arg; do done # Configure IAA -./enable_kernel_iaa.sh 0 1 ${iaa_devices} 8 2 async +#./enable_kernel_iaa.sh 0 1 ${iaa_devices} 8 2 async +./enable_iaa.sh -d ${iaa_devices} -m async # Configure zswap and zram. ./enable_zswap.sh # swap disk can be used instead of zram. However, zram will avoid any disk access overheads diff --git a/tests/madvise/collect_single_page.sh b/tests/madvise/collect_single_page.sh index 77e30ab..c02f0b7 100755 --- a/tests/madvise/collect_single_page.sh +++ b/tests/madvise/collect_single_page.sh @@ -29,7 +29,8 @@ echo "Number of IAA device: $iaa_devices" # Configure IAA devices if [ ${iaa_devices} -gt 0 ]; then - ./enable_kernel_iaa.sh 0 1 ${iaa_devices} 8 2 sync + #./enable_kernel_iaa.sh 0 1 ${iaa_devices} 8 2 sync + ./enable_iaa.sh -d ${iaa_devices} -m sync fi # Configure zswap and zram. diff --git a/tests/madvise/configure_iaa.sh b/tests/madvise/enable_iaa.sh similarity index 71% rename from tests/madvise/configure_iaa.sh rename to tests/madvise/enable_iaa.sh index b043cd6..4293d47 100755 --- a/tests/madvise/configure_iaa.sh +++ b/tests/madvise/enable_iaa.sh @@ -3,6 +3,8 @@ #Copyright (c) 2025, Intel Corporation #Description: Configure IAA devices +VERIFY_COMPRESS_PATH="/sys/bus/dsa/drivers/crypto/verify_compress" + iax_dev_id="0cfe" num_iaa=$(lspci -d:${iax_dev_id} | wc -l) sockets=$(lscpu | grep Socket | awk '{print $2}') @@ -18,21 +20,35 @@ verbose=0 iaa_engines=8 mode="dedicated" wq_type="kernel" +iaa_crypto_mode="async" +verify_compress=0 + +# Function to handle errors +handle_error() { + echo "Error: $1" + exit 1 +} # Process arguments -while getopts "d:hq:v" opt; do +while getopts "d:hm:q:vD" opt; do case $opt in d) device_num_per_socket=$OPTARG ;; + m) + iaa_crypto_mode=$OPTARG + ;; q) iaa_wqs=$OPTARG ;; - v) + D) verbose=1 ;; + v) + verify_compress=1 + ;; h) echo "Usage: $0 [-d ][-q ][-v]" echo " -d - number of devices" @@ -43,6 +59,7 @@ while getopts "d:hq:v" opt; do ;; \?) echo "Invalid option: -$OPTARG" >&2 + exit ;; esac done @@ -52,8 +69,6 @@ LOG="configure_iaa.log" # Update wq_size based on number of wqs wq_size=$(( 128 / iaa_wqs )) - - # Take care of the enumeration, if DSA is enabled. dsa=`lspci | grep -c 0b25` #set first,step counters to correctly enumerate iax devices based on whether running on guest or host with or without dsa @@ -62,9 +77,14 @@ step=1 [[ $dsa -gt 0 && -d /sys/bus/dsa/devices/dsa0 ]] && first=1 && step=2 echo "first index: ${first}, step: ${step}" + # -# disable iax wqs and devices +# Switch to software compressors and disable IAAs to have a clean start # +COMPRESSOR=/sys/module/zswap/parameters/compressor +last_comp=`cat ${COMPRESSOR}` +echo lzo > ${COMPRESSOR} + echo "Disable IAA devices before configuring" for ((i = ${first}; i < ${step} * ${num_iaa}; i += ${step})); do @@ -76,6 +96,21 @@ for ((i = ${first}; i < ${step} * ${num_iaa}; i += ${step})); do [[ $verbose == 1 ]] && echo $cmd; eval $cmd done +rmmod iaa_crypto +modprobe iaa_crypto + +# apply crypto parameters +echo $verify_compress > ${VERIFY_COMPRESS_PATH} || handle_error "did not change verify_compress" +# Note: This is a temporary solution for during the kernel transition. +if [ -f /sys/bus/dsa/drivers/crypto/g_comp_wqs_per_iaa ];then + echo 1 > /sys/bus/dsa/drivers/crypto/g_comp_wqs_per_iaa || handle_error "did not set g_comp_wqs_per_iaa" +elif [ -f /sys/bus/dsa/drivers/crypto/g_wqs_per_iaa ];then + echo 1 > /sys/bus/dsa/drivers/crypto/g_wqs_per_iaa || handle_error "did not set g_wqs_per_iaa" +fi +if [ -f /sys/bus/dsa/drivers/crypto/g_consec_descs_per_gwq ];then + echo 1 > /sys/bus/dsa/drivers/crypto/g_consec_descs_per_gwq || handle_error "did not set g_consec_descs_per_gwq" +fi +echo ${iaa_crypto_mode} > /sys/bus/dsa/drivers/crypto/sync_mode || handle_error "could not set sync_mode" @@ -124,7 +159,10 @@ done end=$(( start + (${step} * ${device_num_per_socket}) )) done +# Restore the last compressor +echo "$last_comp" > ${COMPRESSOR} # Check if the configuration is correct echo "Configured IAA devices:" accel-config list | grep iax + diff --git a/tests/madvise/madvise_test.c b/tests/madvise/madvise_test.c index 8a1add3..e552d0e 100644 --- a/tests/madvise/madvise_test.c +++ b/tests/madvise/madvise_test.c @@ -33,7 +33,7 @@ long read_sysfs(char *path ){ FILE* fp = fopen(path, "r"); char buf[128]; if (!fp) { - perror("Couldn't open file"); + //perror("Couldn't open file"); return EXIT_FAILURE; } fgets(buf, sizeof(buf), fp); @@ -46,7 +46,7 @@ long read_sysfs_str(char *path , char *str, int size){ FILE* fp = fopen(path, "r"); if (!fp) { - perror("Couldn't open file"); + //perror("Couldn't open file"); return EXIT_FAILURE; } fgets(str, size, fp);