Hlavní navigace

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

23. 10. 2001
Doba čtení: 10 minut

Sdílet

Dneska se vrhneme na další tři adresáře. Budou to informace o IDE zařízeních, přehled přerušení a údaje o grafické kartě, poskytované ovladačem od firmy nVidia.

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. Otečkované jsou adresáře, které jsme už prošli.:

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

Tento adresář, jak je patrné z názvu, sdružuje informace o zařízeních připojených přes rozhraní IDE (respektive EIDE). Nejčastěji se jedná o pevné disky a mechaniky CD ROM, případně IDE verzi ZIPu a podobná zařízení na ukládání dat. Obsah je následující:

drivers  hda@  ide0/  via

Soubor drivers obsahuje informace o použitých ovladačích nejvyšší úrovně. Najdete zde údaje o použitých ovladačích a jejich verzích, jako příklad třeba:

ide-cdrom version 4.59
ide-disk version 1.10

Jak vidíte, nic extra zajímavého. Pokud máte někdo IDE ZIP, možná je zde ještě něco jako ide-zip, i když si spíše myslím, že ZIP na této úrovni spadá pod ide-disk. Jako obvykle oceníme, pokud nám nějaký vlastník ZIPu nebo i exotičtějších zařízení pošle své poznatky a výpisy do diskuse. Jenom aby vás to později nemátlo, momentálně žádnou CD-ROMku nemám (odešla do věčných lovišť), a tak položka pro ide-cdrom vznikla umělým natažením příslušných modulů. Pokud máte podporu CD-ROM napevno v jádře, bude tam tento řádek samozřejmě bez ohledu na přítomnost jakéhokoliv zařízení. To jen abyste se pak neptali, jak to, že je dále ve výpisu jen hda.

Link hda odkazuje jen zkratkou přímo na adresář ide0/hda. I když je to možná pro většinu z vás zbytečné, přece jen se zastavím u způsobů připojení a pojmenování IDE zařízení. Když se podíváte na vaši základní desku, najdete tam určité množství konektorů pro připojení IDE zařízení (jen připomínám, že sem nepatří floppy disk – ten není IDE). Tyto konektory odpovídají jednotlivým kanálům IDE, které jsou označeny jako ideN, kde na běžných deskách má N hodnotu buď 0, nebo 1, což odpovídá dvěma konektorům. Na některých deskách (třeba od Abitu VP6 nebo KT7 – doufám, že jsem to označení trefil – kdyžtak mě prosím někdo opravte) je buď integrován řadič RAID, nebo jiným způsobem zvýšen počet kanálů. Potom se jedná o kanály 2 a 3 (případně další – nevím, jestli je nějaké omezení na počet kanálů IDE – obvykle se však používají pouze dva, v případě integrovaného RAIDu celkem čtyři, a tím to končí). Pokud potřebujete připojit další disky, používá se přídavná deska do PCI, a to buď RAID, nebo třeba SCSI adaptér. Dříve byly běžné i karty s dalšími kanály IDE, ale nevím, jestli se dnes ještě dostanou a používají.

Tím máme snad jasno v tom, co znamená adresář ide0. V něm potom najdeme soubory společné pro celý kanál. Dále pak dva adresáře se jmény hdX, kde X je písmeno a až (běžně) h. Na každý IDE kanál je totiž možné připojit dvě IDE zařízení, jedno se nazývá master a druhé slave. Pro první kanál je master označen hda a slave hdb. Pro druhý kanál pak hdc a hdd, a tak dále. První z dvojice písmen je vždy master, druhý slave. Ještě poznamenám, že obecně je vhodné pokud možno každé zařízení připojovat na samostatný kanál. Pokud jsou obsazeny obě pozice na kanálu, musí o něj totiž zařízení soupeřit. Pokud pro jedno zařízení použijete kanál ide0 a pro druhé kanál ide1, je možné, že lepší řadiče IDE budou schopny paralelně obsluhovat oba kanály a zařízení si nebudou konkurovat. Opět, pokud někdo víte, jaká je dnes situace, jestli je tohle chování běžné, nebo ne, a případně názvy řadičů, které ho zvládají, určitě se s námi o své zkušenosti podělíte.

