Portál AbcLinuxu, 26. dubna 2024 08:16

Jaderné noviny – 22. 12. 2010: Detekce radarů v Linuxu

11. 1. 2011 | Jirka Bourek
Články - Jaderné noviny – 22. 12. 2010: Detekce radarů v Linuxu  

Aktuální verze jádra: 2.6.37-rc7. Citáty týdne: Richard Stallman, Andi Kleen, Nicolas Pitre, Arnd Bergmann. Detektor radarů v Linuxu. NoHZ úlohy.

Obsah

Aktuální verze jádra: 2.6.37-rc7

link

Současné vývojové jádro je 2.6.37-rc7 vydané 21. prosince. Linus říká:

Stále jsem nervózní z hlášení o chybách u grafik Intel, takže dál testujte a hlaste. Tohle je poslední -rc před Vánoci (nebo jaké svátky slavíte vy), takže všichni teď máte pár volných dní, kdy nemáte nic lepšího na práci než testovat -rc, že?

Kompletní changelog najdete na kernel.org.

Stabilní aktualizace: Willy Tarreau vydal 18. prosince 2.4.37.11. Opravuje mnoho menších bezpečnostních záležitostí, hlavně úniky informací z jaderného zásobníku na některých 64bitových architekturách, nebo možné dereference NULL a pády v některých méně často používaných protokolech (tj. econet, x25, irda). Také poznamenal, že 2.4 bude podporováno do konce roku 2011.

Citáty týdne: Richard Stallman, Andi Kleen, Nicolas Pitre, Arnd Bergmann

link

Před několika měsíci jsem mluvil s Alexandrem [Olivou] a rozhodli jsme se změnit způsob, jakým Linux Libre pracuje s vnějšími nesvobodnými binárkami. V současnosti měníme kód tak, aby místo nahrávání firmware selhal.

Změnou je znepřehlednit jména souborů s firmwarem ve zdrojovém kódu Linuxu. Tímto způsobem, když uživatel zjistí, jaký firmware nainstalovat a nainstaluje ho pod jménem, který vyžaduje kód, bude to fungovat. Linux Libre nicméně stále nedoporučí instalaci souboru s nesvobodným firmwarem, který má s daným zařízením pracovat.

-- Richard Stallman o svobodě pomocí zamlžení

Závěrečné odstranění BKL ve skutečnosti není pro Linux tak velký krok. Je to spíše symbolické gesto, ale ta raději nechávám politikům a kněžím.

-- Andi Kleen

Závěrem: nebuď překvapen, když technicky podřadné návrhy, jako například proprietární 3D knihovny párované s jadernými rozhraními, narazí na silnou nebo dokonce vehementní opozici. Někteří lidé budou dostatečně umírnění a řeknou ti, že pokud něco takového chceš udělat, musíš to udělat sám a oni nemají zájem udělat cokoliv, co by ti pomohlo. Je ale jasné, že se nikdy nedopracuješ ke konsenzu pro podporu technicky podřadného řešení ve stromě hlavní řady, protože z pohledu Open Source něco takového prostě nedává smysl.

Akceptovat takové věci do hlavní řady by oslabilo principy, díky kterým jsou otevřený software obecně a Linux konkrétně takovým úspěchem; jejich odmítnutí naopak přežití otevřeného softwaru nijak neovlivní. Kompromis by zde byl pouze ku prospěchu korporátního světa. A jak minulost v takovýchto případech ukazuje, otevřený software i přes chybějící asistenci korporací nakonec vždycky vyhraje.

-- Nicolas Pitre

Každý může zkusit tohle dodávat a riskovat soudní tahanice a všichni držitelé autorských práv v jádře mohou zkusit žalovat lidi, co takový kód distribuují. Většina rozumných lidí se drží dál jak od dodávání pochybného kódu, tak od soudů, ale průmysl mobilních zařízení zjevně dělá obojí, takže můžeme prostě čekat na to, jestli má někdo dost hluboké kapsy, aby tohle jako první dotáhl před soud.

-- Arnd Bergmann

Detektor radarů v Linuxu

link

napsal Jonathan Corbet, 21. prosince 2010

Přinejmenším ve Spojených státech se termín „detekce radarů“ obvykle spojuje se zařízeními, která varují řidiče s těžkou nohou před policisty číhajícími někde v blízkosti. Alespoň podle toho, co ví autor článku, na žádném takovém zařízení Linux neběží. Detekce radarů nicméně pro Linux může být důležitá v jiném kontextu: bezdrátové sítě – obzvláště v režimu základní stanice – ji potřebují. Nyní se začíná pracovat na tom, aby se tato schopnost objevila v jádře.

Většina bezdrátového síťování se odehrává v pásmu 2,4 GHz; jak si mnoho uživatelů všimlo, tohle pásmo bývá někde přeplněné a zarušené. Z tohoto důvodu 802.11a i 802.11n specifikují mnoho kanálů v pásmu 5 GHz. Relativní nedostatek provozu je zde pro síťování atraktivní, i když se trochu omezuje efektivní dosah přístupového bodu. Vytlačení dalšího bezdrátového provozu na 5 GHz značně zvětší celkové dostupné přenosové pásmo.

Přirozeně je tu háček. I když dalších uživatelů těchto frekvencí není mnoho, patří mezi ně řízení letového provozu a meteorologické radary. Rušení těchto radarů se nebude líbit regulačním úřadům, které si z nějakého důvodu myslí, že bezpečnost letového provozu je důležitější než aktualizovat po obědě Twitter. Tyto úřady následně typicky předvedou naprostý nedostatek smyslu pro humor každému, kdo jejich pravidla ignoruje; opět vidíme, že bezdrátové síťování často bývá hlavním bodem, kde se Linux střetává s regulacemi.

Aby bylo možné pásmo 5 GHz bezpečně používat pro síťování, specifikovaly různé agentury způsob, jakým bezdrátové zařízení vybírá kanál. Výsledné schéma se nazývá „dynamický výběr frekvence“ [dynamic frequency selection, DFS] a vyžaduje, aby řídící („master“) stanice na kanále po nějakou minimální dobu naslouchala a před vysíláním se ujistila, že v něm nepracují žádné radary. Pokud by se nějaký přistěhoval, stanice musí přerušit veškerou komunikaci a přesunout se na jiný kanál. Zjednodušeně se bezdrátová zařízení fungující v pásmu 5 GHz musí aktivně vyhýbat vysílání na kanálu, který používá nějaký radar.

Většina linuxových systémů se detekcí radarů přímo zabývat nemusí. Podřízenému („slave“) zařízení, které najdeme v typickém laptopu, stačí, když dodržuje instrukce řídícího zařízení o tom, kde smí vysílat. Nicméně jakékoliv zařízení, které chce fungovat jako řídící – včetně přístupových bodů a čehokoliv, co funguje v režimu ad hoc – si musí radarů všímat a reagovat odpovídajícím způsobem.

Bezdrátové adaptéry, jejichž přijímače jsou naladěné na frekvenční rozsah, který nás zajímá, zde mohou pomoci. Když anténu zasáhne výboj RF energie, adaptér může vrátit hostitelskému systému chybu, ve které oznámí, že se objevila interference podobná radaru. Tak jednoduché to ale není: náhodné interference rozhodně nejsou ve světě bezdrátového síťování žádnou výjimkou. Kdyby se bezdrátové zařízení vzdalo kanálu pokaždé, kdy se objeví nějaká neočekávaná interference, komunikace by byla přinejmenším obtížná. Je tedy potřeba udělat něco chytřejšího.

Tímto něčím je samozřejmě hledat specifické vzory interferencí, které generují radary. Radar vyzařuje krátký výboj RF signálu následovaný delšími intervaly, ve kterých naslouchá tomu, co se odrazilo. Dobrá zpráva je, že tyto vzory jsou dobře definovány délkou pulzu radaru, intervalem opakování a frekvencí. Špatná zpráva je, že se tyto parametry mění podle toho, kdo stanovuje pravidla tam, kde se nacházíte. Takže zatímco Spojené státy specifikovaly specifickou sadu vzorů, které musí zařízení rozpoznat, Evropská Unie definovala něco trochu jiného a Japonsko má svojí vlastní variantu. Detekce radarů tedy musí probíhat s ohledem na to, v jakém prostředí se zařízení nachází.

Skupina vývojářů, z nichž většina reprezentuje společnosti vyrábějící bezdrátový hardware, zahájila projekt implementující DFS v Linuxu. Zefir Kurtisi zaslal předběžnou sadu patchů, která ukazuje, jak by se DFS mohlo řešit. Tyto patche přidávají do API ieee80211 jednoduchou funkci:

void ieee80211_add_radar_pulse(u16 freq, u64 ts, u8 rssi, u8 width);

Ovladač hardwaru může touto funkcí informovat jádro 802.11, že rozhraní detekovalo radarový pulz. Tyto události se sledují; když postupem času vyhoví vzorům radarů definovaným podle prostředí, kód rozhodne, že v daném pásmu funguje radar a že je nutné provést úhybný manévr. Pokud hardware umí radary detekovat přímo, ovladač může nahlásit přítomnost radaru funkcí:

void ieee80211_radar_detected(u16 freq);

Současná sada patchů umí detekovat pouze jednu odrůdu evropských radarů; má sloužit spíše jako ukázka. Způsoby, jakými by se nahrály parametry popisující radary v různých jurisdikcích, je ještě potřeba vymyslet; dá se předpokládat, že bude použit existující mechanismus pro dodržování předpisů, ale zvažují se alternativy. Tak jako tak by Linux měl být v blízké budoucnosti schopen koexistovat v pásmu 5 GHz s radary. Verze, která pomůže vyhnout se pokutám za rychlost, bude asi trvat déle.

NoHZ úlohy

link

napsal Jonathan Corbet, 20. prosince 2010

Jádra operačních systémů by pro uživatelský prostor měla být přinejmenším neviditelná; konkrétně spotřeba zdrojů jádrem by měla být co nejmenší. Linux byl vždycky psán s ohledem na tento požadavek, ale pro některé lidi je to stále málo. Uživatelé, kteří provádějí výpočty s velkým výkonem, chtějí všechen čas CPU pro sebe, zatímco jiní uživatelé – ti citliví na latence – nechtějí, aby jejich kód musel čekat na procesor. Tito uživatelé žádali způsob, jakým by mohli spustit procesy alespoň na jednom CPU bez jakýchkoliv zásahů jádra – žádné tiky časovače, žádná přerušení a tak dál. Zatím nebylo nalezeno žádné uspokojivé řešení; nový patch, jehož autorem je Frederic Weisbecker, takovým řešením také ještě není, ale ukazuje další způsob, jakým na problém zaútočit.

Základním nápadem jeho sady patchů je umožnit procesu vypnout přerušení časovače, dokud běží. Pokud budou splněny určité podmínky, umožní to procesu běžet bez pravidelného přerušování jeho tikem. Pokud budou od daného CPU odkloněna i ostatní přerušení, daný proces by měl být schopen běžet bez přestávek. Je tu ale pár komplikací.

Přepnout se do režimu bez tikání plánovače je relativně jednoduché; procesu stačí zapsat nenulovou hodnotu do /proc/self/nohz. Patch pro takové procesy vynucuje několik podmínek: (1) proces musí být spjat s CPU, na kterém běží a (2) na daném CPU nesmí běžet žádný jiný proces v beztikovém režimu. Pokud jsou tyto podmínky splněny, zápis do /proc/self/nohz uspěje a jádro se pokusí zakázat tikání časovače, dokud proces běží.

