openwrt/target/linux
John Audia 92ff3dfd84 x86: switch from CONFIG_HZ_PERIODIC to CONFIG_NO_HZ_IDLE
Running with CONFIG_HZ_PERIODIC=y keeps the scheduler tick running
continuously, which produces higher jitter and lower power efficiency.
In contrast, CONFIG_NO_HZ_IDLE=y (the upstream default) stops the tick
only when the CPU is idle, giving lower idle power and normal runtime
jitter.

An Intel N150-based router/firewall was tested using two kernel builds:
one with CONFIG_HZ_PERIODIC=y, and one with CONFIG_NO_HZ_IDLE=y. Power
consumption was measured while the system was essentially idle (no
meaningful traffic). The CONFIG_NO_HZ_IDLE=y build consistently used
less power.

Details: The two power-measurement methods were:

 1. PkgWatt from turbostat (software)
 2. Wall-power measurement using a Kill-A-Watt (hardware)

The test began by zeroing the Kill-A-Watt and simultaneously running:
turbostat --quiet --Summary --interval 10 --show Busy%,PkgWatt

The test duration was defined by the time required for the Kill-A-Watt
to accumulate 0.005 kWh, after which the average wattage was calculated.

Results:
+----------------------+-----------------+----------------+-----------+
|  Metric              |   HZ_PERIODIC   |   NO_HZ_IDLE   | Delta %   |
+----------------------+-----------------+----------------+-----------+
|  PkgWatt             |  3.59 ± 0.38    |  3.38 ± 0.34   |  -5.9 %   |
+----------------------+-----------------+----------------+-----------+
| Avg wattage at wall  |      12.47      |     12.00      |  -3.77 %  |
+----------------------+-----------------+----------------+-----------+

The mean PkgWatt difference is 210 mW (5.9%) in favor of
CONFIG_NO_HZ_IDLE=y, with a t-statistic of ~3.17 and p ≈ 0.002.

Wall-power measurements show a 470 mW (3.77%) reduction under
CONFIG_NO_HZ_IDLE=y.

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/21470
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-09 16:35:34 +01:00
..
airoha airoha: an7581: correct led nodename 2026-01-05 01:00:25 +01:00
apm821xx kernel: disable non layout u-boot,env 2025-11-28 01:20:33 +01:00
armsr kernel: drop CONFIG_ARM64_CONTPTE from target configs 2025-11-26 21:08:34 +02:00
at91 treewide: fix coccinelle checks 2025-12-02 23:32:42 +01:00
ath79 treewide: replace remove_new with remove 2026-01-03 17:27:25 +01:00
bcm27xx kernel: as21xxx: backport patch improve PHY HW reset 2026-01-04 16:41:29 +01:00
bcm47xx bcm47xx: Fix lzma-loader compilation 2025-12-04 21:41:40 +01:00
bcm53xx bcm53xx: add support for ASUS RT-AC3200 and ASUS RT-AC5300 2025-12-18 18:18:48 +00:00
bcm4908 kernel: disable non layout u-boot,env 2025-11-28 01:20:33 +01:00
bmips kernel: refresh upstreamed patches 2026-01-04 16:41:28 +01:00
d1 kernel: remove duplicate PREEMPT settings 2025-06-08 15:59:55 +02:00
econet kernel: bump 6.12 to 6.12.62 2025-12-17 00:27:21 +01:00
gemini gemini: Add module for VSC73xx switches 2025-09-15 23:12:56 +02:00
generic kernel: net: phy: realtek: replace patches with upstream backports 2026-01-09 12:55:02 +00:00
imx imx: drop support for kernel 6.6 2025-11-22 10:11:52 +01:00
ipq40xx kernel: as21xxx: backport patch improve PHY HW reset 2026-01-04 16:41:29 +01:00
ipq806x Revert "treewide: fixup ath10k nodes" 2025-11-29 17:56:11 +01:00
ixp4xx ixp4xx: fix bug in Actiontec DTS file 2026-01-04 16:51:31 +01:00
kirkwood kirkwood: add aliases and new partition for support D-Link DNS-325 A1 2025-11-25 15:41:38 +01:00
lantiq treewide: dts: update rtl836x switch sck/sda gpio properties 2025-12-23 18:22:02 +01:00
layerscape kernel: phylink: disable autoneg for interfaces that have no inband 2026-01-04 16:41:30 +01:00
loongarch64 loongarch64: Disable strict alignment to fix BPF program failures 2025-12-10 19:10:30 +01:00
malta malta: drop 6.6 support 2025-07-20 23:37:37 +02:00
mediatek mediatek: fix 2.5G PHY LED polarity for MT7987 2026-01-09 12:59:54 +00:00
microchipsw microchipsw: sync with DTS sent upstream 2025-12-24 10:57:17 +01:00
mpc85xx mpc85xx: add support for Watchguard Firebox T10-W, T15(-W) 2025-12-10 23:48:48 +01:00
mvebu kernel: as21xxx: backport patch improve PHY HW reset 2026-01-04 16:41:29 +01:00
mxs mxs: drop 6.6 support 2025-05-24 16:15:53 +02:00
octeon treewide: replace numbers with GPIO_ACTIVE 2025-10-08 14:26:24 +02:00
omap omap: drop support for kernel 6.6 2025-11-22 10:16:35 +01:00
pistachio kernel: bump 6.12 to 6.12.62 2025-12-17 00:27:21 +01:00
qoriq qoriq: drop support for kernel 6.6 2025-11-26 17:21:14 +02:00
qualcommax qualcommax: ipq50xx: Correct USB DWC3 wrapper interrupts 2026-01-08 18:38:51 +01:00
qualcommbe qualcommbe: update ipq9574 PCS driver 2025-11-30 16:51:12 +01:00
ramips kernel: phylink: disable autoneg for interfaces that have no inband 2026-01-04 16:41:30 +01:00
realtek realtek: phy: keep register state during RTL8214FC fibre check 2026-01-09 17:20:35 +02:00
rockchip rockchip: fix kernel tag for backported patches 2026-01-07 10:44:11 +01:00
sifiveu kernel: remove duplicate PREEMPT settings 2025-06-08 15:59:55 +02:00
siflower kernel: bump 6.12 to 6.12.63 2025-12-31 17:55:44 +01:00
starfive kernel: as21xxx: backport patch improve PHY HW reset 2026-01-04 16:41:29 +01:00
stm32 stm32: drop kernel 6.6 support 2025-10-22 14:56:15 +02:00
sunxi sunxi: image: sync target profiles names with DT compatible 2025-12-16 01:44:34 +01:00
tegra tegra: promote kernel 6.12 as default 2025-11-11 21:23:14 +01:00
uml kernel: bump 6.12 to 6.12.33 2025-06-12 12:42:15 +02:00
x86 x86: switch from CONFIG_HZ_PERIODIC to CONFIG_NO_HZ_IDLE 2026-01-09 16:35:34 +01:00
zynq zynq: drop support for kernel 6.6 2025-11-25 17:27:24 +01:00
Makefile linux: fix missing default packages in profiles.json 2024-11-17 19:29:06 +01:00