Hlavní navigace

Co před námi tají /proc (19)

27. 9. 2001
Doba čtení: 7 minut

Sdílet

Po menší odmlce jsme se dneska doškobrtali přes všechny soubory až k adresářům. Takže hrr na ně a začneme pěkně podle abecedy adresářem pro ACPI.

Opět pro představu o tom, co nás čeká a co už máme za sebou, uvedu výpis adresářů, které lze nalézt na mém počítači v /proc:

  acpi/     ide/    sys/
  bus/      irq/    sysvipc/
  driver/   net/    tty/
  fs/       nv/

Připomínám, že přítomnost i obsah jednotlivých adresářů, stejně jako souborů, je silně závislá na verzi jádra a také na HW i SW konfiguraci počítače, na němž je výpis proveden. Často jde „pouze“ o to, zda jsou, či nejsou zavedeny potřebné moduly. Příkladem adresářů, které nemá (nemusí mít) každý, jsou nv/ nebo acpi/.

acpi

Tak. První adresář, do kterého se ponoříme, je /proc/acpi/. Jak z názvu patrno, shromažďuje informace a konfiguraci implementace ACPI v linuxovém jádře. A co že to ACPI je? Jedná se o konkurenta (nebo pokračovatele – to záleží na názoru) standardu APM. Podobně jako APM (Advanced Power Management) je určen pro ovládání počítače při nečinnosti za účelem úspory energie (elektrické). ACPI (Advanced Configuration and Power Interface) jde ovšem dále než APM a kromě správy napájení (power management) definuje navíc způsob konfigurace počítače a jeho součástí (jako například PnP). Dalším výrazným rozdílem je, že zatímco APM je implementován v (APM) BIOSu počítače a veškeré činnosti se implementují jako služby (APM) BIOSu, ACPI je navržen jako standard co nejvíce nezávislý na konkrétním HW či operačním systému. Toho bylo dosaženo převedením co nejvíce činností (jak z oblasti správy napájení, tak konfigurace) z BIOSU (nebo obecně firmware jednotlivých částí HW – mainboard a periferie) pod kontrolu operačního systému, aby bylo možné lépe (relativně jednodušeji a hlavně pružněji) manipulovat s jednotlivými požadavky. Je podstatně jednodušší modifikovat nebo vyměnit ovladač v jádře (samozřejmě nejlépe modul) nebo dokonce uživatelský proces, než upgradovat (APM) BIOS.

Osobně nyní ACPI používám v podstatě pouze kvůli tomu, že se mi nepodařilo přemluvit jádro, aby mi vypínalo počítač za použití APM. Když už jsem se tedy rozhodl pro ACPI (jako jedinou variantu kromě ručního vypínání tlačítkem), vyzkoušel jsem i ovladač pro idle režim procesoru. Dále je v jádře obsažena podpora ovládání počítače přes tlačítka na předním panelu (mně nefunguje), což znamená, že po stisku tlačítka RESET se Linux přepne do úrovně 6, což způsobí klasický restart (ale bez jakéhokoliv příkazu). Obdobně potom prý funguje i POWER, který počítač přes runlevel 0 vypne. To zní opravdu zajímavě, ne? Možná to ale bude fungovat spíše na noteboocích, kde jsou takové věci přece jen propracovanější. Podobně to je i s podporou baterií (zjišťování stavu a tak) nebo teplotních čidel.

Linux používá implementaci tohoto standardu od firmy Intel, která se jmenuje ACPI CA. Tedy ACPI Component Architecture. Celý systém je podobně jako u APM složen z ovladače v jádře a uživatelského procesu – démona (acpid). Pro zájemce o další teorii je na obvyklých místech (součást distribuce, www.linuxdoc.org) k dispozici ACPI-HOWTO, případně stránky projektu ACPI4Linux nebo odpovídající stránky u Intelu. V plánu je, že by ACPI mělo časem (nejen v Linuxu) plně nahradit APM, ale jak to dopadne, zatím nikdo neví. Tak to byla teorie a teď už k tomu, co vlastně adresář acpi/ obsahuje:

dsdt  event  info  processor/

Obsah je samozřejmě závislý na konfiguraci, podotýkám, že mám nakonfigurovanou pouze obecnou podporu ACPI, vypínání počítače a správu procesoru. Soubor dsdt obsahuje výpis stejnojmenné tabulky. Tady bych nerad zabředával do podrobností, protože specifikace ACPI (v současnosti verze 2) je dosti složitá a obsáhlá a já jsem zatím neuznal za vhodné se tím pročítat. Takže jen stručně. ACPI definuje vlastní jazyk pro popis systému (AML – ACPI Machine Language). Ten je použit pro popis konkrétního systému, jeho služeb a vlastností. DSDT tabulka (Differentiated System Description Table) obsahuje právě AML (byte)kód popisu systému. Využívá se normálně přes utility dodávané spolu s ACPI démonem, které jsou schopny jeho obsah převést do něčeho (lehce) srozumitelného. Malý odstrašující příklad dekódovaného obsahu této tabulky (pomocí utility acpidisasm) jsem přece jen přiložil:

00000000: Scope _PR_ (\_PR_)
00000007:   Processor CPU_ (\_PR_.CPU_)
00000014:     0x00
00000015:     0x00000000
00000019:     0x00
0000001a:   Processor CPU1 (\_PR_.CPU1)
00000027:     0x01
00000028:     0x00000000
0000002c:     0x00
0000002d: Name _S0_ (\_S0_)
00000033:   Package
00000035:     0x04
00000036:     ZeroOp
00000037:     ZeroOp

