All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cyril Hrubis <chrubis@suse.cz>
To: Piotr Kubaj <piotr.kubaj@intel.com>
Cc: daniel.niestepski@intel.com, tomasz.ossowski@intel.com,
	helena.anna.dubel@intel.com, rafael.j.wysocki@intel.com,
	ltp@lists.linux.it
Subject: Re: [LTP] [PATCH] thermal: add new test group
Date: Thu, 6 Nov 2025 13:46:21 +0100	[thread overview]
Message-ID: <aQyYnbgewc4AptZJ@yuki.lan> (raw)
In-Reply-To: <20251106114337.550054-1-piotr.kubaj@intel.com>

Hi!
First of all, the tst_test.sh test library is in maitenance mode and new
shell tests should use the tst_loader.sh instead. Have a look at the
testcases/kernel/mem/vma/vma05.sh test on how does it look like.

> diff --git a/testcases/kernel/thermal/thermal01.sh b/testcases/kernel/thermal/thermal01.sh
> new file mode 100755
> index 000000000..723591d94
> --- /dev/null
> +++ b/testcases/kernel/thermal/thermal01.sh
> @@ -0,0 +1,92 @@
> +#!/usr/bin/env bash
> +###############################################################################
> +# Copyright (C) 2025 Intel - http://www.intel.com/
> +#
> +# GNU General Public License for more details.
> +###############################################################################
> +# Contributors:
> +#   Piotr Kubaj <piotr.kubaj@intel.com> (Intel)
> +#     -Initial draft.
> +# Check the CPU package thermal sensor interface for Intel platforms.
> +# It works by checking the initial count of thermal interrupts. Then it
> +# decreases the threshold for sending a thermal interrupt to just above
> +# the current temperature and runs a workload on the CPU. Finally, it restores
> +# the original thermal threshold and checks whether the number of thermal
> +# interrupts increased.

This should be a doc comment instead, the doc comments are parsed and
exported into the LTP documentation:

# ---
# doc
# Tests the CPU package thermal sensor interface for Intel platforms.
#
# It works by checking the initial count of thermal interrupts. Then it
# decreases the threshold for sending a thermal interrupt to just above
# the current temperature and runs a workload on the CPU. Finally, it restores
# the original thermal threshold and checks whether the number of thermal
# interrupts increased.
# ---

Also the tst_loader.sh supports for various metadata, since this test is
supported only on x86 platforms and I guess needs root we can specify
that in the environment as:

# ---
# env
# {
#  "needs_root": true,
#  "supported_archs": ["x86", "x86_64"]
# }
# ---

