Richard Stallman dnes v Liberci přednáší o svobodném softwaru a svobodě v digitální společnosti. Od 16:30 v aule budovy G na Technické univerzitě v Liberci. V anglickém jazyce s automaticky generovanými českými titulky. Vstup je zdarma i pro širokou veřejnost.
sudo-rs, tj. sudo a su přepsáné do programovacího jazyka Rust, nahradí v Ubuntu 25.10 klasické sudo. V plánu je také přechod od klasických coreutils k uutils coreutils napsaných v Rustu.
Fedora se stala oficiální distribucí WSL (Windows Subsystem for Linux).
Společnost IBM představila server IBM LinuxONE Emperor 5 poháněný procesorem IBM Telum II.
Byla vydána verze 4.0 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Přehled novinek v poznámkách k vydání. Využíván je Free Pascal Compiler (FPC) 3.2.2.
Podpora Windows 10 končí 14. října 2025. Připravovaná kampaň Konec desítek (End of 10) může uživatelům pomoci s přechodem na Linux.
Již tuto středu proběhne 50. Virtuální Bastlírna, tedy dle římského číslování L. Bude L značit velikost, tedy více diskutujících než obvykle, či délku, neboť díky svátku lze diskutovat dlouho do noci? Bude i příští Virtuální Bastlírna virtuální nebo reálná? Nejen to se dozvíte, když dorazíte na diskuzní večer o elektronice, softwaru, ale technice obecně, který si můžete představit jako virtuální posezení u piva spojené s učenou
… více »Český statistický úřad rozšiřuje Statistický geoportál o Datový portál GIS s otevřenými geografickými daty. Ten umožňuje stahování datových sad podle potřeb uživatelů i jejich prohlížení v mapě a přináší nové možnosti v oblasti analýzy a využití statistických dat.
Kevin Lin zkouší využívat chytré brýle Mentra při hraní na piano. Vytváří aplikaci AugmentedChords, pomocí které si do brýlí posílá notový zápis (YouTube). Uvnitř brýlí běží AugmentOS (GitHub), tj. open source operační systém pro chytré brýle.
Současné vývojové jádro je 2.6.37-rc3 vydané 21. listopadu. Linus řekl:
Jedna významnější změna je, že pokus zakázat ve výchozím nastavení čtení ze souboru /proc/kallsyms byl vzat zpět, protože přestala fungovat starší distribuce (Ubuntu Jaunty).
Zkrácený changelog je v oznámení; všechny detaily vizte v kompletním changelogu.
Stabilní aktualizace: 22. listopadu vyšly aktualizace 2.6.27.56, 2.6.32.26, 2.6.35.9 a 2.6.36.1; každá obsahuje dlouhý seznam důležitých oprav. 2.6.35.9 je poslední aktualizace série 2.6.35.
-- Linus Torvalds (díky Georgi Spelvinovi)
-- Dave Airlie
napsal Jonathan Corbet, 24 listopadu 2010
Ovladače zařízení – obzvláště ty, které musí obsluhovat low-end hardware – někdy potřebují alokovat velké a fyzicky spojité buffery v paměti. Když systém běží a paměť se fragmentuje, roste pravděpodobnost, že tyto alokace selžou. To vedlo k mnoha snahám, které jsou založeny na technikách jako odložení kusu paměti při bootu; alokátor spojité paměti [contiguous memory allocator, CMA], o kterém jsme tu psali v červenci, je jedním z příkladů. Nicméně je k dispozici alternativní přístup v podobě alokátoru velkých kusů paměti [big chunk memory allocator], jehož autorem je Hiroyuki Kamezawa.
Alokátor velkých kusů paměti poskytuje novou alokační funkci pro velké spojité bloky:
struct page *alloc_contig_pages(unsigned long base, unsigned long end, unsigned long nr_pages, int align_order);
Na rozdíl od CMA si alokátor velkých kusů při bootu neodkládá paměť stranou. Místo toho se pokouší vytvořit dostatečně velký kus paměti při alokaci tak, že přestěhuje jiné stránky. Postupem času se mechanismy shlukování paměti [memory compaction] a migrace stránek zlepšily a paměti se zvětšily. Dá se tedy předpokládat, že alokace těchto větších kusů proběhne úspěšně častěji, než tomu bylo dříve.
Tento přístup má několik výhod. Vzhledem k tomu, že si nepotřebuje odložit paměť stranou, nemá na systém žádné dopady, když nejsou velké buffery zapotřebí. Také je flexibilnější a nevyžaduje, aby správce systému zjistil, kolik paměti je potřeba při bootu rezervovat. Nevýhodou je, že alokace paměti je dražší a zvyšuje se šance, že selže. Který systém bude v praxi fungovat lépe, nikdo neví; odpověď na tuto otázku bude vyžadovat hodně testování lidmi, kteří takto potřebují alokovat paměť.
originál tohoto článku pro LWN.net napsal Rafael J. Wysocki
Jestli jste sledovali vývoj Linuxu za posledních několik měsíců, bylo těžké přehlédnout masivní vlákno na LKML, které vzešlo ze snahy Googlu začlenit blokovače uspání z Androidu do hlavní řady jádra. Lze se dohadovat, že prezentace těchto patchů mohla být lepší a vysvětlení problémů, které řešily, mohlo být přímočařejší [PDF], ale nakonec se ukázalo, že jejich začlenění by nebylo z technického úhlu pohledu tím nejlepším nápadem. To je bohužel těžké vysvětlit bez ponoření se do technických záležitostí, které se za sadou patchů blokovačů uspání skrývají, takže jsem napsal článek Technical Background of the Android Suspend Blockers Controversy [PDF], který je detailně diskutuje a který je shrnut v tomto článku.
Blokovače uspání či probouzecí zámky [wakelocks] v původní terminologii Androidu jsou součástí specifického přístupu ke správě napájení, který je založena na agresivním využívání kompletního uspání systému tak, aby se ušetřilo co největší množství energie. S tímto přístupem je přirozeným stavem systému režim spánku [PDF], ve kterém se energie používá pouze k obnovování paměti a poskytování napájení těm několika zařízením, která mohou vygenerovat signál pro probuzení. Do pracovního režimu, kde CPU vykonává instrukce a systém obecně dělá nějakou užitečnou práci, se vstoupí pouze v reakci na nějaký probouzecí signál od jednoho z vybraných zařízení. Systém v tomto stavu zůstane jenom tak dlouho, jak je nutné k vykonání práce požadované uživatelem. Když je tato práce dokončena, automaticky se zase uspí.
Tento přístup lze nazývat oportunistické uspávání, což má zdůraznit fakt, k uspání dojde pokaždé, kdy k tomu je příležitost. Efektivní implementace musí řešit mnoho problémů včetně možných souběhů mezi uspáváním systému a probouzecí událostí (tj. událostí, které způsobí, že se systém probudí z režimu spánku). Jmenovitě jedna z prvních věcí, která se provede během uspání systému, je uspání procesů v uživatelském prostoru (kromě uspávajícího procesu) a když je to dokončeno, uživatelský prostor již nemůže reagovat na žádné události signalizované jádrem. Důsledkem toho je, že pokud probouzecí událost nastane přesně v okamžiku, kdy se nastartuje uspání, uživatelský prostor může být zmrazen dřív, než dostane šanci událost zpracovat, takže mu bude doručena, až když je systém probuzen z režimu spánku po další probouzecí události. Bohužel na mobilním telefonu může být touto „odloženou“ událostí velmi důležitý telefonní hovor, takže scénář popsaný výše je pro takováto zařízení jenom těžko přijatelný.
Na Androidu byla tato záležitost vyřešena s pomocí probouzecích zámků. Probouzecí zámek je v podstatě objekt, který může být ve dvou stavech – aktivní či neaktivní – a systém nelze uspat, pokud je aktivní alespoň jeden zámek. Takže když jaderný subsystém řešící probouzecí událost aktivuje hned po jejím přijetí probouzecí zámek a deaktivuje ho, když je událost předána uživatelskému prostoru, souběh popsaný v předchozím odstavci lze odvrátit. Navíc na Androidu se uspání zahájí z jádra pokaždé, když nejsou žádné aktivní probouzecí zámky, což řeší problém rozhodování o tom, kdy se uspat; uživatelskému prostoru je umožněno manipulovat s probouzecími zámky. Bohužel to vyžaduje, aby každý proces v uživatelském prostoru, který dělá nějakou důležitou práci, probouzecí zámky používal, což vytváří neobvyklé a problematické záležitosti, se kterými se musí potýkat vývojáři aplikací.
Samozřejmé je, že proces používající probouzecí zámky může významně ovlivnit výdrž baterie, takže možnost používat je by měla být považována za privilegium a neměla by být dána k dispozici všem aplikacím bez přemýšlení. Bohužel ale není žádné obecné pravidlo, které by návrháři systému umožnilo zjistit, které aplikace jsou tak důležité, že by se jim ve výchozím nastavení mělo používání probouzecích zámků povolit. Tím pádem je rozhodnutí ponecháno na uživateli, což může fungovat jenom v případě, že je uživatel dostatečně kvalifikovaný k tomu, aby rozhodl správně. Krom toho, pokud se od uživatele očekává, že se rozhodne, měl by být přesně informován o možných důsledcích. Uživateli by také mělo být umožněno kdykoliv vybrané aplikaci zakázat používání probouzecích zámků; to se na Androidu nicméně přinejmenším do verze 2.2 včetně prostě neděje.
Krom toho některé vlastnosti aplikací na Androidu kvůli oportunistickému uspávání prostě nefungují. Konkrétně jde například o aplikace, které mají periodicky něco kontrolovat na vzdálených serverech v Internetu. Za tímto účelem se musí spustit, když přijde čas, ale to se zjevně nestane, když systém spí. Periodické kontroly, které by měly proběhnout, tedy neproběhnou ve správný čas; ve skutečnosti proběhnou pouze v případě, že systém v dané době náhodou běží z jiného důvodu. To s největší pravděpodobností není to, co uživatel postižené aplikace očekává.
Další problém spojený s kompletním uspáním systému souvisí s měřením času, i když to není omezeno na oportunistické uspání vyvolané z jádra. Každý cyklus uspání-probuzení, bez ohledu na to, jak byl vyvolán, zatahuje do jaderného subsystému pro udržování času nepřesnosti. Obvyklé je, že když se systém uspí, vypne se hardware pro měření času, na který daný jaderný subsystém spoléhá. Během následujícího probuzení je tedy potřeba ho znovu inicializovat. Mezi jinými je poté potřeba přenastavit globální jaderné proměnné reprezentující aktuální čas, aby se reflektoval čas strávený v režimu spánku. To znamená načíst aktuální hodnotu času z trvalých hodin, které jsou typicky mnohem méně přesné než hodiny, které jádro používá za běhu. To tedy během každého cyklu uspání-probuzení zavádí náhodný posun jaderné reprezentace aktuálního času závislý na rozlišení trvalých hodin. Jaderné časovače používané pro naplánování budoucí práce v jádře jsou touto záležitostí postiženy podobným způsobem. Následkem toho je, že časování některých událostí v systému, který se uspává a probouzí, se liší od analogického časování na systému, který běží bez přerušení.
Pokud je uspání spuštěno z uživatelského prostoru, jádro může předpokládat, že uživatelský prostor je na to připraven a nějak se vyrovná s následky. Například může použít settimeofday() a nastavit monotonické hodiny jádra podle času získaného z NTP serveru těsně po probuzení systému. Na druhou stranu pokud uspání zahájí jádro oportunisticky, uživatelský prostor nemá žádnou šanci něco takového udělat.
Z tohoto důvodu by se zdálo, že by bylo lepší systém vůbec neuspávat a místo toho použít pro správu napájení systému framework cpuidle. Tento přístup podle všeho umožňuje některým systémům přechod do stavu snížené spotřeby, který připomíná režim spánku. Tento framework nicméně nemusí garantovat, že systém bude do tohoto stavu přepínán dostatečně často kvůli aplikacím, které používají čekací smyčky, a kvůli jaderným časovačům. Požadavky na kvalitu služby PM [PDF] mohou cpuidle také zabránit použít stav hlubokého spánku CPU. Krom toho i když je během uspání jenom několika zařízením povoleno signalizovat probuzení, rutiny správy napájení za běhu, které cpuidle může použít pro uspání I/O zařízení, mají tendence umožnit signalizovat probuzení všem. Systém se tedy ze stavů nízké spotřeby probouzí mnohem častěji než ze „skutečného“ režimu spánku, takže jeho schopnost šetřit energii je omezena. To zjednodušeně znamená, že systém založený na cpuidle nemusí být dostačující a neušetří na stejném hardwaru stejné množství energie jako oportunistické uspávání.
I když se na daném systému nebude používat oportunistické uspávání, dává smysl systém občas uspat – například v situaci, kdy uživatel ví, že v blízké budoucnosti nebude muset nic dělat. Nicméně problém možných souběhů mezi uspávajícím procesem a probouzecími událostmi, který je na Androidu řešen probouzecími zámky, postihuje všechny podoby uspání, ne pouze ty oportunistické. Problém by tedy měl být řešen obecně a není vhodné jednoduše pro tento účel použít probouzecí zámky, protože to by znamenalo modifikovat všechny programy v uživatelském prostoru, aby je používaly. I když pro Android, jehož uživatelský prostor je již v určitém rozsahu takto navržen, jsou dobré, nebyly by velmi praktické pro jiné linuxové systémy, jejichž uživatelský prostor rozhraní probouzecích zámků nepoužívá. To vedlo na patch jádra, který zavádí framework probouzecích událostí, který byl vydán v jádře v 2.6.36.
Patch zavádí čítač signalizovaných probouzecích událostí event_count a čítač probouzecích událostí, jejichž data jsou v dané chvíli zpracovávána jádrem, events_in_progress. Byla přidána dvě rozhraní, která jaderným subsystémům umožňují tyto čítače modifikovat konzistentně: pm_stay_awake() má zabránit systému v uspání, zatímco pm_wakeup_event() zajišťuje, že systém zůstane vzhůru během zpracování události.
Za tímto účelem pm_stay_awake() inkrementuje events_in_progress a doplňková funkce pm_relax() ho dekrementuje a zároveň inkrementuje event_count. pm_wakeup_event() inkrementuje events_in_progress a nastavuje časovač, který ji v budoucnu dekrementuje a inkrementuje event_count.
Současnou hodnotu event_count lze přečíst z nového souboru v sysfs /sys/power/wakeup_count. Zápis do tohoto souboru způsobí, že se současná hodnota event_count uloží do pomocné proměnné saved_count, takže ji lze v budoucnu porovnat s aktuální event_count. Zápis nicméně uspěje jenom v případě, že zapsané číslo je shodné s event_count. Pokud se to stane, je nastavena další pomocná proměnná events_check_enabled, která jádru správy napájení řekne, aby zkontrolovalo, jestli se nezměnil event_count nebo jestli se při uspání systému events_in_progress rovná nule.
Tento relativně jednoduchý mechanismus umožňuje jádru správy napájení reagovat na probouzecí události signalizované během uspání systému, pokud je o to požádán uživatelským prostorem a pokud jaderný subsystém detekující probuzení používá buď pm_stay_awake() nebo pm_wakeup_event(). Nicméně jeho podporu pro sběr statistik zařízení spojených s probouzením nelze srovnávat s tou, kterou nabízí framework probouzecích zámků. Krom toho předpokládá, že probouzecí události budou vždy spojené se zařízením nebo přinejmenším s entitami, které jsou reprezentovány objektem zařízení, což ve všech situacích nemusí být pravda. Potřeba řešit tyto nedostatky vedla k jadernému patchi zavádějícímu objekty zdrojů probuzení, které existující framework rozšiřuje o více flexibility.
Nejdůležitější je, že nový patch zavádí objekty typu struct wakeup_source, které reprezentují entity, které mohou vygenerovat probouzecí události. Tyto objekty jsou automaticky vytvořeny pro zařízení, kterým je povoleno signalizovat probuzení, a interně se používají v pm_wakeup_event(), pm_stay_awake() a pm_relax(). I když rozhraní na nejvyšší úrovni jsou stále navržena tak, že hlásí probouzecí události relativně k zařízením, což je obzvláště vhodné pro ovladače zařízení a subsystémy, které obvykle pracují s objekty zařízení, nový framework umožňuje používat probouzecí objekty přímo.
„Samostatný“ objekt – zdroj probouzení je vytvořen funkcí wakeup_source_create() a přidává se do jaderného seznamu zdrojů probuzení funkcí wakeup_source_add(). Poté lze používat tři nová rozhraní __pm_wakeup_event(), __pm_stay_awake() a __pm_relax(), která s ním manipulují; když objekt již není zapotřebí, lze ho odstranit z globálního seznamu voláním wakeup_source_remove() a smazat pomocí wakeup_source_destroy(). Hlášené probouzecí události tedy již nemusí být spojeny s objektem zařízení. Na úrovni jádra je navíc možné probouzecí zámky Androidu nahradit objekty probouzecích událostí jeden za jeden, protože rozhraní výše jsou naprosto analogická k těm, která zavádí framework probouzecích zámků.
Infrastruktura popsaná výše by měla zjednodušit portování ovladačů zařízení Androidu do hlavní řady jádra. Nebyla navržena s ohledem na oportunistické uspávání, ale teoreticky by ji mělo být možné použít k implementaci velmi podobné techniky. V principu lze všechny probouzecí zámky v jádře Androidu nahradit objekty zdroje probuzení. Pak, pokud se správně použije rozhraní /sys/power/wakeup_count, bude výsledné jádro schopno zastavit uspání v reakci na probouzecí události za stejných okolností jako původní jádro Androidu. Uživatelský prostor ale nemůže k objektům zdroje probuzení přistupovat, takže tu část frameworku probouzecích zámků, která umožňovala uživatelskému prostoru s nimi manipulovat, bude nutné nahradit jinými mechanismy implementovanými zcela v uživatelském prostoru, což zahrnuje proces správy napájení a vhodné IPC rozhraní pro procesy, které by v Androidu používaly probouzecí zámky.
IPC rozhraní by mohlo být implementováno s použitím tří komponent: sdílené paměti, která by obsahovala čítač nazvaný „čítač uspání“, následuje mutex a podmínečná proměnná spojená s tímto mutexem. Pak by proces, který chce systému zabránit v uspání, získal mutex a inkrementoval čítač; proces, který by chtěl systému umožnit uspání, by získal mutex a dekrementoval čítač. Pokud by v tu chvíli čítač dosáhl nuly, procesy čekající na podmínečnou proměnnou by se odblokovaly. Mutex by byl následně uvolněn.
S IPC rozhraním výše by proces správy napájení mohl ve smyčce dělat následující:
To samozřejmě znamená, že by systém byl uspáván velmi agresivně. I když to není zcela ekvivalentní oportunistickému uspávání Androidu, zdá se, že se mu blíží dostatečně na to, aby se uspořilo stejné množství energie. Tento přístup nicméně také trpí mnoha problémy, které přístup Androidu má. Některé z nich lze vyřešit zesložitěním správce napájení a IPC rozhraní mezi ním a procesy, které blokují a povolují uspání, ale jiným se vyhnout nejde. Možná by tedy bylo lepší systém uspávat méně agresivně, ale v kombinaci s jinými technikami popsanými výše.
Celkově, i když nápad uspávat systém agresivně může být kontroverzní, nezdá se být rozumné úplně zavrhnout automatické uspávání jako platné opatření pro úsporu energie. Mnoho dalších operačních systémů dělá totéž a díky tomu dosahují dobré životnosti na baterie. Není zde žádný důvod, proč by se linuxové systémy nemohly chovat stejně, obzvláště když nemají k dispozici napájení z elektrické sítě. Co se desktopů a podobných systémů (laptopy, netbooky) týče, dává smysl nakonfigurovat je tak, aby se v některých situacích automaticky uspávaly, pokud je známo, že uspání systému na daném hardwaru funguje spolehlivě. K tomu by se mohla použít nová rozhraní a nápady zmíněné výše.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Ted jde o to dostat do jadra neco, co se mu bude, co se usporene energie tyce, aspon hodne blizit....a co bude Android používat, tudíž to bude uspávání na Androidu