Presne to je duvod proc NT kernel nebude pouzivat celou fyzickou pamet pokud mu nedate dostatek swap souboru (protoze odmita pouzivat stranky ktery by v pripade potreby nemel kam odlozit). Rika ten clanek ze to samy plati pro FreeBSD (a ne pro Linux)? Co udela Linux kernel kdyz potrebuje odswapovat stranku a nema kam? Zpanikari?
Názory k článku
Porovnání systémů Linux a FreeBSD (10)
Re: Backing store
celé vláknoHmm, ne. Linux ani BSD k zivotu swap nepotrebuji. Pokud se nepletu, v situaci kdy dojde pamet je snaha nejakou sehnat (treba nekoho zabit).
Re: Backing store
celé vláknoPresne tak. Zacne odstrelovat procesy.
Re: Backing store
celé vláknoUff, pri prvnim precteni jsem se lekl :-)))
Re: Backing store
celé vláknoani NT kernel nepotrebuje ke svemu zivotu swap. viz moznost bootovani Windows PE z CD.
Re: Backing store
celé vláknoJenze Windows PE neni to samy jako nainstalovany Windows, tim bych vubec neargumentoval... Rozhodne tam nepobezi multi-cpu ACPI kernel...
Re: Backing store
celé vláknoa co to tedy podle Vas je? a ano, klidne Vam tam multi-cpu ACPI kernel pobezi. Windows PE si sestavujete sam z aktualni instalace. pokud mate nainstalovan ntoskrnl ve verzi MP a acpi hal, tak Vam to bude bezet v dane konfiguraci.
Re: Backing store
celé vláknobtw, co ma co delat multi-cpu acpi kernel s pritomnosti/nepritomnosti swap filu? tim bych vubec neargumentovala ...
Re: Backing store
celé vláknoPokud se nepletu, tak je mozne oboji. Ted ale netusim kde se to da prepnout. Bud se misto pro odswapovani hleda uz pri namapovani, nebo az kdyz je potreba odswapovavat. To prvni je rychlejsi, to druhe je bezpecnejsi. Na linuxu existuje OOM killer, kterej je dost slusne konfigurovatelnej a ten se snazi zabit nejvetsiho zrouta. Bohuzel tohle reseni nema vyznam,
kdyz pouzivate multithreadovou aplikaci nebo JAVU.
U openldapu se stava, ze OOM killne vlakno, ktery se zblaznilo. Pamet se uvolni, ale protoze to vlakno neco zamknulo, tak se to cely zastavi a linuxovej kernel je stastnej ze ma pamet.
U multiprocesovejch demonu jako je treba apache to funguje vyborne, listener nic nealokuje a kdyz nejakej jeho syn(worker) naalokuje moc pameti tak ho
OOM zabije, listener dostane signal SIGCHLD a vsechno jede dal.
Re: Backing store
celé vláknoTakhle to fungovalo do jádra 2.4.22. V 2.4.23 byl OOM killer odstraněn, a bylo to uděláno tak, že se kilne aktuální proces, který se právě snaží alokovat paměť (což může být bohužel úplně náhodný proces, neboť paměť se alokuje i při prostém běhu programu a load-on-demand). To řešení v 2.4.22 a nižších umožňovalo deadlocky (např. --- proces, co sežral nejvíc paměti čeká na semafor, jiný proces semafor drží a snaží se alokovat paměť, paměť není, jádro zabuje ten proces, co čeká na semaforu, ale on pořád žije, protože se nemůže dostat z jádra).
Re: Backing store
celé vláknoLinux ani FreeBSD swap nepotřebují. Když swap zaplní nebo žádný nemají, tak prostě anonymní stránky swapovat nebudou a uvolňují pouze cache. Takhle to potřebovalo VMS, tam bylo skutečně třeba mít swapu aspoň tolik, co paměti. Jak je to na NT nevím.
Re: Backing store
celé vláknoDa se overit experimentalne. Pokud NTesam zrusis swap, tak te servou a vytvoreji si radove 20MB nouzovej swap. Cili trochu ho potrebujou, ale nejspis ne proporcionalne k pameti.
a co tak podpora SUMO
celé vláknoKed uz je podpora SMP v memory managent-e ako na klasickom jedno CPU stroji a NUMA tak preco nie SUMO, cize hybrid SMP a NUMA vid architektura AMD64.
fyzicka oragnaizacia NUMA ale chova sa to aj ako SMP, ako velmi sa to chova ako NUMA sa da nasatvit v Bios-e a zavysok je chovanie sa ako SMP... Neda sa vyuzit nejake dynamicke prepinanie v ramci SUMO na optimalizaciu kodu?
Re: a co tak podpora SUMO
celé vláknoMam tady dual opteron s deskou Tyan Thunder K8SPro, a Linux se k tomu chova normalne jako k NUMA stroji. V cem se lisi SUMO od NUMA?
Tahle vec se da nastavit budto tak, ze pamet u CPU0 je na nizsich adresach a pamet u CPU1 (je-li nejaka) za nimi, nebo prokladane (zrejme po cache-line). Tohle je vyhodnejsi pokud nemate NUMA-aware OS, protoze se pamet zatizi vicemene stejne. Na druhou stranu kernel Linuxu je NUMA-aware, takze tam neni duvod to nepouzit.
-Yenya
Bez titulku
celé vláknoHezky clanek. Ale nektere kousky jsou matouci, napr:
- Každá stránka má počítadlo použití ? toto počítadlo určuje, z kolika míst někdo na stránku ukazuje. Funkce pro uvolnění stránky free_pages toto počítadlo zmenší o jedna a stránku uvolní pouze v případě, že počítadlo dosáhne nuly.
A pak na jinem miste clanku:
- Na druhou stranu absence seznamu mapování stránky může výrazně zpomalit prohledávání na uvolnitelné stránky (na FreeBSD se ke stránce ihned najde seznam všech mapování; je vidět, zda je stránka nepoužitá, a taková se pak uvolní; na Linuxu se musí procházet všechny tabulky stránek a stránka se uvolní, až když je odmapovaná ve všech tabulkách).
Takze se kontroluje pocitadlo nebo se prochazeji vsechny tabulky stranek, jestli nahodou nekdo na stranku neukazuje?
Re:
celé vláknoKontroluje se počítadlo i se procházejí tabulky stránek. Každé mapování zvětší počítadlo o jedna. Takže se procházejí tabulky stránek, při tom se stránky odmapovávají, pokud nějaké stránce klesne počítadlo na nula, tak je uvolněna.
free + dirty pages
celé vláknoAhoj,
Zajímalo by mne, jakým způsobem se na Linuxu nebo BSD řeší stav, kdy proces 1) alokuje anonymním mmap()em hodně adresového prostoru (řekněme 1GB) 2) z velké míry >50% ho využije, čímž vznikne >512MB dirty stránek 3) program naráz (třeba po GC) zjistí že 90% stránek, které používal je nyní FREE.
Existuje nějaká efektivní metoda, jak OSu oznámit že tyto stránky není nutno swapovat, ale že je lze prostě zahodit?
Celou arenu odalokovat nemohu, protože stále obsahuje nějaké živé stránky, zkopírovat je do nové areny také nechci, protože by se hnulo s adresama.
Když na jednotlivé free stránky zavolám unmap(), odmapuje se pouze ta jedna stránka v rámci původního segmentu, nebo se tím ten segment splituje?
Re: free + dirty pages
celé vláknoA co volani madvise s MADV_FREE?
http://netbsd.gw.com/cgi-bin/man-cgi?madvise+2
pro FreeBSD si to najdete na http://www.freebsd.org/cgi/man.cgi
Re: free + dirty pages
celé vláknoDiky, to je presne ono. Na Linuxu je to taky. Ale lepsi bude MADV_DONTNEED, protoze chci aby prvni pristup udelal zero-fill-on-demand, nikoliv segfault.
Ted jeste jak zjistit nejlepsi okamzik pro spusteni GC cyklu v aplikaci. Jak zjistim (s jistym predstihem), ze kernelu dochazi pamet, a chysta se swapovat?
Re: free + dirty pages
celé vláknoMADV_DONTNEED způsobí jen, že stránky budou přenostně odswapovány, ale nebude zahozen jejich obsah. Pokud chcete zahodit obsah stránek, udělejte MADV_FREE. MADV_FREE nezpůsobí segfault při přístupu na stránky, způsobí jen, že stránka bude mít náhodný obsah.
Re: free + dirty pages
celé vláknomozna trochu ignorantska otazka> nahodny obsah znamena? nahodny se mi zda z bezpecnostniho hlediska pomerne nebezpecny :-)
Re: free + dirty pages
celé vláknoBezpečnost je zaručena, stránka nebude obsahovat data jiného procesu nebo jádra.
Stránka po provedení MADV_FREE může obsahovat původní data nebo může být zrušena a pak se při dalším přístupu vezme jiná stránka a ta se vynuluje.
Re: free + dirty pages
celé vláknok, to jsem si myslela, diky
Re: free + dirty pages
celé vláknoMADV_DONTNEED: Do not expect access in the near future. (...) the kernel can free resources (...) accesses (...) will succeed, but (...) zero-fill-on-demand for mappings without an underlying file.
MADV_FREE: Na Linuxu v mman.h vubec neni, pri takovemto chovani MADV_DONTNEED zrejme ani neni potreba.
Re: free + dirty pages
celé vláknoAha, já jsem četl stránku k FreeBSD. Na FreeBSD je to tak, že MADV_DONTNEED pouze sníží swapovací prioritu stránek a stránky zachová a MADV_FREE udělá to, co MADV_DONTNEED na Linuxu.

