Přeskočit na obsah
Tech-Blog Chatujme.cz Chatujme.cz
Počítače

Jádro Linuxu má při hibernaci uspávat i PCIe můstky kvůli energetické certifikaci

Při uspání do paměti umí Linux převést můstky PCI Express do úsporného stavu, při hibernaci to nikdy nedělal. Záplata Maria Limonciella z AMD obě cesty srovnává a jako důvod uvádí kritéria energetických certifikací, hlavně u sestav se samostatnou grafickou kartou. Správce podsystému PCI ji poslal 21. října do jádra 7.4.

· 30 zhlédnutí

Detail základní desky se sloty PCI Express a chladičem čipové sady
Sloty PCI Express a chladič čipové sady na desce Gigabyte GA-H170-HD3. Ilustrační fotografie. Foto: TheStriker, Wikimedia Commons (CC BY-SA 4.0)

Když počítač s Linuxem jde do hibernace, uloží obsah paměti na disk a vypne se. Část sběrnice PCI Express přitom na spoustě desek zůstane pod plným napětím: můstky, pod kterými visí další zařízení, drží stav D0, jako by se nic nedělo. Záplata Maria Limonciella z AMD to mění a nechává jádro chovat se při hibernaci stejně jako při uspání do paměti.

Dvě cesty, které se rozešly

Uspání do paměti a hibernace jsou pro jádro dva různé průběhy. Při uspání do paměti (stav S3 podle normy ACPI) zůstane obsah paměti v čipech RAM a počítač odebírá jen málo proudu. Při hibernaci (S4) se obraz paměti zapíše na disk a stroj se vypne; po zapnutí ho zavaděč načte zpátky. Zařízení na PCI Express k tomu mají vlastní stupnici napájecích stavů od D0, tedy plného provozu, po D3cold, kdy zařízení nemá napětí vůbec.

Při uspání do paměti funkce pci_pm_suspend_noirq() uloží stav zařízení a můstky, pod kterými je další osazené zařízení, převede do D3hot nebo D3cold, pokud to deska dovolí. Cesta pro hibernaci, pci_pm_poweroff_noirq(), tohle nedělala nikdy: volala pci_prepare_to_sleep() jen pro zařízení bez potomků. Můstek s aktivním potomkem tak zůstal v D0.

Firmware to za operační systém neudělá

V popisu změny to Limonciello vysvětluje takto (přeloženo): „Na mnoha konstrukcích nechá firmware desky můstky být, když systém přechází do S4. To brání splnit různá kritéria energetických certifikací pro různé části světa, zvlášť u sestav se samostatnou grafickou kartou.“

Kterou certifikaci má na mysli, popis neříká. Evropské nařízení 617/2013, které stanoví požadavky na ekodesign počítačů, počítá celkovou roční spotřebu z příkonu v klidovém stavu, v režimu spánku a ve vypnutém stavu. Režim spánku v něm odpovídá stavu ACPI G1/S3, vypnutý stav G2/S5; hibernace, tedy S4, se v jeho definicích nevyskytuje. Samotné limity jsou od 1. ledna 2016 u stolních počítačů podle kategorie 94 až 150 kWh za rok a u notebooků 27 až 60,5 kWh za rok, přičemž samostatná grafická karta povolenou hodnotu zvedá – první karta v sestavě o 18 kWh za rok u nejslabší třídy G1 až o 122 kWh u nejsilnější G7.

Proč se tím hibernace nerozbije

Vypnout můstek, pod kterým visí disk nebo grafika, zní riskantně. V běžném průběhu to riziko není: obraz paměti je hotový dřív, než se na cestu poweroff_noirq vůbec dojde, a jeho obnova vždycky probíhá přes úplný start počítače, který sběrnici projde znovu a linky natrénuje nanovo.

Horší případ je hibernace, která se na poslední chvíli zruší. Tehdy se systém vrací bez restartu a volá se pci_pm_restore_noirq(). Záplata proto dává i téhle funkci stejné ošetření stavu D3cold, jaké už měla obdoba pro probuzení z uspání: můstek se nejdřív zapne a teprve pak se spouští obnova zařízení pod ním. Přibyla i pojistka pro ovladače – když si ovladač zařízení vypnul sám a neuložil jeho konfiguraci, jádro už se mu do ní nepokouší sáhnout. A pokud některé zařízení pod můstkem musí zůstat v D0, třeba proto, že je nastavené jako zdroj probuzení, nechá jádro v D0 i ten můstek. Platí to stejně jako u uspání do paměti.

Rozsah je na takový popis malý: 23 přidaných a 4 ubrané řádky v souboru drivers/pci/pci-driver.c. Předchází mu druhá záplata téhož autora, která vytáhla společný kód z funkce pro uspání do samostatné pomocné funkce a sama žádnou změnu chování přinést nemá.

Kde to leží teď

Šestou verzi dvojice záplat poslal Limonciello do konference linux-pci 30. září. Správce podsystému Bjorn Helgaas ji zapsal do svého stromu o 26 minut později, vyzkoušel ji Eric Naim z distribuce CachyOS a souhlas připojil Rafael J. Wysocki z Intelu, který má v jádře na starosti správu napájení.

Jádro 7.3 vyšlo 18. října a slučovací okno příští verze je otevřené. Helgaas poslal 21. října Linusi Torvaldsovi žádost o začlenění změn podsystému PCI do jádra 7.4 a hibernační úpravu v ní vypisuje mezi změnami ve správě napájení. Ve stromu Torvaldse nebyly tyhle změny 23. října odpoledne ještě založené.

Ve stejné dávce jedou další dvě úpravy napájení: zákaz stavu D3 na výstupních portech přepínačů PLX PEX 8532, 8533 a 8548, kde přechod do D3hot položí celý přepínač, a návrat registrů BAR poté, co se zařízení při procházení sběrnice zapne.

Kolik wattů to na konkrétním počítači ubere, popis změny neuvádí a žádné měření u něj není. Doložené je jen to, že můstků, které při hibernaci zůstanou pod napětím, bude méně – a budou to právě ty, které se při uspání do paměti vypínají už dnes.

Zdroje

Počítače

Linux AMD PCI Express hibernace

← zpět na výpis