> +###############################################################################
> +
> +export TST_TESTFUNC=test_interrupt_events
> +export TCID="thermal_interrupt_events"
> +
> +pkg_thermal=""
> +thermal_zone_numbers=""
> +temp=""
> +temp_high=""
> +
> +test_interrupt_events() {
> +	line=$(grep "Thermal event interrupts" /proc/interrupts)
> +	if [ $? -eq 0 ]; then
> +		interrupt_array_init=$(echo "$line" | tr -d "a-zA-Z:" | awk '{$1=$1;print}')
> +		echo "Initial values of thermal interrupt counters: $interrupt_array_init"
> +		num=$(nproc)
> +		echo "Number of logical cores: $num"
> +	else
> +		tst_brk TBROK "Thermal event interrupts is not found."

This should be TCONF which means "test cannot run on this machine"
rather than TBROK which means "test is broken".

> +	fi
> +
> +	# Below we check for the thermal_zone which uses x86_pkg_temp driver
> +	thermal_zone_numbers=$(grep -l x86_pkg_temp /sys/class/thermal/thermal_zone*/type | sed 's/[^0-9]//g' | tr -t '\n' ' ')
> +	echo "x86_pkg_temp thermal zones: $thermal_zone_numbers"
> +
> +	if [ -z $thermal_zone_numbers ]; then
> +		tst_res TFAIL "No x86_pkg_temp thermal zones found"
> +	fi

This should possibly be TCONF as well. Also this should be tst_brk
instead, since we will otherwise print the TPASS at the end of the
script.

> +	for i in $thermal_zone_numbers; do
> +		echo "Currently testing x86_pkg_temp thermal_zone$i"
> +		TEMP=/sys/class/thermal/thermal_zone$i/temp
> +		temp=$(cat "$TEMP")
> +		echo "thermal_zone$i current temperature is $temp"
> +		if [ "$(echo "$temp <= 0" | bc)" -eq 1 ]; then
> +			tst_brk TBROK "Unexpected zone temperature value $temp"
> +		fi
> +		trip=$(cat /sys/class/thermal/thermal_zone$i/trip_point_1_temp)
> +		# Setting trip_point_1_temp for termal_zone$i to $temp + 10 (0.001°C)
> +		temp_high=$(( temp + 10 ))
> +		echo $temp_high > /sys/class/thermal/thermal_zone$i/trip_point_1_temp
> +		run_time=30
> +		sleep_time=10
> +		while [ $sleep_time -gt 0 ]; do
> +			which -s stress-ng
> +			[ $? -eq 0 ] ||  tst_brk TBROK "stress-ng is missing"
> +			stress-ng --matrix 0 -t $run_time

We try to avoid dependencies on tools that are not installed by default
if possible. Looking around we do have genload tool in LTP already:

			genload --cpu $(getconf _NPROCESSORS_ONLN) -t $run_time

> +			temp_cur=$(cat "$TEMP")
> +			echo "temp_cur: $temp_cur"
> +			[ $temp_cur -gt $temp_high ] && break
> +			sleep $sleep_time
> +			run_time=$(( run_time - 3 ))
> +			sleep_time=$(( sleep_time - 1 ))
> +		done
> +		[ $temp_cur -gt $temp_high ] || tst_res TFAIL "Zone temperature is not rising as expected"
> +
> +		# Restore the original trip_point_1_temp value
> +		echo $trip > /sys/class/thermal/thermal_zone$i/trip_point_1_temp
> +
> +		# Check whether thermal interrupts count actually increased
> +		interrupt_array_later=$(grep "Thermal event interrupts" /proc/interrupts | \
> +			tr -d "a-zA-Z:" | awk '{$1=$1;print}')
> +		echo "Current values of thermal interrupt counters: $interrupt_array_later"
> +		for j in $(seq 1 "$num"); do
> +			interrupt_later=$(echo "$interrupt_array_later" | cut -d " " -f  "$j")
> +			interrupt_init=$(echo "$interrupt_array_init" | cut -d " " -f  "$j")
> +			if [ $interrupt_later -le $interrupt_init ]; then
> +				tst_res TFAIL "x86 package thermal interrupt did not trigger"
> +			else
> +				break
> +			fi
> +		done
> +	done
> +	tst_res TPASS "x86 package thermal interrupt triggered"
> +}
> +
> +. tst_test.sh
> +tst_run

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2025-11-06 12:45 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-06 11:43 [LTP] [PATCH] thermal: add new test group Piotr Kubaj
2025-11-06 12:46 ` Cyril Hrubis [this message]
2025-11-06 16:50   ` Petr Vorel
2025-11-10 10:33     ` Cyril Hrubis
2025-11-10 10:31 ` Cyril Hrubis
  -- strict thread matches above, loose matches on Subject: below --
2026-01-19  8:51 Piotr Kubaj
2026-01-19 13:20 ` Andrea Cervesato via ltp

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aQyYnbgewc4AptZJ@yuki.lan \
    --to=chrubis@suse.cz \
    --cc=daniel.niestepski@intel.com \
    --cc=helena.anna.dubel@intel.com \
    --cc=ltp@lists.linux.it \
    --cc=piotr.kubaj@intel.com \
    --cc=rafael.j.wysocki@intel.com \
    --cc=tomasz.ossowski@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.