Odkrit razlog za večjo porabo energije v novem Linuxovem jedru

Matej Huš

27. jun 2011 ob 10:58:43

Kmalu po izidu nove verzije Linuxove distribucije Ubuntu 11.04 so uporabniki mobilnih naprav ugotovili, da imajo te opazno krajšo avtonomijo (tudi do 20 odstotkov). Napaka ni prizadela vseh uporabnikov, ampak še vedno zelo veliko množico. Ko so se iste težave začele pojavljati še v novejših verzijah drugih Linuxovih distribucij (na primer Fedora 15), je postalo jasno, da je problem globlji. Fantje pri Phoronixu so problem raziskali in ugotovili, da težava tiči v Linuxovem jedru 2.6.38 in novejših.

Ključ je v upravljanju porabe z ASPM (Active State Power Management), ki naprave na vodilu PCIe postavi v stanje nižje porabe energije, ko niso aktivne. S tem se varčuje z energijo, a to po drugi strani povzroči manjšo zakasnitev pri obujanju naprav in ponovnem vzpostavljanju povezave, zato se uporablja samo v mobilnih napravah, kjer je avtonomija kritična.

V jedru 2.6.38 je bila sprejeta odločitev, da Linux ne bo upravljal z registri za ASPM, če od BIOS-a prejme informacijo, da ASPM ni podprt. Razlog je v preprečitvi nepričakovanega obnašanja sistema, ki lahko tudi zmrzne, če v stanje spanja postavimo naprave, BIOS pa jih potem ne more zbuditi. Problem je, da ima veliko mobilnih naprav delujoč ASPM, ki pa ga BIOS ne javlja pravilno prek FADT (Fixed ACPI Description Table), zaradi česar Linux onemogoči podporo za ASPM. Posledica je za petino višja poraba energije.

Trenutna rešitev, dokler se vse skupaj ne popravi na višjem nivoju, je zagon Linuxa s stikalom pcie_aspm=force, ki omogoči podporo za ASPM ne glede na podatke iz BIOS-a. Nekaj naprav ima ob tem sicer težave z zmrzovanjem, medtem ko jih večina deluje brez težav in z nižjo porabo energije. Ni pa to edini razlog za višjo porabo energije. Na Phoronixu ugotavljajo, kaj točno se je spremenilo v jedru 2.6.35, kjer se je prvič pojavila malenkost višja poraba energije, in katera je druga sprememba v 2.6.38, ki še povečuje porabo energije.