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