Skip to content

[madvise] Adapted the code to take care of variable names as we trans… #9

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion tests/madvise/collect_batch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 13 additions & 1 deletion tests/madvise/collect_bpftraces.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
5 changes: 3 additions & 2 deletions tests/madvise/collect_single_page.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -53,7 +54,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
Expand Down
168 changes: 168 additions & 0 deletions tests/madvise/enable_iaa.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
#!/usr/bin/env bash
#SPDX-License-Identifier: BSD-3-Clause
#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}')
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 ))

iaa_wqs=2
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:hm:q:vD" opt; do
case $opt in
d)
device_num_per_socket=$OPTARG
;;
m)
iaa_crypto_mode=$OPTARG
;;
q)
iaa_wqs=$OPTARG
;;
D)
verbose=1
;;
v)
verify_compress=1
;;
h)
echo "Usage: $0 [-d <device_count>][-q <wq_per_device>][-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
exit
;;
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`
#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}"


#
# 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
for ((j = 0; j < ${iaa_wqs}; j += 1)); do
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"
[[ $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"



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} * ${device_num_per_socket} ))
else
echo "ERROR: Not enough devices"
exit
fi


#
# enable all iax devices and wqs
#
for (( socket = 0; socket < ${sockets}; socket += 1 )); do
for ((i = ${start}; i < ${end}; i += ${step})); do

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"
[[ $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 ${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}"
[[ $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}"
[[ $verbose == 1 ]] && echo $cmd; eval $cmd
done

done
start=$(( start + ${step} * ${num_iaa_per_socket} ))
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

13 changes: 11 additions & 2 deletions tests/madvise/enable_kernel_iaa.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
8 changes: 6 additions & 2 deletions tests/madvise/madvise_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down