Portál AbcLinuxu, 4. května 2025 23:12
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.
Současné vývojové jádro je 2.6.37-rc7 vydané 21. prosince. Linus říká:
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.
-- Richard Stallman o svobodě pomocí zamlžení
-- Andi Kleen
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.
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:
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á.
Je to tak, jednalo se o kanaly 124 a 128. Problem je v tom, ze takova vyzva by musela bejt tejden jako reklama na seznamu a ne na radarovy strance CHMI, kterou bezny lidi vubec neznaj, protoze se na ty snimky koukaj pres nejaky prestrednika, kdyz vubec.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.