diff options
-rw-r--r-- | units/cpu/test-plan.pxu | 2 | ||||
-rw-r--r-- | units/power-management/jobs.pxu | 61 |
2 files changed, 63 insertions, 0 deletions
diff --git a/units/cpu/test-plan.pxu b/units/cpu/test-plan.pxu index e5313f1..5d06090 100644 --- a/units/cpu/test-plan.pxu +++ b/units/cpu/test-plan.pxu @@ -32,6 +32,8 @@ include: cpu/offlining_test certification-status=blocker cpu/topology certification-status=blocker cpu/clocktest + power-management/cpu-low-power-idle + power-management/system-low-power-idle id: cpu-cert-blockers unit: test plan diff --git a/units/power-management/jobs.pxu b/units/power-management/jobs.pxu index 5dfa56c..37aef99 100644 --- a/units/power-management/jobs.pxu +++ b/units/power-management/jobs.pxu @@ -331,6 +331,67 @@ plugin: shell command: failed_service_check.sh estimated_duration: 1.0 +id: power-management/cpu-low-power-idle +category_id: com.canonical.plainbox::power-management +_summary: CPU low power idle residency check +_description: + Check if CPU can achieve low power idle when screen off. + For more detail, please refer to https://www.kernel.org/doc/html/latest/firmware-guide/acpi/lpit.html. +unit: job +plugin: shell +requires: + cpuinfo.cpu_lpi_file in ('low_power_idle_cpu_residency_us', 'package_cstate_show') + package.name == 'x11-xserver-utils' +command: + cpu_lpi_file=$(cpuinfo_resource.py | grep cpu_lpi_file | awk '{ print $2 }') + if [ "$cpu_lpi_file" == "low_power_idle_cpu_residency_us" ]; then + echo "check /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us" + xset dpms force off + sleep 20 + xset dpms force on + residency=$(cat /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us) + else + echo "check /sys/kernel/debug/pmc_core/package_cstate_show" + before=$(cat < /sys/kernel/debug/pmc_core/package_cstate_show | grep C10 | awk '{ print $4 }') + xset dpms force off + sleep 20 + xset dpms force on + after=$(cat < /sys/kernel/debug/pmc_core/package_cstate_show | grep C10 | awk '{ print $4 }') + residency=$((after-before)) + fi + [ $residency -gt 0 ] || exit 1 +user: root +estimated_duration: 25 + +id: power-management/system-low-power-idle +category_id: com.canonical.plainbox::power-management +_summary: System low power idle residency check +_description: + Check if system can achieve low power idle in suspend. + For more detail, plesae refer to https://www.kernel.org/doc/html/latest/firmware-guide/acpi/lpit.html. +unit: job +plugin: shell +requires: + cpuinfo.sys_lpi_file in ('low_power_idle_system_residency_us', 'slp_s0_residency_usec') +command: + sys_lpi_file=$(cpuinfo_resource.py | grep sys_lpi_file | awk '{ print $2 }') + echo "mem_sleep: $(cat /sys/power/mem_sleep)" + dmesg | grep ACPI | grep supports | sed 's/\[.*ACPI/ACPI/' + echo "Content of /etc/default/grub:" + cat /etc/default/grub + rtcwake --mode freeze -s 10 + if [ "$sys_lpi_file" == "low_power_idle_system_residency_us" ]; then + echo "check /sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us" + residency=$(cat /sys/devices/system/cpu/cpuidle/low_power_idle_system_residency_us) + else + echo "check /sys/kernel/debug/pmc_core/slp_s0_residency_usec" + residency=$(cat /sys/kernel/debug/pmc_core/slp_s0_residency_usec) + fi + # shellcheck disable=SC2086 + [ $residency -gt 0 ] || exit 1 +user: root +estimated_duration: 15 + unit: template template-resource: model_assertion template-unit: job |