Tak, trochu teorie na úvod máme za sebou a teď už se vrhneme na další soubory. Druhým souborem v základním adresáři ide/ je v mém případě via. Jak někteří již briskně uhodli, soubor se jmenuje po řadiči IDE na základní desce. Pokud je řadičů více, může být i souborů několik – to platí opět například pro integrované RAID řadiče. Jenom aby nevznikly nějaké nejasnosti, když tu v této části mluvím o RAID zařízeních, mám na mysli RAID složený z IDE disků. Nic z toho se netýká SCSI disků a RAIDů z nich. Momentálně jádro rozeznává tyto řadiče IDE (2.4.12): AEC62XX, ALI15X3, AMD74XX, CMD64X, CS5530, HPT34X, HPT366, SWWKS, PDC202XX, PIIX, SIS5513, SLC90E66 a VIA82CXXX. Můj počítač je osazen řadičem IDE od firmy VIA (z čipsetu VIA Apollo PRO133A Dual), a tak se soubor jmenuje via. Určitě nesmím zapomenout poznamenat, že správcem ovladače pro IDE řadiče VIA je Čech pan Vojtěch Pavlík ze SuSE. Tímto ho zdravím a děkuji za dobře odvedenou práci (pozn. red.: taky zdravim :) – johanka). A teď už vlastní obsah souboru. Ten se pro jednotlivé řadiče může radikálně lišit, základní struktura informací však bude stejná nebo obdobná:

----------VIA BusMastering IDE Configuration----------------
Driver Version:                     3.29
South Bridge:                       VIA vt82c686b
Revision:                           ISA 0x40 IDE 0x6
Highest DMA rate:                   UDMA100
BM-DMA base:                        0xc000
PCI clock:                          33MHz
Master Read  Cycle IRDY:            0ws
Master Write Cycle IRDY:            0ws
BM IDE Status Register Read Retry:  yes
Max DRDY Pulse Width:               No limit
-----------------------Primary IDE-------Secondary IDE------
Read DMA FIFO flush:          yes                 yes
End Sector FIFO flush:         no                  no
Prefetch Buffer:              yes                 yes
Post Write Buffer:            yes                  no
Enabled:                      yes                 yes
Simplex only:                  no                  no
Cable Type:                   80w                 40w
-------------------drive0----drive1----drive2----drive3-----
Transfer Mode:       UDMA       PIO       PIO       PIO
Address Setup:       30ns     120ns     120ns     120ns
Cmd Active:          90ns      90ns     480ns     480ns
Cmd Recovery:        30ns      30ns     480ns     480ns
Data Active:         90ns     330ns     330ns     330ns
Data Recovery:       30ns     270ns     270ns     270ns
Cycle Time:          20ns     600ns     600ns     600ns
Transfer Rate:   99.0MB/s   3.3MB/s   3.3MB/s   3.3MB/s

V první části jsou informace o konkrétním řadiči. Čísla verzí, nejvyšší dostupný režim přenosu dat (zde UDMA100), rychlost PCI sběrnice a další. V druhé sekci se nacházejí informace o jednotlivých kanálech. Primární IDE je kanál ide0, sekundární IDE odpovídá ide1. Nebudu rozebírat jednotlivé řádky, přiznám se, že všem stejně zcela nerozumím, za povšimnutí jen stojí ten poslední – je na něm možno zjistit použitý typ kabelu, a tedy použitelnost vyšších UDMA režimů. Všechny tyto informace jsou čteny z konfiguračního prostoru PCI nebo z I/O portů řadiče. Poslední sekce je určena pro jednotlivá zařízení. Hodnoty v ní však nejsou závislé na konkrétním připojeném disku, ale na nastavení komunikačního protokolu – tedy PIO, DMA nebo UDMA režimu. To je vidět nejvíce na poslední položce. Opravdu neznám disk, který by dnes dokázal přenášet 100MB/s. Na tomto místě bych rád apeloval na pana Pavlíka. Myslím, že i když je zdrojový text napsán dobře a přehledně, dle mého názoru by mu neuškodil i nějaký ten komentář. Také používání „magických konstant“ je na většině míst značně matoucí. Proto pokud budete pane Pavlík číst tento článek a tyto věty, zamyslete se nad přidáním několika vysvětlivek do zdrojového textu souboru drivers/ide/vi­a82cxxx.c. Myslím, že by to některé lidi učinilo o něco šťastnějšími (mne určitě :). Děkuji.

