Portál AbcLinuxu, 4. května 2025 15:43
Aktuální verze jádra: 3.2-rc1. Citáty týdne: Dan Magenheimer, Ingo Molnar. Kvóty u tmpfs. Začleňovací okno 3.2, druhá polovina. Lepší správa výkonu ve verzi 3.2.
Aktuální vývojová verze jádra je 3.2-rc1 vydaná 7. listopadu. Užijte si to, dopřejte tomu náležitého testování. Nemělo by tam být nic extra děsivého, ale *je* toho tam hodně. Fakt, že se verze 3.1 protáhla, zapříčinil, že je toto jedním z větších začleňovacích oken, ale nejsem kvůli tomu až *tak* nervózní. Má to nové kódové jméno – Šavlozubá veverka.
Stabilní aktualizace: verze 2.6.32.47 a 2.6.33.20 vyšly 7. listopadu; obě obsahují dlouhý seznam důležitých oprav. 2.6.32.48 vyšlo 8. listopadu s opravou problému se sestavením, které se objevily v 2.6.32.47. Uživatelé řady 2.6.33 by měli vzít na vědomí, že 2.6.33.20 je poslední plánovanou aktualizací.
Testovací figurína se prohýbá.
KVM mafie vítězí.
Inovace spláče.
Beze srandy, kdyby mi někdo dal nástroj v tools/term/, který má základní funkčnost xtermu s podporou tabů, napsaný nad čistým libdri a převzal by celou obrazovku, přešel bych na to během 0,5 nanosekundy a dělal bych v tom většinu mého každodenního kódování a vypomohl bych s rozšířením o další aplikace (pravděpodobně počínaje rozumným mailovým klientem).
-- Ingo Molnar
Druhá verze údržbářského [plumber's] seznamu přání pro Linux obsahuje žádost o podporu kvót u souborového systému tmpfs. Aktuální jádra takovou podporu nemají, což usnadňuje místním uživatelům udělat DoS útok zaplněním /tmp nebo /dev/shm. Davidlohr Bueso vyslyšel tuto žádost patchem, který tuto podporu doplňuje. Ale ukázalo se, že zde panuje neshoda ohledně toho, jak by limity tmpfs měly být spravovány.
Davidlohrův patch ve skutečnosti neimplementuje kvóty; namísto toho přidává nové omezení prostředků (RLIMIT_TMPFSQUOTA), který řídí, kolik místa může uživatel využít na všech připojených tmpfs. Tento přístup je v seznamu přání vyžadován; něco na něm je, neboť tmpfs není perzistentní souborový systém. Běžné implementace souborových systémů ukládají kvóty v souborovém systému samotném, ale tmpfs to udělat nemůže. Takže použití kvót by znamenalo, že by uživatelský prostor musel nějakým způsobem opětovně načítat databázi kvót při každém bootu (nebo, v závislosti na implementaci, při každém připojení tmpfs). Omezení prostředků vypadají jako jednodušší situace.
I tak má přístup přes omezení prostředků své odpůrce. Vývojáři by raději viděli, kdyby se tmpfs chovalo stejně jako ostatní souborové systémy. Navíc uživatelé a aplikace snad mají trochu ponětí o tom, jak reagovat na chyby o „překročení kvóty“. Překročené limity prostředků nemají tak pevnou pozici. Jak Alan Cox podotkl, načítání kvót nemusí být takový problém; mohlo by jít třeba jen o něco tak jednoduchého jako volba pro mount, která určí výchozí kvótu pro všechny uživatele.
Nakonec to nevypadá, že by implementace založená na něčem jiném než diskových kvótách, byla začleněna, takže tento patch bude muset být přepracován.
Dne 7. listopadu oznámil Linus vydání verze 3.2-rc1 a uzavřel začleňovací okno. Během čtrnáctidenního okna bylo do hlavní řady přetaženo nějakých 10 214 neslučovacích změn. To z něj dělá nejaktivnější začleňovací okno v historii, docela slušně překonávajíc předchozího držitele rekordu (2.6.30, 9603 změn). Zpoždění na začátku tohoto vývojového cyklu bezpochyby způsobilo nahromadění práce, ale tak či tak se toho obecně více dělo.
Změny viditelné pro uživatele od shrnutí z minulého týdne zahrnují:
Změny viditelné vývojářům jádra zahrnují:
Navzdory velikosti tohoto vývojového cyklu nebyla přetažena řada stromů. Linus se otevřeně vyhnul všem kontroverzním (např.: FrontSwap a nástroj KVM); jiné byly jednoduše přeskočeny. Některé mohou proklouznout do -rc2, ale teď hlavně přišel čas na stabilizování tohoto kódu. Pokud bude platit pravidlo, tak můžeme vydání 3.2 čekat někdy kolem poloviny ledna.
Linuxové jádro už má dlouho schopnost regulovat napětí a frekvenci CPU pro optimální chování, kde „optimální“ je funkcí zohledňující výkon i spotřebu energie. Ale v systému je toho více než jen CPU a je tam řada dalších komponent, které mohou běžet na vícero úrovních výkonu. Není překvapením, že náležitá infrastruktura pro správu řídících bodů zařízení je pozadu oproti té pro CPU, neboť množství uspořené energie je typicky menší. Ale teď, když už je chování výkonu CPU poměrně dobře optimalizované, infrastruktura pro výkon se rozrůstá tak, aby mohla zahrnout zbytek systému. Jádro 3.2 bude mít novou sadu API zamýšlenou pro ovladače, aby systém mohl najít nejlepší úroveň fungování pro zařízení, která spravuje.
API pro dynamické škálování napětí a frekvence (dynamic voltage and frequency scaling; DVFS) má tři oddělené kousky, první z nichž byl začleněn už v 2.6.37. Modul „míst pracovního výkonu“ [operating power points] jednoduše sleduje různé úrovně práce dostupné u daného zařízení; API je deklarováno v <linux/opp.h>. Ve stručnosti se místa úrovně práce se spravují pomocí:
int opp_add(struct device *dev, unsigned long freq, unsigned long u_volt); int opp_enable(struct device *dev, unsigned long freq); int opp_disable(struct device *dev, unsigned long freq);
Úrovně práce jsou ve výchozím stavu povoleny; ovladač může zakázat určité úrovně v závislosti na obavě o teplotu nebo výkon. Existuje sada funkcí pro získávání úrovní práce nad nebo pod danou frekvencí, což je užitečné pro posun nahoru nebo dolu po měřítku výkonnosti.
Ovladač, který chce podporovat DVFS na určitém zařízení, začne vyplněním jedné takové struktury (která je deklarovaná spolu se zbytkem API v <linux/devfreq.h>):
struct devfreq_dev_profile { unsigned long initial_freq; unsigned int polling_ms; int (*target)(struct device *dev, unsigned long *freq); int (*get_dev_status)(struct device *dev, struct devfreq_dev_status *stat); void (*exit)(struct device *dev); };
Nepřekvapí, že initial_freq je původní pracovní frekvencí zařízení. Téměř všechno ostatní v této struktuře slouží ku pomoci správcům frekvence [frequency governors] při odvádění práce. Pokud je polling_ms nenulové, dává to správci vědět, jak často se má dotazovat zařízení ohledně aktuálního vytížení; toto dotazování bude mít podobu volání get_dev_status(). Tato funkce by měla naplnit strukturu stat relevantními informacemi:
struct devfreq_dev_status { /* both since the last measure */ unsigned long total_time; unsigned long busy_time; unsigned long current_frequency; void *private_data; };
Správce použije tuto informaci k rozhodnutí, zda by aktuální pracovní frekvence měla být změněna, nebo ne. Pokud je nutná změna, zpětné volání target() bude zavoláno pro příslušnou změnu pracovní úrovně. Tato funkce by měla vybrat frekvenci alespoň tak vysokou, jako je předána v *freq, a následně aktualizovat *freq dle aktuálně vybrané frekvence. Zpětné volání exit() dává ovladači možnost věci vyčistit, pokud se vrstva DVFS rozhodne na zařízení zapomenout.
Jakmile je struktura devfreq_dev_profile vyplněna, ovladač udělá registraci pomocí:
struct devfreq *devfreq_add_device(struct device *dev, struct devfreq_dev_profile *profile, const struct devfreq_governor *governor, void *data);
Pokud je to potřeba, ovladač může dodat svého vlastního správce pro řízení frekvencí, ale jádro má několik vlastních: devfreq_powersave (udržuje frekvenci na nejnižší možné úrovni), devfreq_performance (udržuje frekvenci co nejvýše), devfreq_userspace (umožní řízení frekvencí přes sysfs) a devfreq_simple_ondemand (snaží se udělat kompromis mezi výkonem a spotřebou energie).
Notifikační mechanismus vestavěný do kódu úrovně práce může být použit k automatickému vyvolání správce, pokud by se sada dostupných úrovní práce změnila. Existuje řada způsobů, jakými by k takové změně mohlo dojít; jednou z jich je změna v očekáváních, jak rychle dokáže zařízení odpovídat. V tomto případě získalo jádro 3.2 také vylepšení v kódu quality of service (pm_qos), aby docházelo k ošetření QOS požadavků jednotlivých zařízení. Jaderný kód může vyjádřit QOS očekávání u zařízení za pomoci jedné z těchto funkcí (všechny jsou z <linux/pm_qos.h>):
int dev_pm_qos_add_request(struct device *dev, struct dev_pm_qos_request *req, s32 value); int dev_pm_qos_update_request(struct dev_pm_qos_request *req, s32 new_value); int dev_pm_qos_remove_request(struct dev_pm_qos_request *req);
Struktura dev_pm_qos_request je používána jako deskriptor pro správu požadavků, ale volající kód nemusí přistupovat k jejímu obsahu. Předaná hodnota value popisuje zamýšlenou kvalitu služby; dokumentace je překvapivě vágní v tom, jaká je jednotka této hodnoty. Zdá se, že popisuje požadovanou latenci, ale kýžená přesnost je nejistá.
Na straně ovladače se používá rozhraní notifikátoru:
int dev_pm_qos_add_notifier(struct device *dev, struct notifier_block *notifier); int dev_pm_qos_remove_notifier(struct device *dev, struct notifier_block *notifier);
Jakmile se změní požadavky na kvalitu služby u tohoto zařízení, notifikátor bude zavolán s novou hodnotou. Ovladač pak může upravit dostupné úrovně práce, například zakázáním těch, při kterých by pak zařízení nebylo schopno splnit požadovanou kvalitu služeb.
Nutno poznamenat, že tento nový kód nemá doposud ve stromu žádné uživatele. To může znamenat, že toto rozhraní může být poněkud méně stálé; jakmile začnou vývojáři tyto funkce užívat, pravděpodobně najdou věci, které by šlo zlepšit. Jenže interní rozhraní jsou tak jako tak vždy možným předmětem změn; možnému rozvoji navzdory, tato schopnost by měla být užitečná.
Seriously, if someone gave me a tools/term/ tool that has rudimentary xterm functionality with tabbing support, written in pure libdri and starting off a basic fbcon console and taking over the full screen,
Beze srandy, kdyby mi někdo dal nástroj v tools/term/, který má základní funkčnost xtermu bez podpory tabulátoru, napsaný nad čistým libdri a převzal by celou obrazovku
Jó, to už částečně funguje. S 3.2 to bude ještě lepší (tedy pokud IO-less dirty throttling bude podobný tomu, který jsem zkoušel ve formě patchů z linux-fsdevel).
vam to nejde?
Ale jestli půjde v Linuxu konečně kopírovat na USB flashku a přitom normálně pracovat, bude to taková malá revoluce :)Ono to někdy nešlo?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.