Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
Vyšlo jádro verze 3.12, a to 3. listopadu. Váhal jsem, jestli udělat rc8, nebo rovnou konečnou verzi, ale jelikož hlavním důvodem, proč *nedělat* konečnou verzi nebyl ani stav kódu, nýbrž prostě skutečnost, že budu během příštího týdne cestovat s velmi špatným připojením k Internetu, jsem už nechtěl vydání dále odkládat.
Mezi hlavní novinky v tomto vydání jsou vylepšení v kódu pro dynamický tik, podpůrná infrastruktura pro vykreslovací uzly [render node] v DRM, automatické rozvrhování velikosti TSO a plánovač FQ v síťové vrstvě, podpora uživatelských jmenných prostorů v XFS, vícevlákenný RAID5 v subsystému MD, offline deduplikace dat v systému souborů Btrfs a ještě více. Více se dozvíte na KernelNewbies.
Linus v oznámení upozornil na několik dalších věcí. Jednou z nich je, že začleňovací okno 3.13 tento týden ještě nezačne. Začíná navíc přemýšlet o verzi 4.0 a nadhodil, že by 4.0 bylo vydání, kde by byly jen opravy, i když má pochyby, že by to vyšlo. Ale nedá mi to. Třeba by to vyšlo a já jen zbytečně nedůvěřuji ostatním. Kdyby se nám podařilo upozornit dostatek lidí (i firem/manažerů), že jediné patche, které budou přijaty, jsou opravy chyb, třeba by se nám to mohlo povést.
Myslím si, že jako komunita stále spoléháme na to, že enterprise distribuce a jejich partneři udělají důsledné testování všech velkých vydání. Není to ideální situace, ale nikdy nebudeme moci vyhradit dostatek fyzických, finančních nebo lidských prostředků na to, abychom to udělali celé sami.
-- Mel Gorman
Obvykle to nejsou vývojáři, kdo má rozhodující dopad na stabilitu subsystému, nýbrž správci, a hlavním způsobem, jak zajistit stabilitu kromě opatrnosti při začleňování patche, je, pamatovat si/sledovat všechny problémy a nezačleňovat od stejného vývojáře žádné novinky, dokud neopraví chyby, co nadělal.
-- Ingo Molnar
Váhám, jestli by se to mělo pojmenovat jako kernel/locks, protože to znamená míň psaní, kratší názvy cest a když si to dáte do bagety, tak to dobře chutná.
Některá novější uložná zařízení mají schopnost dělat atomické I/O operace. Atomická operace buď celá uspěje, nebo selže; pokud se má zapisovat více bloků, tak se buď zapíšou všechny, nebo žádné. Tato funkce má potenciál značně zlepšit žití ve vyšších vrstvách, ale jádro nemá aktuálně žádný způsob, jak ji podporovat.
Sada patchů pro atomické I/O od Chrise Masona se tento stav pokouší napravit. Umožňuje soubor otevřít s příznaky O_ATOMIC a O_DIRECT (je podporované jen přímé I/O) pro získání atomické funkčnosti. Od té doby bude každé volání write() provedeno atomicky, pokud to hardware podporuje. Tuto funkci je proto snadné používat z uživatelského prostoru.
V rámci jádra je pro blokové ovladače k dispozici nová funkce:
void blk_queue_set_atomic_write(struct request_queue *q, unsigned int segments);
Tato funkce blokové vrstvě řekne, že zařízení za danou frontou požadavků dokáže provádět atomické operace až do daného počtu segmentů. Poté mohou I/O požadavky přicházet s příznakem REQ_ATOMIC, který označuje žádost o atomické provedení. Bloková vrstva se postará o to, že maximální počet segmentů nebude překročen.
Tato funkčnost může najít řadu využití. Systém souborů s žurnálem například může zapisovat žurnál a blok s commitem současně a bude vědět, že zapsaný blok s commitem bude viditelný jen tehdy, pokud se podařilo zapsat i vše ostatní. Chris ale říká, že prvním cílem je MySQL:
O_ATOMIC | O_DIRECT umožňuje mysql a podobným vypnout dvojité bufferování. Toto snižuje jejich I/O na polovinu, díky čemuž pak jsou zhruba 2× přátelštější k flash úložištím.
Sada patchů (která nepřidává žádnou podporu do jakýchkoliv ovladačů v blokové vrstvě) je docela malý a jednoduchý, takže je docela velká šance, že bude ve velmi brzké budoucnosti začleněn.
Artem S. Tashkinov nedávno narazil na problém, kteří jistě někteří čtenáři znají. Připojte pomalé úložné zařízení (USB flasku nebo třeba nějaký přehrávač) do linuxového stroje a zapište na něj hodně dat. Celý systém se nakonec zasekne, možná i na celé minuty. Nakonec se to zase rozjede, ale znechucený uživatel možná mezitím odešel na pivo; než bude systém zase použitelný, tak už uživatel nemusí mít o danou operaci ani zájem.
Tentokrát ale Artem vypozoroval něco zajímavého: systém se zasekne při běhu na 64bitovém jádře, ale nic takového se mu na stejném hardwaru neděje na 32bitovém jádře. Člověk by čekal, že subsystém blokového I/O bude od detailů jako délka slova procesoru izolován, ale v tomto případě by se jeden divil.
Linus rychle pochopil, co se děje. Jde o problém srovnání rychlosti, jakou proces v paměti vytváří špinavé [dirty] stránky, a rychlosti, jakou je možné tuto paměť zapisovat na úložné zařízení. Pokud je procesu umožněno znečistit velký objem paměti, pak bude jádro muset zapisovat blok dat, jehož zápis potrvá minuty. A tato data ucpou I/O fronty a množná i opozdí další operace. Jakmile někdo zavolá sync(), tak se vše zastaví, dokud není zapsán veškerý obsah ve frontě. Jde o ekvivalent problému bufferbloat, jen v úložných zařízeních.
Vývojáři zodpovědní za subsystémy pro správu paměti a blokové I/O o tomto problému vědí. Aby bylo možné problému předejít, tak vytvořili sadu nastavitelných hodnot pod /proc/sys/vm, pomocí kterých se dá řídit, co se má dít, pokud proces vytváří mnoho špinavých stránek. Jde o:
Nastavení těchto limitů na nízké hodnoty může také mít dopad na výkon: dočasné soubory, které budou hned odstraněny, budou zapisovány na úložiště a drobné I/O operace mohou vést k nižší propustnosti I/O a horšímu umístění na disku. Nastavení příliš vysokých limitů zase může vést k problémům z přílišného bufferování, jako je popisováno výše.
Pozorný čtenář by se mohl ptát: co se stane, když správce nastavít dirty_ratio i dirty_bytes, hlavně když hodnoty nesouhlasí? Funguje to tak, že platí buď limit v procentech, nebo v bajtech, ale ne obojí. Platí zkrátka ten, který byl nastaven jako poslední; nastavení dirty_background_bytes na nějakou hodnotu způsobí přenastavení dirty_background_ratio na nulu.
Jsou tu další dva detaily, které jsou klíčové k pochopení chování, jaké popisuje Artem: 1) ve výchozím nastavení se používají procenta a 2) na 32bitových systémech se poměr aplikuje podle objemu low memory (nízké oblasti paměti) – tedy paměti přímo adresovatelné jádrem, nikoliv podle celkového objemu paměti. Na snad všech 32bitových systémech do této nízké oblasti spadá jen prvních ~900 MB paměti. Proto jakýkoliv nový systém s rozumným objemem paměti bude mít na 64bitovém jádře jiné hodnoty dirty_background_ratio a dirty_ratio než na 32bitovém. Na Artemově systému s 16 GB RAM bude 64bitový limit dirty_ratio odpovídat 3,2 GB; na 32bitovém jádře to bude přibližně 180 MB.
Tento (obří) rozdíl mezi těmito limity se hned projeví při zápisu na pomalé úložné zařízení. Nižší limit neumožní nahromadění zdaleka tak velkého objemu dat, než začne brzdění procesu, který zapisuje data, což má pro uživatele systému mnohem lepší výsledky (leda by uživatel chtěl naštvaně odejít na pivo).
Jakmile je podstata problému jasná, tak se může začít mluvit o řešeních. Linus navrhl, že kdokoliv narazí na podobný problém, by mohl problém obejít snížením dirty_background_bytes a dirty_bytes na rozumné hodnoty. Ale obecně panuje shoda, že výchozí hodnoty na 64bitových systémech nedávají na současných systémech moc smysl. Pravdou je, že podle Linuse jsou limity určené pomocí procent obecně přežitkem:
Používání procent pochází z dob, kdy jsme obvykle měli 8-64 *megabajtů* paměti. Takže pokud jste měli 8MB stroj, tak jste nechtěli mít více než 1 MB zabraný špinavými stránkami, ale když jste byli „pan Zbohatlík“ a mohli si dovolit 64 MB, tak jste mohli mít až 8 MB pro špinavé stránky.
Věci se teď mají jinak.
Proto navrhl, že by mohly výchozí hodnoty být změněny na údaje v bajtech; nebo by se limity v procentech vztahovaly jen na první 1 GB paměti.
Samozřejmě by bylo hezčí mít v jádře chytřejší chování. Limit, který se vztahuje na pomalé USB zařízení, nemusí být vhodný pro vysokorychlostní úložné pole. Jádro teď má logiku, pomocí které se snaží odhadnout skutečné rychlosti zpětného zápisu na každém připojeném zařízení; díky tomu by mohlo jít omezovat počet špinavých stránek na základě času, jak dlouho potrvá jejich zápis. Ale jak Mel Gorman upozornil, tento přístup není snadné implementovat.
Andreas Dilger tvrdil, že celá myšlenka shromažďovat data před zahájením I/O už není užitečná. Systém souborů Lustre bude spouštět I/O při cca. 8 MB dat; myslí si, že podobné pravidlo (aplikované na jednotlivé soubory) by mohlo vyřešit spoustu problémů s minimem složitostí. Dave Chinner ale vnímá situaci jako mnohem složitější; takové pravidlo by při řadě zátěží nefungovalo.
Dave místo toho navrhuje, že by se jádro mohlo zaměřit na implementaci dvou základních pravidel: „cachování zpětného zápisu“ (tak vlastně věci fungují teď) a „cachování přímého zápisu [writethrough]“, kde by platily nižší limity a I/O by začalo dříve. Zpětný zápis by se používal pro většinu zátěží, ale writethrough dává smysl u pomalých zařízení nebo při sekvenčním streamování. Klíčové pak je, aby jádro dokázalo rozhodnout, jaká pravidla použít, bez zásahu uživatele. Máme tu nějaké zjevné indikace včetně různých volání fadvise() nebo vysokorychlostního sekvenčního I/O, ale bez pochyb by se musely dořešit všemožné detaily.
Z krátkodobého hlediska ale s nejvyšší pravděpodobností uvidíme relativně jednoduché opravy. Linus zaslal patch omezující procentuální výpočty na první 1 GB paměti. Tento druh opravy by se mohl dostat do verze 3.13; hezčí řešení pochopitelně zaberou více času.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Akorát je to o dost složitější a nestačí na to běžný XML parser, který je snad všude.
musis pockat, nez se cela stranka dotahne.
FUD. Co jsou asi SAX parsery? Zpracovávat můžeš průběžně. Jen po nalezení chyby musíš ohlásit chybu a veškeré rozdělané operace zrušit.
A kdyby externi poskytoval obsahu (treba dodavatel reklamy) udelal jedinou chybku, neuvidis nic.
FUD. XHTML zcela rozumně nepodporuje innerHTML, tedy úpravy znak po znaku. Vždy je nutné pracovat přes DOM, takže nikdy nemůže vzniknout chybně utvořený dokument.
+1 U XML není problém zpracovávat ani „nekonečné“ soubory – na vstupu máš XML, které nemusí nikdy skončit, a na výstupu máš SAX události, které se nějak zpracovávají.
U atributu by to byl problém. Ale text by šel rozsekat na více textových uzlů a posílat je postupně, ne?
<img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOy..." alt="?" />
BTW: u binárních formátů zase často bývá problém, že délka atributu se popisuje určitým pevně daným datovým typem – a ten má svoje limity, takže často ani tam nemůžou být nekonečné atributy nebo nekonečně dlouhé zprávy.
Podla mna je tam vacsi problem: preco zapis na jedno zariadenie zablokuje cely system?vid. clanok: A tato data ucpou I/O fronty a množná i opozdí další operace
Viem si tiez zivo predstavit, ze v realnej aplikacii sice je zapis hlavne na flesku ale je tam aj nejaky minizapis na normalny disk (mozno len nejake metadata).Ale mně
cp
zapisující na flashku klidně blokne Firefox, který s flashkou nemá nic společného.
No a sync garantuje ze sa flushne vsetko.I tak bych čekal, že to bude flushovat na různá zařízení paralelně. Hm, ale kdyby fakt rostla jednotná fronta, tak by to asi šlo - další procesy se ani nedostanou do fronty, ale rovnou freeznou.
(Podotýkám, že nejsem ani zdaleka odborník na blokovou vrstvu, takže to, co píšu, je potřeba brát s rezervou.)
Jeden potenciální problém vidím v tom, že tady není řeč o frontě requestů konkrétního fyzického zařízení, ale o page cache. Na téhle úrovni nemusí být na první pohled jasné, na jakém fyzickém zařízení určitá stránka nakonec skončí (a jestli vůbec na nějakém).
Mimochodem, i ta myšlenka zohlednit rychlost zařízení, je v článku zmíněna, ale jak už to bývá, ďábel se skrývá v detailech a těch podle odkazovaného mailu zbývá dořešit ještě docela dost. Některé jsou navíc způsobeny absurdním chováním aplikací, s čímž se dá v jádře dělat nanejvýš to, že ho vezmete na vědomí a budete s ním počítat. Navíc se nelze příliš zaměřit jen na jeden use case, aby nedošlo k tomu, že řešení problému "zápis na flash disk mi zasekává KDE" způsobí výraznou výkonnostní regresi třeba u vytížených fileserverů s velkým počtem rychlých disků
+1 akorát už mi to nepřijde tak paradoxní jako dřív. Občas jsem byl s odezvou desktopu na GNU/Linuxu trochu nespokojený, ale vyléčilo mne z toho, když jsem si občas sedl k nějakým cizím Windows.
nice
, občas to dělám, ale ve chvíli, kdy jsou to desítky, stovky jednotlivých příkazů není to až tak handy. To co jsem chtěl zdůraznit, že už to, že takovou situaci řeším ručním zásahem, vnímám jako špatně.Taky to vidím jako hlavní obsah tvého předchozího sdělení.
Provedu náhledy a spustím dávkové zpracování aby se vše co jsem chtěl udělat fakticky provedlo.
Tady předně měl uvažovat autor programu a při dávkovém zpracování zvýšit nice.
Třeba tak, že okno nemá fokus, nebo je minimalizované, nebo tak, že "je vespod" a není tím pádem vidět.
Je triviální zjistit XID aktivního okna, méně spolehlivé z _NET_WM_PID property získat PID a procesu zvýšit prioritu.
Trochu narážíme, že snižovat nice může je proces s CAP_SYS_NICE, což tradičně běžný uživatel není.
Kdysi se dělaly pokusy s řídicími skupinami podle uživatelských relací. Kam to došlo, netuším.
Tady předně měl uvažovat autor programu a při dávkovém zpracování zvýšit nice.Taková reakce je dost mimo kontext jak toho, co lertemir psal, tak toho, že máme osmdesátá léta daleko za sebou.
Kdysi se dělaly pokusy s řídicími skupinami podle uživatelských relací. Kam to došlo, netuším.Lennart už se na to docela chystá, pokud vím :).
Lennart už se na to docela chystá, pokud vím :).OMG.
Lennart už se na to docela chystá, pokud vím :).* Jakub Lucký shoots himself in the head
echo 5 > /proc/sys/vm/dirty_background_ratio
??
dirty_background_bytes
.
uname -a
Linux debian-desktop 3.12-trunk-amd64 #1 SMP Debian 3.12-1~exp1 (2013-11-17) x86_64 GNU/Linux
ale i při:
cat /proc/sys/vm/dirty_background_ratio
5
co je špatně? při kopírování ze síťového disku na pomalou kartu přes čtečku se systém sekal a ne málo
/proc/sys/vm/dirty_background_bytes
nastavené na nulu a /proc/sys/vm/dirty_background_ratio
na deset procent, tudíž se berou procena a ne byty.
echo 0 /proc/sys/vm/dirty_background_ratio
echo 16777216 /proc/sys/vm/dirty_background_bytes
kousání pokračuje dál - dělám něco špatně?
(Budu předpokládat, že ta většítka jste vynechal a ve skutečnosti je tam máte.)
Pokud nastavíte na nižší hodnotu pouze dirty_background_bytes, ale ponecháte defaultní dirty_ratio=20
, znamená to (při 4 GB paměti), že writeback sice začne už při 16 MB dirty pages, ale protože writeback bude mnohem pomalejší než tempo, kterým zapisující proces "špiní" stránky, stejně mu ve výsledku dovolíte vyrobit až zhruba 800 MB dirty pages, než začne čekat (což při zápisu většího souboru hravě zvládne).
Chcete-li vyzkoušet, jak se to bude (defaultně) chovat s Linusovým patchem, potřebujete nastavit dirty_background_bytes
zhruba na 100 MB a dirty_bytes
asi na 200 MB (tj. 10% resp. 20% z 1 GB). Případně můžete experimentovat i s hodnotami nižšími, ale opět je potřeba nastavovat obě.
Že jsem nepsal, že má nastavovat dirty_background_bytes
a dirty_background_ratio
, ale dirty_background_bytes
a dirty_bytes
.
Začínám mít pocit, že polovina účastníků této větve diskuse ten článek vlastně nečetla…
root@debian-desktop:/home/marek# echo 0 > /proc/sys/vm/dirty_background_ratio
root@debian-desktop:/home/marek# echo 33554432 > /proc/sys/vm/dirty_background_bytes
root@debian-desktop:/home/marek# echo 66554432 > /proc/sys/vm/dirty_bytes
asi zabral - k cukání nedochází, jen občas k mírnému zpomalení
nadhodil, že by 4.0 bylo vydání, kde by byly jen opravy
To jako, že 3.1 až 3.12 byly beta? A 4.1 bude zase beta pro 5.0?
Artem S. Tashkinov
Funguje to tak, že platí buď limit v procentech, nebo v bajtech, ale ne obojí. Platí zkrátka ten, který byl nastaven jako poslední;by mělo jít nastavit velikost v bajtech a tím přebít procenta. Případně nastavit, víc než 100 %, ale to nevím, jestli jde
echo 10000 > /sys/block/sda/queue/nr_requests
) proporcionálně k velikosti paměti? Tak aby se fronta nemohla ucpat.
Dokážu si představit, že zápis na pomalé zařízení bude dlouho trvat. Ale nemusí kvůli tomu zatuhnout celý systém. Moje laická představa je, že pokud se fronta zaplní, tak další zápisy do fronty se stanou "blokujícími operacemi", což způsobí "vytuhnutí" systému. A pokud nedojde k tomuto zablokování, tak systém dále žije. To je důvod proč se ptám proč nestačí zvednout velikost front.
Jiná věc je pak ta, že čtení ze zařízení s velkou frontou zápisu může být pomalé protože se o "šířku kanálu" musí dělit. Ale asi by v tomto případě mohlo zafungovat CFQ, které by v mé (laické) představě mělo zaručit všem procesům stejnou šíři kanálu. ( Ve skutečnosti stejnou šíři kanálu ale úměrnou proporcionálně IO prioritě procesu, ale to je už jen drobný detail.)
Lidi, vezměte, prosím, konečně na vědomí, že problém, o kterém se tu bavíme, se netýká front zařízení. Zaplnění fronty requestů USB disku by nijak neblokovalo ten normální.
druhy problem moze nastat, ak pojde o dve navzajom zavisle operacie, napr. zapis a spatne citanie bloku, neviem ako je toto osefovane v kerneli (predpokladam, ze sa data proste vytiahnu z fronty bez sahania na disk).
Ne z fronty, z page cache. O té je tady celou dobu řeč, ne o frontách jednotlivých zařízení.