Nyní se přesuneme do adresáře ide0. Zde se nachází několik souborů pro daný kanál, řekl bych nic speciálního, tak jen rychle. channel obsahuje číslo kanálu – tedy 0. config je kopií konfiguračního prostoru PCI řadiče. mate u mne nyní neobsahuje nic, ale vzhledem k názvu to bude nejspíše identifikace, nějaký odkaz na druhý kanál či něco podobného, model pak určuje druh řadiče tohoto kanálu. Dnes asi nejrozšířenější hodnota je „pci“. Ostatní možnosti lze nalézt ve funkci drivers/ide/ide-proc.c:proc_i­de_read_imodel().

Další na řadě je adresář hda. Ten již obsahuje informace o konkrétním zařízení, připojeném na místo patrné z názvu adresáře. Tento disk je tedy připojen na první kanál jako master. Většina souborů je velmi jednoduchých, tak se na ně vrhneme:cache udává velikost cache na disku (2048), capacity udává celkový počet sektorů. Většina lidí má tak nějak zažito, že sektor je 512 bajtů. Pokud mezi sebou vynásobí tyto dvě hodnoty, mohou se dočkat nepříjemných překvapení. Například můj 10GB disk má najednou jen 9.3GB a podobně. Jak to? Vycházíme ze špatného předpokladu. Správnou velikost sektoru lze zjistit například pomocí utility hdparm -i /dev/hda.

 ...
 RawCHS=16383/16/63, TrkSize=57600, SectSize=600, ECCbytes=40
 ...
 CurCHS=16383/16/63, CurSects=-66060037, LBA=yes, LBAsects=19541088
 ...

Zde se můžete dočíst, že disk má opravdu takový počet sektorů, který udává soubor capacity (položka LBAsects). Na druhou stranu je velikost sektoru překvapivě 600 bajtů (položka SectSize). Pro vlastní data je nutno odečíst ještě oblast pro informace kontroly integrity (ECCbytes). Nakonec se dostaneme k velikosti sektoru 600–40 = 560 bajtů. Velikost disku je potom 560*19541088 = 10.2 * 1024 * 1024 * 1024 bajtů, tedy inzerovaných 10.2 GB. No, není nad to, když se člověk dozví něco nového. A až vám někdo bude zase tvrdit něco o sektoru 512 bajtů velkém, pošlete ho přečíst si tento článek a podívat se do výpisu programu hdparm.

Soubor driver obsahuje opět název a verzi generického ovladače IDE jako v hlavním adresáři. geometry udává skutečnou a logickou (pro BIOS a spol) geometrii disku ve formátu C/H/S – cylindr, hlava, sektor:

physical     19386/16/63
logical      1216/255/63

media udává třídu zařízení. Dozvíte se zde třeba to, že disk je ve třídě disk :). model obsahuje identifikační řetězec jako první řádka výpisu programu hdparm. Poslední smysluplný soubor je settings, kde se dá najít aktuální a povolené nastavení všemožných parametrů zařízení. Pak zbývají ještě soubory identify, smart_values a smart_threshold. Ty při čtení pošlou na zařízení povely protokolu IDE IDENTIFY, SMART_READ_VALUES, SMART_READ_THRES­HOLDS a zobrazí vrácená data jako 256 16bitových slov. Přesný význam pak záleží na konkrétním zařízení.

irq

