NVMe Power-Savings Support Is Coming For Linux
The Linux kernel to now hasn't provided proper support for NVMe power-savings via APST, Autonomous Power State Transitions, but it's coming.
Linux kernel developer Andy Lutomirski has posted a set of patches for implementing power-savings support for NVM Express storage devices. He commented on the patch series that touches around 200 lines of code, "On my Samsung 950, this means we enter state 3 (70mW, 0.5ms entry latency, 5ms exit latency) after 275ms and state 4 (5mW, 2ms entry latency, 22ms exit latency) after 1200ms. I have the default max latency set to 25ms."
There was some NVMe SCSI power management code previously, but according to Lutomirski basically came down to a broken mess. He wrote, "As far as I can tell, there is basically nothing correct about this code. It misinterprets npss (off-by-one). It hardcodes a bunch of power states, which is nonsense, because they're all just indices into a table that software needs to parse. It completely ignores the distinction between operational and non-operational states. And, until 4.8, if all of the above magically succeeded, it would dereference a NULL pointer and OOPS."
The Autonomous Power State Transitions is part of the NVMe specification and allows for a device to support multiple power states. APST supports states where there is reduced power equating to slower performance or where the device is temporarily sleeping in a non-operational state and then woken up on activity. While APST is part of the NVMe spec, not all NVMe devices support the feature.
NVMe SSD storage doesn't consume much power as it is, but every little bit counts especially for a mobile device. With the common Samsung 950 NVMe SSD, its UBX controller supports APST and advertises operational states of 6W or 8W, meaning about a 2 Watt saving should be possible with these patches.
Hopefully this NVMe APST code will be ready in time for Linux 4.9.
Linux kernel developer Andy Lutomirski has posted a set of patches for implementing power-savings support for NVM Express storage devices. He commented on the patch series that touches around 200 lines of code, "On my Samsung 950, this means we enter state 3 (70mW, 0.5ms entry latency, 5ms exit latency) after 275ms and state 4 (5mW, 2ms entry latency, 22ms exit latency) after 1200ms. I have the default max latency set to 25ms."
There was some NVMe SCSI power management code previously, but according to Lutomirski basically came down to a broken mess. He wrote, "As far as I can tell, there is basically nothing correct about this code. It misinterprets npss (off-by-one). It hardcodes a bunch of power states, which is nonsense, because they're all just indices into a table that software needs to parse. It completely ignores the distinction between operational and non-operational states. And, until 4.8, if all of the above magically succeeded, it would dereference a NULL pointer and OOPS."
The Autonomous Power State Transitions is part of the NVMe specification and allows for a device to support multiple power states. APST supports states where there is reduced power equating to slower performance or where the device is temporarily sleeping in a non-operational state and then woken up on activity. While APST is part of the NVMe spec, not all NVMe devices support the feature.
NVMe SSD storage doesn't consume much power as it is, but every little bit counts especially for a mobile device. With the common Samsung 950 NVMe SSD, its UBX controller supports APST and advertises operational states of 6W or 8W, meaning about a 2 Watt saving should be possible with these patches.
Hopefully this NVMe APST code will be ready in time for Linux 4.9.
3 Comments