problem shmax
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Čtvrtek Leden 29 10:00:39 CET 2004
On Thu, 29 Jan 2004, Radek Žuja wrote:
> pokud aplikaci (Sybase 12.5.0.3) řeknu, aby použila 1850 MB data cache, pro
> kterou právě používa shared memory je vše ok.
> pokud však nastavím hodnotu vyšší, aplikace nenastaruje a v logu je napsano
> shmat(): cannot allocate memory.
U beznych programu je vyuziti pametoveho prostoru nasledujici:
pocatecni adresa vyuziti
08048000 program namapovany do pameti (text + staticka data)
08048000+x halda (dynamicky alokovana pamet)
40000000 ld.so, dynamicke knihovny
40000000+x bloky alokovane pres mmap() nebo podobnym zpusobem
bez explicitniho udani adresy
c0000000-x zasobnik
c0000000 nepristupna cast pametoveho prostoru
Cili vidite, ze v nejlepsim pripade je nejaky prostor mezi 40000000+x a
c0000000-x, coz je dohromady o neco mene nez 2 GiB.
Mozna reseni:
- pouzit 64-bitovou platformu
- nektera novejsi jadra mozna umi procesu zpristupnit (aspon castecne)
i oblast c0000000-ffffffff
- pouzit staticky linkovany program (*)
- prinutit ld.so a dynamicke knihovny, aby se umistovaly na jine
adresy (*)
- smirit se s tim
(*) Tady by stejne asi bylo potreba zmenit TASK_UNMAPPED_BASE, jinak bude
jadro porad hledat volny prostor od 40000000 a nikdy nebude mit vic nez ty
2 GiB.
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux