Btrfs async discard leads to higher power consumption

Looks like battery life may be impacted by this change:

https://lore.kernel.org/all/7e2ec2c1-e962-603c-17e7-a3c11285bf63@leemhuis.info/

2 Likes

From that post:

I only noticed this regression
myself when my laptop started to draw a constant extra ~10W from the constant
drive activity,

… which is kind of a lot. Can others here identify similar? (Should be able to use nodiscard to test.)

1 Like

I’ve just tested it on my Lenovo P1 gen2 and I cannot confirm 10 extra watt, but it idles at least 50% higher than without nodiscard.

With discard=async powertop reports idle at ~11W and Device stat reports cpu/dram/cpu core usage at 33%
With nodiscard, powertop reports idle at 6W, device stat reporsts 8.2% usage for same cpu/dram/cpu core.

Same brightness in between.

1 Like

I imagine the actual value will be subjective to the disk itself (SATA, NVMe, enterprise vs commodity, etc.) on actual impact.

That is a non-trivial difference. Can you provide the ouput of inxi -Dxx for good measure?

so, I’m running a simple nvme drive

Drives:
  Local Storage: total: 476.94 GiB used: 184.65 GiB (38.7%)
  ID-1: /dev/nvme0n1 vendor: Western Digital model: PC SN730
    SDBQNTY-512G-1001 size: 476.94 GiB speed: 31.6 Gb/s lanes: 4
    serial: 200254807831 temp: 34.9 C

I guess what aggravates the problem in my case is the full disk encryption

1 Like

I’ve installed 6.3.0-63.fc39.x86_64 kernel on my laptop today, so I’ll be looking into power consumption with that latest patch, I’ll post some results as soon as I have something concrete

4 Likes

So, after running it for a little bit, it’s a bit odd situation, each time after boot it takes some time to settle at around 17W “idle”, but after about 5-6 minutes it stabilize at 7-8W idle, which is better than before (10-11W), but more than with nodiscard at 5-6W. So I’d say, current state is acceptable, but again, this is a sample of 1 device configuration.

2 Likes

I’m curious if there was any noticeable impact to boot time between the two?

Do you mean between the kernels w/ and w/o fix or between async and nodiscard?

So here are boot times breakdowns:

kernel 6.2.12 with nodiscard:

Startup finished in 11.513s (firmware) + 8.404s (loader) + 3.256s (kernel) + 12.406s (initrd) + 3.509s (userspace) = 39.090s 
graphical.target reached after 3.485s in userspace.

kernel 6.2.12 with async:

Startup finished in 11.532s (firmware) + 8.635s (loader) + 3.280s (kernel) + 12.152s (initrd) + 3.662s (userspace) = 39.262s 
graphical.target reached after 3.646s in userspace.

kernel 6.3.0 with nodiscard:

Startup finished in 11.537s (firmware) + 9.181s (loader) + 2.757s (kernel) + 11.717s (initrd) + 3.381s (userspace) = 38.574s 
graphical.target reached after 3.364s in userspace.

kernel 6.3.0 with async:

Startup finished in 11.545s (firmware) + 7.834s (loader) + 2.856s (kernel) + 12.871s (initrd) + 3.557s (userspace) = 38.665s 
graphical.target reached after 3.531s in userspace.

graph

Probably a better representation. Given that the delta between worst and best is only 0.7s, I think it’s safe to say, there is no real difference

3 Likes