problem shmax

Radek Žuja zuja_radek na hortim.cz
Čtvrtek Leden 29 10:57:56 CET 2004


Přiznám se že tohle je na mě trochu složité.
Ale abych to uzavřel, je to tedy tak
že na 32 bitové architektuře nemůžu mít více shared memory jak cca 2 GB
ač mám fyzické paměti RAM kolik chci.


----- Original Message ----- 
From: "Pavel Kankovsky" <peak na argo.troja.mff.cuni.cz>
To: "Linux Konference" <linux na linux.cz>
Sent: Thursday, January 29, 2004 10:00 AM
Subject: Re: problem shmax


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.





Další informace o konferenci Linux