[ LUGOS ] Memory
Metod Kozelj
metod.kozelj na rzs-hm.si
Ned Avg 6 12:11:26 CEST 2000
Howdy!
On Sat, 5 Aug 2000, Tori Andraz wrote:
> > Brez swapa ti bo masina vsakic ruzila, ko bo RAMa zmanjkalo.
>
> Se ti ne zdi to buggy... ?
Predpostavljam, da se tale 'buggy' nanasa na ruzenje masine. Torej: ali ni
malo buggy user, ki pricakuje, da bo masina z malo RAMa delovala enako
dobro kot masina z veliko RAMa?
Pa kaj naj naredi kernel, ko mu zmanjka RAMa? Meni se zdi, da opravlja
cisto dobro delo. Enkrat sem obdeloval ene veliiikeee slike in mi je na
masini z 128M RAMa in 256M swapa zmanjkovalo pomnilnika. Seveda, ze dokler
je imel kaj swapa, je slo pocaasi, ko pa mu ga je zmanjkalo, se je vsa
stvar ustavila. No, cez kaksnih 10 minut besnega ruzenja po disku je
proces sicer mrknil, masina pa je delovala naprej, stabilno.
V resnici je to pravzaprav feature. Predstavljaj si, da imas masino s
skupaj 256M prostega virtualnega pomnilnika (swap+RAM). Potem zazenes dva
razlicna procesa, eden potrebuje maksimalno 192M pomnilnika, drugi pa 128M
pomnilnika. In to ne ves cas, ampak pac enkrat. Linux pac zazene oba
procesa, potem pa upa, da ne bosta oba procesa istocasno rabila ves
pomnilnik. Obicajno se to izide. Ce pa ne, pa potem pac kernel poizkusa
poganjati malo tega, malo onega, dokler eden ne sprosti pomnilnika ...
Pod Digital UNIXom (najbrz je podobno tudi se v Tru64 UNIXu) pa imas dve
moznosti: ena je enaka, kot zgoraj opisano, druga pa deluje takole:
zazenes program, ki zase misli, da bo rabil 192M pomnilnika. Potem zazenes
se program, ki zase misli, da bo rabil 128M pomnilnika. Sistem ugotovi, da
bi to bilo 'oversubscription' in drugega procesa enostavno ne pozene. Ali
se ti to zdi bolje? Pri nas imamo ene 'custom' programe, pisane v
fortranu, ki precenijo lastne potrebe po pomnilniku za kaksen faktor 3. In
nam zelo prav pride uporabljati prvo moznost obnasanja, saj v drugem
primeru ne bi mogli pognati skoraj nobenega programa. In naj se pristavim,
da je vsaj pri Digital UNIXu verzij 3.2 in 4.0 drugo default obnasanje.
> > Ce se ne motim, se masina ne sesuje, samo zelooooo dolgo rabi, da se postavi
> cemu je pa to vzrok?
Zato, ker se kernel trudi, da bi speljal vse procese do konca. Torej
preklaplja med njimi, in 'upa', da bo kaksen pravkar sprostil kak kos
pomnilnika. Seveda pa je v stanju, ko je vse skupaj na swapu, skoraj ves
cas porabljen za swap/unswap procesov, zato postane masina neodzivna,
ceprav je procesor recimo 80% idle.
Vcasih pac pride prav, da neka stvar konca z delom, pa ceprav
zelo pocasi. Hipoteticni primer: poganjas neko simulacijo, ki porabi
kaksen mesec dni CPU casa, porablja pa zelo malo pomnilnika. Prav pri
koncu pa mora se malo urediti rezultate, za to porabi 200X vec pomnilnika,
potem pa rezultate zapise na disk. Ali bi ti bilo vsec, da bi v primeru
pomanjkanja pomnilnika kernel to simulacijo enostavno ubil? In ti gre en
mesec cakanja v nic? Meni bi bilo bistveno bolj vsec, da se zaswapa se za
en dan, pa da potem dobim rezultate.
Peace!
Mkx
---- perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
Dodatne informacije o seznamu Starilist