Bernd Paysan <bernd.paysan@gmx.de> writes:
>Michael Kalus wrote:
>> Wie gibt man denn dann dem gforth unter linux einen sicher verfügbaren
>> maximalen Bereich an RAM?
>
>Na, man fragt nach, ob /proc/sys/vm/overcommit_memory 0 ist. Wenn das so
>ist, dann schlägt ALLOCATE fehl, wenn es nicht ausreichend RAM gibt.
Leider nein. 0 ist der Modus, der die Nachteile von Overcommit (der
Out-of-memory-killer kann zuschlagen) mit den Nachteilen von
no-overcommit (mmap()/ALLOCATE schlaegt aufgrund aeusserer Umstaende
fehl) vereinigt; natuerlich ist das der Default in Linux:-(. 1 gibt
einem overcommit, und 2 einen Versuch, sich so aehnlich zu verhalten
wie no-overcommit (laut doku sogar dann, wenn man mit MAP_NORESERVE
sagt, dass man overcommit haben will).
Hier ein schoenes Beispiel, wie idiotisch der 0-Modus ist:
sh cat /proc/sys/vm/overcommit_memory
0
ok
sh free
total used free shared buffers cached
Mem: 511664 408036 103628 0 18696 207492
-/+ buffers/cache: 181848 329816
Swap: 2104472 0 2104472
ok
2000000000 allocate throw .s <1> 46912512880656 ok
2000000000 allocate throw .s <2> 46912512880656 46914512883728 ok
2000000000 allocate throw .s <3> 46912512880656 46914512883728 46916512886800 ok
2000000000 allocate throw .s <4> 46912512880656 46914512883728 46916512886800 46918512889872 ok
free throw free throw free throw free throw .s <0> ok
3000000000 allocate throw .s
:9: Cannot allocate memory
3000000000 allocate >>>throw<<< .s
Backtrace:
Also mit ca. 2.5GB freiem virtuellen Speicher gibt mir das System ohne
weiters 8GB in einem Prozess in 2GB-Stuecken, aber nicht 3GB in einem
Stueck. Mit MAP_NORESERVE kann man das Richtung overcommit
korrigieren:
[~/gforth:60964] gforth -m 3G
Gforth 0.6.9-20080430, Copyright (C) 1995-2006,2007 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
unused . 3220875354 ok
- anton
--
M. Anton Ertl Some things have to be seen to be believed
anton@mips.complang.tuwien.ac.at Most things have to be believed to be seen
http://www.complang.tuwien.ac.at/anton/home.html