Portál AbcLinuxu, 8. srpna 2025 20:42


Výkon vytváření vláken u 64bit aplikací

Na KernelTrapu se popisuje řešení problému, kdy jakmile přesáhne využití stacku 4 GB, vytváření vláken může trvat až 10 milisekund, což je nepřijatelné. Na vině je drobný hack, který zároveň zajišťuje 32bit kompatibilitu. Pro použití v glibc bude zaveden nový příznak, který problém odstraní.

19.8.2008 13:17 | Luboš Doležel (Doli) | Zajímavý článek


Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

David Watzke avatar 19.8.2008 14:21 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Odpovědět | Sbalit | Link | Blokovat | Admin
No já teda nevím... když si představím 4 GB ve stacku, poslední co by mě tankovalo je čekání 10 ms na vytvoření vlákna :-D
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
m1c4a1 avatar 19.8.2008 14:41 m1c4a1 | skóre: 2
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Až se budou velikosti aplikací běžně pohybovat ve stovkách megabytů, tak to oceníš. :-)
19.8.2008 14:57 pasmen | skóre: 45 | blog: glob | Praha
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Až se tohle stane, bude něco špatně s jejich tvůrci...
20.8.2008 09:17 Profesor Hrbolek
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Jo ty budeš asi čistě uživatel svobodných aplikací, pro tvé info: už se tak stalo a do linuxu se to už taky začíná cpát.
m1c4a1 avatar 20.8.2008 14:01 m1c4a1 | skóre: 2
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Tak to s takovou už teď - dřív se dělaly programy na pár bytů, dneska jsou to řádově kilo/megabyty. Prostě se víc využívá technologie, která je dostupná.
19.8.2008 15:06 Majkls
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
No to by mě zajímalo, jaké čuňátko potřebuje 1GB zásobník, nicméně je dobře, že to je upravené. Je dobré říct, že mezi alokací na zásobník a pomocí (c|m)alloc je diametrální rozdíl. Doufám, že o něm víte.
Není umění napsat 10000 řádků, ale napsat na 10 řádků, co by jiný psal na 1000 řádků.
19.8.2008 15:53 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Proč hned mluvit o čuňátcích? Možná nečtu dost pozorně, ale v tom odkazovaném dokumentu to na mne nepůsobí tak, že by šlo o zásobníku jednoho threadu, ale o velikost zásobníku celkem. Je-li to tak, pak to nemusí vůbec znamenat čuněcí aplikaci, ale třeba extrémně velký počet threadů.
19.8.2008 15:58 mafo
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
hmm ja nevim: calloc udela malloc + clear?

to ale nevidim jako problem ne?
Luboš Doležel (Doli) avatar 19.8.2008 17:07 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
calloc rozhodně nepoužívá malloc.
Luboš Doležel (Doli) avatar 19.8.2008 17:14 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Kruci, spletl jsem si to s alloca.
19.8.2008 17:11 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
On tam píše o niečom inom. :)

