fork: Prostredek je docasne nepristupny
Milan Kopacka
mkop5230 na ss1000.ms.mff.cuni.cz
Pondělí Prosinec 18 07:35:42 CET 2000
On Sun, 17 Dec 2000, Milan Kerslager wrote:
> Hmm, vzdycky jsem si myslel, ze stranky maji 4kB na x86 platforme a
> 8kB na Alphach.... ??? Nebo jsem neco prehledl?
On Sun, 17 Dec 2000, Pavel Kankovsky wrote:
> Ma-li neco velikost 1 kilo, pak to asi na hw, na kterem byva Linux bezne
> provozovan, nebude tak uplne stranka. :)
>
> (Mimochodem, ten velky blok pameti potrebny na proces obsahuje takove
> veci, jako treba jaderny zasobnik, ktery pochopitelne musi byt vcelku.)
Omlouvam se, pametova stranka ma na intelu samozrejme 4kB.
(Takze vsechna cisla, ktera jsem dosud k tematu pouzil, krat 4).
u alloc_task_struct() (v arch/i386/kernel/process.c) pisou, ze
* NOTE! The task struct and the stack go together
*
* The task structure is a two-page thing, and as such
* not reliable to allocate using the basic page alloc
* functions. We have a small cache of structures for
* when the allocations fail..
*
* This extra buffer essentially acts to make for less
* "jitter" in the allocations..
*
alloc_task_struct() (volana forkem) pak alokuje dvoustranku a kdyz neni,
pouzije jeste rezervni buffer na task_structy. Ale i to mu zrejme muze
dojit a pak se mohou dit veci.
Ale porad nevime, jestli je zrovna toto pripad p. Krauseho.
On Sun, 17 Dec 2000, Pavel Kankovsky wrote:
> On Fri, 15 Dec 2000, Michal Krause wrote:
>
> > chtel jsem se zeptat, jestli nekdo nevi, co vsechno muze zpusobovat
> > hlasku %subj% pri pokusu o spusteni cehokoliv. Stava se mi to na
> > serveru a nemohu odhalit pricinu.
>
> Budu predpokladat, ze pod $subj si mam predstavit chybu EAGAIN
> (prekladani chybovych kodu do "prirozeneho jazyka" vede akorat k
> zamlzovani :P).
>
> > Tipuji si na premnozenou MySQL s Apachem, protoze oba maji v tu chvili
> > dost bezicich potomku/vlaken, ovsem dohromady to dava nejvyse tak 400
> > procesu, coz by nemelo byt kriticke (nebo ano?).
>
> Zalezi, co tam bezi dalsiho. Jak bylo zminovano, celkovy pocet procesu
> v systemu je hodnota urcovana pri kompilaci jadra a ta je bezne neco
> jako 512.
Jestli kernel haze EAGAIN a NR_TASKS nebylo zvetseno, tak podporuju teorii
o tom, ze by se melo NR_TASKS zvetsit, protoze -
Jestli Apache a MySQL maji dohromady ~400 procesu, tak nektery z nich
patrne narazi na dalsi omezeni, a to je, ze uzivatel nedostane vic, nez
polovicku max. poctu procesu.
(include/linux/tasks.h):
#define NR_TASKS 512 /* On x86 Max 4092, or 4090 w/APM configured. */
#define MAX_TASKS_PER_USER (NR_TASKS/2)
Zvyste NR_TASKS a ja se jdu i s fragmentaci kernelove pameti nekam hluboko
zahrabat.
Milan Kopacka
Další informace o konferenci Linux