Klíčovým slovem je zde „zkusí“; je mnoho věcí, které mohou vypnutí tikání zabránit. První z nich je jakékoliv soupeření o CPU. Jestliže jakýkoliv jiný proces bude chtít běžet na stejném CPU, musí dojít k tiku plánovače jako obvykle, aby se dalo rozhodnout o preempci. Vzhledem k tomu, že se proces může přepnout do režimu spustitelný [runnable] kdekoliv v systému, Frederikův patch provede potenciálně drahé meziprocesorové přerušení, kdykoliv se na jakémkoliv CPU objeví druhý spustitelný proces, bez ohledu na to, jestli dané CPU v současnosti běží v beztikovém režimu nebo ne.

Další věc, která může všechno pokazit, je čtení-kopírování-zápis [read-copy-update, RCU]. Pokud jsou nějaká zpětná volání [callback] RCU, která je nutná zpracovat na nějakém CPU, toto CPU se do beztikového režimu nepřepne. RCU také musí být informováno, když CPU přejde do „klidového stavu“ [quiescent state], aby vědělo, že je bezpečné volat zpětná volání RCU na ostatních CPU. Jestli RCU stanovilo, že ho zajímá, jestli je cílové CPU v klidovém stavu, opět nelze přejít do beztikového režimu. Pokud se u RCU objeví zájem o klidový stav kdekoliv v systému, může být beztikový režim na CPU vypnut.

Vzhledem k tomu, že se RCU v současných jádrech využívá velmi intenzivně, dalo by se předpokládat, že to ve většině případů zabrání běhu v beztikovém režimu. Další část sady patchů se tedy pokouší tento problém omezit s tím, že pokud proces běží v uživatelském prostoru a má zakázán tik časovače, s ním spojené CPU je nutně v klidovém stavu. Když CPU běží v tomto režimu, přejde do „rozšířeného klidového stavu“ [extended quiescent state], který odstraňuje potřebu upozorňovat zbytek systému. Rozšířený klidový stav pravděpodobně výrazně prodlouží dobu běhu bez tiků na procesoru, ale za malou cenu: kód pro architekturu musí přidat háčky, které upozorní beztikový kód na vstup a výstup z jádra.

Revize kódu se prozatím zaměřily na různé detaily, které je nutné zvládnout jinak, ale neobjevila se výrazná kritika konceptu jako takového. Je to kód v raném stádiu, takže neřeší všechno, co se běžně děje při tiku plánovače, na tento fakt revidovatelé upozornili. Největší námitky pravděpodobně souvisí s podmínkami zmíněnými na začátku článku: proces musí být navázán na jediné CPU a na takovém CPU smí běžet jenom jeden beztikový proces. Peter Zijlstra řekl:

No ano, toto rozhraní, které explicitně označuje úlohu a CPU jako task_no_hz je poněkud restriktivní a nepoužitelné. Když spustím 4 na CPU navázané úlohy na čtyřjádru, měl bych z toho mít prospěch, aniž bych musel cokoliv dělat.

Frederic naznačil, že kód lze změnit a tato omezení zrušit ale za cenu vyšší složitosti. Jakmile omezení zmizí, mohlo by dávat smysl povolit beztikový režim, pokud tomu vyhovuje zátěž, ať už o to požádá nebo ne. Díky tomu by beztikový režim byl užitečný obecněji; také by o něco více omezil roli tiku časovače. Jádro by stále mělo daleko ke zcela beztikovému běhu, ale každý krok tímto směrem pomáhá.

Odkazy a zdroje

Kernel coverage at LWN.net: December 22, 2010

Další články z této rubriky

Jaderné noviny – přehled za březen 2024
Jaderné noviny – přehled za únor 2024
Jaderné noviny – přehled za leden 2024
Jaderné noviny – přehled za prosinec 2023
Jaderné noviny – přehled za listopad 2023

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.