AMD Epyc oprava sata hotswapu

Na serverových platformách AMD EPYC (generácie Rome aj Milan) nefunguje hot-swap SATA diskov v defaultnej konfigurácii Ubuntu 22.04 LTS alebo Proxmox VE 7.x. Príčinou je nastavená kernelová voľba CONFIG_SATA_MOBILE_LPM_POLICY=3 v Ubuntu kerneli, ktorá slúži na zníženie spotreby mobilných zariadení. Problém rieši kernel boot parameter ahci.mobile_lpm_policy=1. Pri použití Microsoft Windows (Server 2022, Server 2019, Windows 10) sa žiadne problémy s hot-swapom nevyskytujú.

Aktivácia SATA Hot-Swap

Pre povolenie hot-swapu slúžia nasledujúce boot parametre kernelu:

  • ahci.mobile_lpm_policy=0
  • ahci.mobile_lpm_policy=1
  • ahci.mobile_lpm_policy=2

Základné informácie

Možnosti konfigurácie CONFIG_SATA_MOBILE_LPM_POLICY

Pri kompilácii Linux kernelu je možné zvoliť predvolenú politiku správy napájania SATA linky (SATA Link Power Management - LPM) pre čipsety („South Bridges“) pomocou CONFIG_SATA_MOBILE_LPM_POLICY.

Na výber sú nasledujúce politiky:

CONFIG_SATA_MOBILE_LPM_POLICY Popis ata_lpm_policy_names[] / ata_lpm_policy
0 Ponechať nastavenia firmvéru (Vanilla Kernel Default) ATA_LPM_UNKNOWN
1 Maximálny výkon (Maximum performance) ATA_LPM_MAX_POWER
2 Stredná úspora (Medium power) ATA_LPM_MED_POWER
3 Stredná úspora so zapnutým Device Initiated PM ATA_LPM_MED_POWER_WITH_DIPM
4 Minimálna spotreba (Minimum power) ATA_LPM_MIN_POWER

Poznámka: Nastavenie “Minimum power” (4) je známe tým, že spôsobuje problémy s niektorými SSD/HDD, a preto by sa nemalo používať.

Ubuntu 22.04 Kernel 5.15 je skompilovaný s voľbou CONFIG_SATA_MOBILE_LPM_POLICY=3. Toto nastavenie odpája nevyužité porty počas bootu. Šetrí to energiu a je to dôležité najmä pre mobilné zariadenia na predĺženie výdrže batérie. Na serverových systémoch však kvôli tomuto nastaveniu nefunguje hot-swap. Počas vývoja Linux kernelu v5.19 sa uvažovalo o globálnom nasadení CONFIG_SATA_MOBILE_LPM_POLICY=3 ako defaultu, no kvôli problémom s hotplugom sa od tohto zámeru upustilo.


Príklady problémov so SATA hot-swapom

Nasledujúce ukážky boli testované na tomto hardvérovom labe/setupe:

  • Základná doska Supermicro H12SSL-NT (revízia hardvéru 1.01 aj 1.02)
  • Verzia BIOSu 2.3 a 2.4
  • Šasi SC825TQC-R802LPB
  • Backplane BPN-SAS3-825TQ (problém sa prejavuje aj pri priamom zapojení bez backplane)
  • SATA disk pripojený priamo do dosky cez Slim-SAS kábel (pozn.: pri použití dedikovaného HBA Microsemi Adaptec 1000-8i k žiadnym problémom s hot-swapom nedochádza)

Hot-swap problémy sa vyskytujú výhradne na AMD EPYC systémoch s defaultnou konfiguráciou Ubuntu 22.04 (teda bez aplikovaného boot parametru ahci.mobile_lpm_policy=1).

Pri testoch na doske Supermicro X12DPi-N6 s procesormi Intel Xeon Scalable 3. generácie bežal hot-swap v defaultnej konfigurácii Ubuntu 22.04 úplne bez problémov.

Hot-add test (pripojenie disku)

Pri zapojení SATA disku za behu kernel nový disk automaticky vôbec nezdetekuje.

Hot-removal test (odpojenie disku)

Odpojenie disku za behu (hot-removal) nie je Ubuntu kernelom spočiatku vôbec zaregistrované.

Až vo chvíli, keď sa systém pokúsi o read/write prístup na daný disk, vyhodí kernel nasledujúce chybové hlášky v dmesg:

1[ 248.127538] ata5.00: exception Emask 0x10 SAct 0x1000000 SErr 0x90202 action 0x6 frozen
2[ 248.129086] ata5: SError: { RecovComm Persist PHYRdyChg 10B8B }
3[ 248.129859] ata5.00: failed command: READ FPDMA QUEUED
4[ 248.130630] ata5.00: cmd 60/00:c0:00:00:00/01:00:00:00:00/40 tag 24 ncq dma 131072 in
5res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x14 (ATA bus error)
6[ 248.132201] ata5.00: status: { DRDY }
7[ 248.132985] ata5: hard resetting link
8[ 248.447963] ata5: SATA link down (SStatus 0 SControl 300)

Manuálny rescan z CLI

Ak potrebujete manuálne zdetekovať zapojený disk bez rebootu, môžete použiť tieto príkazy:

  • Cez utils nástroj (vyžaduje balík sg3-utils):
    1sudo rescan-scsi-bus
    
  • Alebo priamy trigger do sysfs z shellu:
    1sudo echo "0 0 0" | tee /sys/class/scsi_host/host*/scan
    

Ako zmeniť kernel parametre na Ubuntu / Debiane

Na Ubuntu, Debiane a väčšine distribúcií, ktoré používajú ako bootloader GRUB, sa boot parametre kernelu konfigurujú prostredníctvom globálneho konfiguračného súboru GRUB-u.

Tento postup vyžaduje administrátorské práva (sudo). Nižšie nájdeš presný návod, ako permanentne pridať parameter ahci.mobile_lpm_policy=1 pre spojazdnenie SATA hot-swapu.


Postup krok za krokom

1. Otvorenie konfiguračného súboru GRUB

Otvor konfiguračný súbor v textovom editore (napr. nano):

1sudo nano /etc/default/grub

2. Úprava riadku s parametrami

V súbore vyhľadaj riadok začínajúci na GRUB_CMDLINE_LINUX_DEFAULT. Štandardne vyzerá takto:

1GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Pridaj nový parameter na koniec zoznamu (vnútri úvodzoviek) a oddeľ ho medzerou:

1GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ahci.mobile_lpm_policy=1"

Tip: Ak edituješ súbor cez nano, zmeny uložíš pomocou skratky Ctrl + O (potvrď klávesom Enter) a editor ukončíš pomocou Ctrl + X.

3. Regenerácia konfigurácie GRUBu

Aby sa zmeny zapísali do reálneho bootovacieho obrazu, aktualizuj GRUB:

  • Na Ubuntu:
    1sudo update-grub
    
  • Na čistom Debiane (ak alias update-grub nie je k dispozícii):
    1sudo grub-mkconfig -o /boot/grub/grub.cfg
    

4. Reboot systému

Zmeny sa prejavia až po reštarte operačného systému:

1sudo reboot

Verifikácia (Overenie funkčnosti)

Po úspešnom reštarte servera si over, či kernel naozaj beží s novo pridaným parametrom. Vypíš aktuálny procesný bootovací riadok (cmdline):

1cat /proc/cmdline

Očakávaný výstup: Vo vypísanom riadku by si mal jasne vidieť reťazec ahci.mobile_lpm_policy=1. Ak tam je, SATA hot-swap je aktívny a plne funkčný.


Referencie a zdroje