Tento adresář je určen pro nastavování obsluhy přerušení. Základem pro všechny systémy je soubor prof_cpu_mask, ten obsahuje masku procesorů zpracovávajících přerušení. Pro jiné uživatele než root jsou však všechny informace nepřístupné. Superuživatel je schopen jednak zjistit aktuální stav nastavení pomocí čtení obsahu souborů, a dále může zápisem nových hodnot nastavení měnit. Dále jsou zde adresáře s čísly 0 až MAX_IRQ, pro každé IRQ jeden. Pro jednoprocesorový systém jsou tyto adresáře prázdné, pro víceprocesorový systém obsahují soubor smp_affinity (každý). A k čemu jsou masky dobré. Maska určuje, které procesory mohou zpracovávat přerušení. Globální maska v souboru prof_cpu_mask se vztahuje na všechna přerušení, masky v smp_affinity pak k jednotlivým IRQ. Pokud tedy nastavíme masku na 5, tedy binárně …01001, znamená to, že přerušení mohou obsluhovat procesor číslo 1 a procesor číslo 4 (respektive cpu0 a cpu3 podle počítání Linuxu). Pokud nastavíme globální masku, vztahuje se na všechna přerušení, lokálně lze nastavit chování pro jednotlivá přerušení v patřičných adresářích. Pokud může přerušení obsluhovat více procesorů, je plánování obsluhy řízeno algoritmem Round Robin. To zjednodušeně řečeno znamená, že se všichni spravedlivě střídají dokola.

nv

V tomto adresáři najdeme jediný soubor. Jmenuje se card0 a obsahuje několik informací o grafickém adaptéru firmy nVidia. Teoreticky, pokud by adaptérů bylo více (např. v PCI sběrnici), přibudou další soubory (card1, …). Tento adresář a v něm obsažené informace jsou specifické pro ovladač firmy nVidia. Pokud je použit open-source ovladač, žádné adresář nv se nevytvoří. Ovladače jiných grafických karet pravděpodobně také poskytují možnost získání informací přes rozhraní /proc, ale mám jen jednu kartu, tak nevím, kde je hledat. Další věc, s kterou se s námi můžete podělit v diskusi k článku. Obsah souboru card0 je následující:

----- Driver Info -----
NVRM Version: 1.0-1541
------ Card Info ------
Model:        GeForce2 MX
IRQ:          16
Video BIOS:   03.11.00.18
------ AGP Info -------
AGP status:   Enabled
AGP Driver:   AGPGART
Bridge:       Via Apollo Pro
SBA:          Supported [disabled]
FW:           Supported [disabled]
Rates:        2x 1x  [2x]
Registers:    0x1f000213:0x00000102

Dozvíme se zde verze ovladače (1.0–1541) a verzi BIOSu grafické karty (03.11.00.18), použité přerušení (16) a model grafické karty. Model se určí pomocí tabulky PCI DevID v souboru nv-ids.h. Dále je vidět, zda je podpora AGP zapnuta a který ovladač AGP řídí. V tomto případě je na výběr ze dvou možností: buď ovladač AGPGART z jádra, nebo ovladač AGP v modulu NVdriver. Dále je uveden název AGP chipsetu. Jeho detekce je však provedena přímo v modulu NVdriver a nemusí být tedy aktuální. Detekují se chipsety od výrobců VIA, Intel, AMD a Ali, a to jen některé. Neděste se proto, jestliže je zde napsáno něco, s čím vůbec nesouhlasíte. V takovém případě nahlédněte do souboru nv.c do funkce nv_kern_proc_re­ad(), co se vlastně detekuje. Dále se vypíše nastavení AGP sběrnice včetně jejích možných rychlostí. U této položky trochu pochybuji o její správnosti, protože deska (Abit VP6) by měla umět AGP 4×, ale zde nic není. Nakonec se dozvíte obsah stavového a příkazového registru ovladače AGP, kde se dá zjistit zbytek.

A to je pro dnešek všechno. Příště budeme pokračovat zbytkem menších adresářů a na poslední díl si necháme adresář sys, kde je informací opravdu požehnaně (hlavně o vlastním jádře).

Autor článku