Ahoj,
potřeboval bych poradit se sdílenou pamětí. Mám rodičovský proces, který vytvoří sdílenou paměť přes:
ipc_shm=shmget(ipc_key,shm_size,0600 | IPC_CREAT | IPC_EXCL);
shmptr=shmat(ipc_shm,NULL,0);
(nadále do sdílené paměti nezapisuje, jen si občas zavolá shmat a shmdt, když monitoruje kolik
je položek zapsáno v shm potomky)
a potomci (těch je cca 300), kteří si přes sdílenou paměť přenáší data:
ipc_shm=shmget(ipc_key,shm_size,0600);
shmptr=shmat(ipc_shm,NULL,0);
Tohle vypadá, že funguje, tj. pokud mám nastaven shm_size na 50MB. Problém je nyní, když jsem nastavil
shm_size na 1GB. Celé se to začalo chovat divně.
Přijde mi jako kdyby proces při volání shmat zůstal viset a na něco čekal... Nevím, jestli není problém v tom,
že cat /proc/sys/kernel/shmmax mluví o max 200MB. Což je divné, protože volání shmget normálně projde a
žádnou chybu nevrátí... Přijde mi, že MySQL taktéž používá sdílenou paměť, i více jak 1GB, a nějaký limit
v /proc na něj neplatí. Celkem mám k dispozici okolo 32GB RAM.
Může mi někdo fundovaně říci, jak sdílená paměť funguje? Tj. odkud se přidělená paměť bere,
jak je řešeno mapování do uživatelských procesů, apod. Stačí odkaz, nemůžu na nic rozumného
přijít.
Předem děkuji za jakékoliv nakopnutí správným směrem.
Honza