# NVMe Freeze Fix Plan — Kingston SNV2S2000G ## Problem System freezes and SSHD becomes unresponsive due to NVMe I/O write timeouts. The Kingston SNV2S2000G firmware fails to wake from deep power states (PS3/PS4) in time, causing the kernel to abort I/O operations and eventually hard-lock the system. - 152 NVMe I/O timeout errors logged in previous boot (Feb 17-20) - 1 NVMe controller reset (Feb 19 09:41) - 52 unsafe shutdowns (hard power-offs from freezes) - SMART health: PASSED — drive is not failing, firmware power management is the issue ## Root Cause NVMe Autonomous Power State Transition (APST) puts the drive into PS3/PS4. Exit latencies (5ms / 70ms) exceed what the firmware can reliably handle, causing write and flush operations to time out. ## Fix: Disable Deep NVMe Power States ### Step 1 — Apply kernel parameter Run with sudo in a terminal: ```bash sudo sed -i 's|rootfstype=btrfs|rootfstype=btrfs nvme_core.default_ps_max_latency_us=5000|' /boot/limine.conf ``` ### Step 2 — Verify the change ```bash grep nvme_core /boot/limine.conf ``` Every `cmdline:` line should now end with `nvme_core.default_ps_max_latency_us=5000`. ### Step 3 — Reboot ```bash sudo reboot ``` ### Step 4 — Confirm after reboot ```bash # Verify kernel parameter is active cat /proc/cmdline | grep nvme_core # Monitor for NVMe errors (should show nothing new) journalctl -b -k | grep -i 'nvme.*timeout' ``` ## Monitoring Watch for recurrence over the next few days: ```bash # Check for any NVMe timeouts in current boot journalctl -b -k | grep -i 'nvme.*timeout' # Check SMART data periodically sudo smartctl -a /dev/nvme0 ``` ## If Freezes Continue 1. Try a stricter latency limit: change `5000` to `0` (disables all power state transitions) 2. Check for Kingston firmware updates for SNV2S2000G (current: SBK00104) 3. If nothing helps, the drive may need replacement despite passing SMART checks ## Drive Info - Model: KINGSTON SNV2S2000G (2TB) - Serial: 50026B7784F6ACF9 - Firmware: SBK00104 - Percentage Used: 5% - Bootloader: Limine - Config: /boot/limine.conf