Dalším souborem je event. Ten slouží pro komunikaci ovladače s ACPI démonem. Pokud například zmáčknete tlačítko RESET (jak bylo vysvětleno výše), vygeneruje ovladač událost a zapíše ji do tohoto souboru. Démon potom zjistí, co se stalo, a provede přepnutí runlevelu. Stejně jsou obsloužena teplotní čidla a nebo informace o docházející baterii.

Posledním souborem zde je info. Jediný rozumě čitelný soubor:

ACPI-CA Version:         20010615
Sx States Supported:     S0 S1 S4 S5

Moc informací tady ovšem nenajdeme. Pouze informace o verzi (ovladače v jádře) a podporovaných S stavech. Těch je celkem šest a mají následující význam. Stav S0 je stav, kdy systém pracuje naplno. Stavy S1S4 jsou určeny pro různé režimy „spánku“. S1 je definován jako stav s nízkou dobou probuzení. Jsou v něm zachovány hodnoty celého systému kromě procesorových (L1 a L2) cache pamětí, které jsou vyprázdněny (invalidovány) pomocí speciální instrukce (WBINVD). Ve stavu S2 mohou být ztraceny všechny informace kromě stavu hlavní paměti (RAM). S3 je obdobný jako S2, pouze některá zařízení mohou být přepnuta do stavu s ještě nižší spotřebou energie. S4 je stav s nejmenší spotřebou energie, kdy je systém ještě možno vrátit do stavu před usnutím. Předpokládá vypnutí všech možných zařízení včetně uchování jejich kontextu pro pozdější obnovení. Poslední stav S5 je určen k softwarovému vypnutí systému. Neprovádí žádné uchování kontextu. No, jak vidíte, podporovány jsou pouze stavy 0, 1, 4 a 5. To v praxi znamená normální provoz, provoz s omezenou spotřebou energie, hibernaci a vypnutí systému. Na druhou stranu nečekejte, že to takhle bude fungovat. ACPI je ve vývoji a nemůžete tudíž chtít zázraky.

Adresář processor obsahuje další podadresáře pro jednotlivé dostupné procesory (respektive spíše patice). Jsou číslovány od 0 a my si probereme obsah právě adresáře 0, kde je osazen procesor. V druhé patici není zatím nic, a tak jsou všechny hodnoty nulové. Pro každý procesor jsou k dispozici dva soubory: info a status. První z nich zatím neobsahuje žádné zajímavé informace, ten druhý je na tom o něco lépe. Zde je obsah souboru status:

Bus Mastering Activity:  50703b9d
C-State Utilization:     C1[2095875] C2[2004540] C3[0]

Nejprve několik slov ke stavům Cx. V tomto případě se jedná o stavy procesoru. Ve stavu C0 je plně funkční, i když specifikace ACPI umožňuje kontrolovat jeho pracovní frekvenci (snížit v případě, že není potřeba velký výkon), stav C1 je pro procesory řady Intel x86 navozen instrukcí HLT. Pro tento stav je charakteristické, že nepotřebuje žádnou podporu základní desky nebo jiných zařízení. Probuzení se děje při příchodu přerušení. V tomto stavu je na procesoru, aby uchoval svůj vnitřní stav (obsahy registrů atd.). Stav C2 je rozšířením předchozího pro ještě větší úsporu energie. Zde již může být nutná podpora v čipsetu základní desky. Poslední je stav C3. Neočekávaně umožňuje opět větší úsporu energie. Tento stav (stejně jako C2) již není dle ACPI specifikace povinný.

První řádek v souboru status obsahuje příznak aktivity na sběrnici. Ten je použit pro přechod mezi stavy procesoru. Konkrétně procesor musí opustit stav C3, pokud dojde k aktivitě na sběrnici. U druhého řádku udávají jednotlivá čísla počet přepnutí do daného stavu.

driver

Tento adresář se objevil teprve nedávno (respektive „nedávno“ berte trochu s rezervou). Byl v jádře 2.4.5 (zopakuji, že nyní používám 2.4.9), ale nějak si na něj nepamatuji o moc dříve. A teď už k tomu, co tento adresář obsahuje. Odpověď je prostá: NIC. Přesvědčte se sami:

sioux@sirion ~ $ls -la /proc/driver/
celkem 0
dr-xr-xr-x    2 root     root            0 zář 20 18:24 .
dr-xr-xr-x   51 root     root            0 zář 20 18:18 ..

Ano, takhle vypadá NIC, tedy konkrétně prázdný adresář. Kdyby měl být tenhle adresář prázdný, tak by tu ale nebyl. Takže je asi určen pro nějakou konfiguraci, která na mém počítači není. Při prohledání zdrojových textů je možno zjistit, že je určen pro informace některých ovladačů. Konkrétně se jedná o následující hardware:

  • diskové pole s řadičem Compaq SMART2 Controller (nebo že by HP :-)
  • bezdrátové síťové karty Cisco/Aironet řady 4500 a 4800
  • PCMCIA bezdrátové síťové karty Raylink/WebGear

No a vzhledem k tomu, že uvedené kousky jsou spíše vzácnější, můžeme na tento adresář s klidem zapomenout (alespoň většina). Pokud někdo uvedený HW vlastní a vzpomene si na nás ostatní, může do diskuze zaslat obsah odpovídajícího adresáře (za což mu budeme velice vděční), a to nejlépe i s dalšími vhodnými informacemi (verze jádra nebo něco o HW).

Byl pro vás článek přínosný?

Autor článku