Portál AbcLinuxu, 9. května 2025 05:50

Jaderné noviny 186

14. 10. 2002 | Leoš Literák
Články - Jaderné noviny 186  

Podpora velkého počtu vláken. AccessFS. Řízení názvu souboru s core dumpem.

Do konference přišlo celkem 1481 emailů, nejvíce psali Andrew Morton, Ingo Molnar a William Lee Irwin III.

Podpora velkého počtu vláken, 84 emailů

Ingo Molnar oznámil:

I když ani největší internetové servery zatím neobsluhují milion současně připojených uživatelů, i mnohem menší počet desíti tisíc vláken způsobí explozi algoritmu o složitosti O(N^2) ve funkci get_pid() po vyčerpání souvislého rozsahu PIDů. Sto tisíc a více vláken pak způsobí zatuhnutí systému na několik minut. Kromě toho, že algoritmus je pomalý, on se navíc dotýká spousty cachelines, čímž efektivně vyprázdní cache v CPU.

Existuje spousta patchů, které řeší nejhorší scénář a většinou k tomu používají dynamicky tvořenou bitmapu, kterou prohledávají => špatný výkon, ničí cache a je to vůbec ošklivý přístup. Ten problém je velmi složitý, neboť get_pid() musí vzít v úvahu nejen PIDy, ale i TGID, session ID a skupiny procesů.

Až jsem našel jeden patch, který jde správným (ale složitým) směrem: vytváří obecnou hashovací tabulku pro PIDy, session ID, TGID a process group ID, kterou správně vytváří a uvolňuje. Tento způsob nejenže poskytuje škálovatelnou a časově omezenou implementaci get_pid(), ale navíc odstraňuje polovinu iterací for_each_process(), což je také cenné. Nyní můžeme čistě iterovat skrze všechny procesy ve session group nebo process group.

Vzal jsem patch, upravil jej pro současné změny, opravil pár chyb a zprovoznil to. Fungovalo to dobře, pěkná práce Williame! Napsal jsem zcela novou implementaci alloc_pid(), která poskytuje alokaci PIDů bez zamykání a časově omezenou. Nejhorší případ trvá 10 mikrosekund na Pentium IV bez cache, s cachí dvě mikrosekundy (pid_max je nastaven na 1 000 000). Například pokud už bylo alokováno 999 999 PIDů, trvá méně než 10 mikrosekund najít jeden zbývající PID).

William Lee Irwin III, originální autor patche, poděkoval Ingovi za dokončení patche a přenechal mu další vývoj. Nicméně ne všichni vývojáři byli přesvědčeni o užitečnosti patche. Jedním z nich byl i Linus Torvalds, jenž považoval patch za přidávání příliš složitého kódu výměnou za příliš málo. Nicméně byl ochoten jej přídat, pokud bude vyčištěn. Ingo tedy na kódu velmi zapracoval a podstatně jej vylepšil a dále zrychlil. Linus jej na to začlenil do jádra.

AccessFS, 1 email

Olaf Dietsche napsal nový souborový systém, který umožňuje řídit přístup k systémovým zdrojům. V současnosti ovládá přístup k portům menším než 1024. Díky tomuto patchi již nikdy nebudete muset spouštět internetové démony jako root. Můžete individuálně nastavit, který uživatel/program se smí připojit ke kterému portu. Patch najdete zde.

Řízení názvu souboru s core dumpem, 14 emailů

Michael Sinz napsal patch, díky němuž je možné nastavit název souboru s core dumpem přes sysctl. Takto můžete zvolit místo, kam se budou core dumpy ukládat a pomocí vzorů [pattern] vložit do názvu UID, jméno programu, počítače či PIDu procesu, který způsobil core dump. Toto je velice šikovné pro bezdiskové clustery. Patch je k dispozici zde.

Andrew Morton cítil, že sysctl -w "kernel.core_name_format=/coredumps/%H-%N-%P.core" je příliš komplexní a navrhnul alternativní řešení, nicméně Bill Davidsen s ním nesouhlasil. Podle něj můžete řídit i takové vlastnosti, jako výběr adresáře, kam se budou ukládat dumpy. Líbila se mu flexibilita, kterou tento patch dává administrátorům. To dalo smysl Andrewovi a Michael byl okouzlen nápadem používat jméno programu jako adresář.

Tento článek vychází ze seriálu Kernel Traffic (http://kt.zork.net) a je zveřejněn pod licenci GPL verze 2.

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

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

Diskuse k tomuto článku

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