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