mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
perf test: Allow tolerance for leader sampling test
There is a known issue that the leader sampling is inconsistent, since throttle only affect leader, not the slave. The detail is in [1]. To maintain test coverage, this patch sets a tolerance rate of 80% to accommodate the throttled samples and prevent test failures due to throttling. [1] lore.kernel.org/20250328182752.769662-1-ctshao@google.com Suggested-by: Ian Rogers <irogers@google.com> Suggested-by: Thomas Richter <tmricht@linux.ibm.com> Reviewed-by: Ian Rogers <irogers@google.com> Signed-off-by: Chun-Tse Shao <ctshao@google.com> Co-developed-by: Thomas Richter <tmricht@linux.ibm.com> Signed-off-by: Thomas Richter <tmricht@linux.ibm.com> Tested-by: Thomas Richter <tmricht@linux.ibm.com> Cc: Alexander Gordeev <agordeev@linux.ibm.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Sumanth Korikkar <sumanthk@linux.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Link: https://lore.kernel.org/r/20250430140611.599078-1-tmricht@linux.ibm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
cb422594d6
commit
1c5721ca89
|
|
@ -240,22 +240,43 @@ test_leader_sampling() {
|
|||
err=1
|
||||
return
|
||||
fi
|
||||
perf script -i "${perfdata}" | grep brstack > $script_output
|
||||
# Check if the two instruction counts are equal in each record.
|
||||
# However, the throttling code doesn't consider event grouping. During throttling, only the
|
||||
# leader is stopped, causing the slave's counts significantly higher. To temporarily solve this,
|
||||
# let's set the tolerance rate to 80%.
|
||||
# TODO: Revert the code for tolerance once the throttling mechanism is fixed.
|
||||
index=0
|
||||
perf script -i "${perfdata}" > "${script_output}"
|
||||
valid_counts=0
|
||||
invalid_counts=0
|
||||
tolerance_rate=0.8
|
||||
while IFS= read -r line
|
||||
do
|
||||
# Check if the two instruction counts are equal in each record
|
||||
cycles=$(echo $line | awk '{for(i=1;i<=NF;i++) if($i=="cycles:") print $(i-1)}')
|
||||
if [ $(($index%2)) -ne 0 ] && [ ${cycles}x != ${prev_cycles}x ]
|
||||
then
|
||||
echo "Leader sampling [Failed inconsistent cycles count]"
|
||||
err=1
|
||||
return
|
||||
invalid_counts=$(($invalid_counts+1))
|
||||
else
|
||||
valid_counts=$(($valid_counts+1))
|
||||
fi
|
||||
index=$(($index+1))
|
||||
prev_cycles=$cycles
|
||||
done < "${script_output}"
|
||||
echo "Basic leader sampling test [Success]"
|
||||
total_counts=$(bc <<< "$invalid_counts+$valid_counts")
|
||||
if (( $(bc <<< "$total_counts <= 0") ))
|
||||
then
|
||||
echo "Leader sampling [No sample generated]"
|
||||
err=1
|
||||
return
|
||||
fi
|
||||
isok=$(bc <<< "scale=2; if (($invalid_counts/$total_counts) < (1-$tolerance_rate)) { 0 } else { 1 };")
|
||||
if [ $isok -eq 1 ]
|
||||
then
|
||||
echo "Leader sampling [Failed inconsistent cycles count]"
|
||||
err=1
|
||||
else
|
||||
echo "Basic leader sampling test [Success]"
|
||||
fi
|
||||
}
|
||||
|
||||
test_topdown_leader_sampling() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user