Píše tam o alokovaní na zásobníku (napr. definovaním lokálnych premenných, alebo použitím funkcie alloca) s "klasickým" alokovaním pamäte pomocou (c|m)alloc.
19.8.2008 19:28 Mti. | skóre: 31 | blog: Mti
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
no tak uz mne nenapinejte. V zivote sem na AVRku nemel vic jak 2kB ram, tak to nevim, no :-D Maloc sem tam "vedome" pouzil jen jednou, kdyz sem chtel vedet, kde zacina "volne" misto v ram... :-P
Vidim harddisk mrzuty, jehoz hlava plotny se dotyka...
20.8.2008 15:29 *
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
pekny priklad, jenze financni nekde stale jeste pouziva metriku lines of code na vyhodnoceni vykonnosti divizi a i podle toho se tvori jejich rozpocet...
20.8.2008 02:09 Cartman
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Odpovědět | Sbalit | Link | Blokovat | Admin
je to snadne prekrocit. Napr. klasicky rekurzivni quicksort miliardy prvku, v zavislosti na hodnotach pole, muze prekrocit 4GB stack. Pokud nekdo ma v pocitaci 64GB ram, jeho aplikace muze usoudit ze trideni 20GB pole by melo fungovat bez problemu. Ano, vim ze to lze udelat i ukladanim hodnot na heap misto stacku, ale dela se to prave proto ze na mnoha platformach je pouzivani stacku omezene (oproti heapu). Pokud se nekdo stara aby tomu tak nebylo v Linuxu, je to vyborne. Ne kazdy vytvari text editor nebo mail-klienta ;-)
Luk avatar 20.8.2008 11:52 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Žil jsem v tom, že využití rekurze tímto způsobem je pouze doménou výukových příkladů, které mají za cíl ukázat, jak rekurze funguje. Už následující příklad obvykle ukazuje, jak rekurzi převést na iteraci ;-)
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
20.8.2008 13:12 Cartman
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
a proc myslis ze "následující příklad obvykle ukazuje, jak rekurzi převést na iteraci" ? Protoze je zejemena na Windows, velikost stacku defaultne omezena. Zadny jiny duvod proc zneprehlednit program a zrusit rekurze neni.
Luk avatar 20.8.2008 13:33 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Zadny jiny duvod proc zneprehlednit program a zrusit rekurze neni.
To není pravda. Důvodů je celá řada. V některých případech při rekurzi podstatně roste složitost, rekurze má obecně vyšší režii (neporovnávám s iteracemi řešenými tak, že se přialokovává paměť na haldě!), někdy se velmi obtížně ladí atd. Rekurzivní řešení je přehledné, to ano. Ale pro případy velmi hlubokého zanoření to většinou není to pravé ořechové.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
20.8.2008 14:08 Cartman
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
kazdopadne je to vec nazoru a je dobre ze 4GB stack problem je odstranen. Pravdepodobne se nato prislo prave v nejake implementaci rekurzivni funkce na vypocet nebo zpracovani cehosi.
20.8.2008 14:29 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Znovu upozorňuji, že tady jde IMHO o celkovou velikost zásobníku, ne o velikost zásobníku pro jeden thread. Přeci jen 'ulimit -c 4194304' (nebo víc) má asi nastaveno málokdo.
20.8.2008 14:44 Ondrej 'SanTiago' Zajicek
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
V některých případech při rekurzi podstatně roste složitost,

Coz ale vubec nesouvisi s pouzitim rekurze - pokud by se takovy program primocare prevedl na iteraci, tak by mel take velkou slozitost. (Pokud tedy slozitosti myslis casovou slozitost.)
Luk avatar 20.8.2008 16:28 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Ano, je to tak. Neměl jsem na mysli přímočaré převedení na iteraci. Proto jsem napsal "v některých případech".

Ještě bych měl pro korektnost také dodat, že pokud je pro iterační algoritmus potřeba předem neurčené množství paměti, tak to znamená vyžádat si paměť přímo od systému (obejít správce haldy), což není zrovna příliš přenositelná záležitost.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
20.8.2008 18:45 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
V některých případech při rekurzi podstatně roste složitost, rekurze má obecně vyšší režii
muzete se o tom rozepsat?
Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
20.8.2008 23:58 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
Jako implementátor Schemu přece tušíš o rozdílech mezi "běžnou" a tail call rekurzí :-D
Ještě na tom nejsem tak špatně, abych četl Viewegha.
21.8.2008 00:22 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
Rozbalit Rozbalit vše Re: Výkon vytváření vláken u 64bit aplikací
no, prave proto se ptam.... mozna uz jsem z toho nejak zdeformovany... ale dosud jsem zil v domeni, ze iterace je specialni pripad rekurze... a pokud chce nekdo prevest ,,beznou'' rekurzi na iterace, obvykle se nevyhne pouziti nejake struktury (treba zasobniku ;-])

btw. nedavno jsem delal nejake optimalizace na rychlost a jednou z nich byla nahrada slozitejsich smycek ze ,,bezne'' rekurzivni funkce, proto me vyse zminene tvrzeni docela zaujalo.
Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.

Založit nové vláknoNahoru


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