Laptop on battery power cannot read from M.2 SSD


#1

Guys
I have installed many flavours of Linux over the years on many chassis - but this response from a laptop retailer has me scratching my head.

I purchased a laptop recently with a 256 M.2 SSD and proceeded to install Manjaro Linux (stable with the XFCE desktop). Everything was working great until I removed the power cable to run the laptop off battery. Well the OS stopped reading anything from the SSD…if that part of the OS was already loaded into RAM no problem, but if I loaded another piece of software (and the OS would have have to go to the SSD to get it) the OS started to throw error messages about “cannot access xxxxx”.

So I throw the laptop back to the retailer and tell them exactly what the issue is and how to re-create it. Here is their response …

“Thank you for getting in touch. I have spoken with the technician and he is currently still testing the system. So far he has tested the laptop woth a new M.2 SSD with Windows installed and it booted and everything was working fine, so then he installed the Linux software onto the new M.2 and the problem re-occured. After which he tried the old and new M.2’s with Linux on in a completely different laptop chassis and the problems occured. He is currently still testing however at this time we believe the issue is caused by the Linux software as this is generally not supported by these chassis’ eventhough we do have customer that have sucess installing it.”

Yep, they blame the fault on Linux.

Anyone want to comment on this, please feel free to vent.

Simon.


#2

IIRC there was something previously mentioned about nvme not beeing seen sometimes. idk if it is nvme, maybe look through the forum and see if anything turns up.

also, is there any bios settings related to ac/battery/charging you can try and change to see if it behaves differently?


#3

@dglt
I didn’t see any BIOS settings relating to ac/battery etc. … the laptop is back with the retailer so I cannot try anything.
I was flabbergasted at their audacity to blame a Linux OS for not working on battery power when everything works properly on AC power.


#4

never underestimate the ability to shift blame on something/someone else when they cant figure something out.

but at least they are trying to make it work, some other retailers would probably tell you something like “it’s designed to work with windows, if you want to use something different your on your own”


#5

It can be related with TLP.

[mbb@mbb-laptop ~]$ cat /etc/default/tlp

[...]

# SATA aggressive link power management (ALPM):
#   min_power, medium_power, max_performance
SATA_LINKPWR_ON_AC=max_performance
SATA_LINKPWR_ON_BAT=min_power

# Exclude SATA host devices from link power management.
# Separate multiple hosts with spaces.
#SATA_LINKPWR_BLACKLIST="host1"

# Runtime Power Management for AHCI controllers and disks:
#   on=disable, auto=enable
# EXPERIMENTAL ** WARNING: auto will most likely cause system lockups/data loss
#AHCI_RUNTIME_PM_ON_AC=on
#AHCI_RUNTIME_PM_ON_BAT=on

# Seconds of inactivity before disk is suspended
#AHCI_RUNTIME_PM_TIMEOUT=15

# PCI Express Active State Power Management (PCIe ASPM):
#   default, performance, powersave
PCIE_ASPM_ON_AC=performance
PCIE_ASPM_ON_BAT=powersave

[...]

An easy way to test is to disable tlp service and reboot.

It can also be related with a faulty ACPI control (at the driver/kernel level, I mean). In this case the issue should be reported to the kernel bug tracker.


#6

There is a problem with some NVME drives and Linux. What happens is that the Linux Kernel is trying to put the drive into a power state it does not support. I have seen it cause the OS​ installed on the drive to freeze and I have also seen the drive disappear in live sessions. This may be what is happening here. Try adding the following kernel parameter the next time you reboot your system. nvme_core.default_ps_max_latency_us=5500
It is my understanding, that this parameter basically tells the kernel the lowest power state that it can put the NVME drive into. If it solves your issue, then add it to your Grub configuration so it is used every time you boot your system.

I have personally seen this behavior on Samsung and Western Digital drives.


#7

The default value is 100000 (https://github.com/torvalds/linux/commit/9947d6a09cd71937dade2fc14640e4843ae19802). Such a low value can prevent the device from entering a power saving mode. Maybe other values could be tested?


#8

Maybe other values could be tested. Give it a try and see. The information I presented is the value that work for the two brands of drives I mentioned. This came from personal testing.


#9

Ok, I thought you got that value from somewhere else. I can’t test it because I don’t own a NVME and I don’t have such problems with my SSDs.


#10

@mbb No worries boss, I had just woken up when I wrote my response. Sorry if I seemed a bit miffed. The reason for the value I gave is due to a bug in some of the NVME SSD’s firmware. I have found that I had to add the kernel argument with Samsung, Western Digital, and after some more testing today, Corsair and Adata drives. The only one that seemed to work properly without the kernel argument was the latest NVME from Intel.


#11

some of my SSD actually don’t support suspend at all. It has been disabled in their firmware, thanks for the information about Samsung though. I have an Evo 970 and was mulling over installing Linux alongside windows on that so being forewarned is a massive help.


#12

Glad to have been a help. I ran into this problem cold and had to find the solution.