Fun problem - on my home server, powertop reports that the CPU has up to C10 available, but it never idles beyond C3. The same machine with any desktop distro happily idles up to C8.
A simple ls /sys/devices/system/cpu/cpu0/cpuidle/ gives me state0 state1 state2 state3 on F38 Server.
Same thing on F38 Workstation gave me state0 state1 state2 state3 state4 state5 state6 state7 state8
I reproduced the problem across two different machines and on Debian.
I searched around for a while, but all anyone ever wants to do is disable C-States for more performance and less latency. I’d rather like my server to idle properly and save power.
I tested on two machines (laptops, if it matters):
Dell Latitude 7370, Intel Core M7-7Y75
Samsung Galaxy Book Flex 950QCG, Intel Core i7-1065G7
I used the Samsung laptop as, y’know, a laptop for a while running Fedora Workstation, then switched to a different laptop and said, “Hey, let’s turn this paperweight into a server!” Like I said, in Workstation all C-States are available and utilized, but as soon as I switched to Server, half of them vanished. Powertop says they exist, but they’re not being utilized.
I was confusing CPU idle states with package idle states. I checked the CPU idle states from a live USB on both laptops, and got 0-3 on the Samsung and 0-8 on the Latitude. This actually checks out in powertop.
Thunderbolt is not my friend. I’d been using a Thunderbolt dock to provide I/O for the laptop, but when I pulled it down for testing, I left the dock behind and used a plain USB power supply.
Lo and behold, the system idles correctly with the package state hanging out in C8 and C10 most of the time and pulling about 2W from the wall. Swap back to Thunderbolt, and it refuses to idle deeper than C3 again, drawing over 10W. 5x power draw for a bit more I/O? Ouch.
I played a bit of mix-and-match with some USB-C hubs and adapters I have laying around and managed to get the server to behave itself.
So, Linux works as expected, and this is a friendly reminder to everyone to check your peripherals as part of troubleshooting.