User CPFAQMembers ListCalendarToday's PostsSearch





Prova Gratis 30gg l'hosting fooweb
Reply
 
LinkBack Thread Tools Display Modes
 
Old 18-05-08, 02:19 PM
Bernd Paysan
 
Posts: n/a
Default Re: allocate

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. Wenn
das 1 ist, dann kann man noch /proc/meminfo auslesen, und memfree+swapfree
zusammenzählen. Die sind dann aber auch nicht sicher, es könnte ja
hinterher noch ein anderer Prozess kommen, der ebenfalls Speicher belegt,
und irgendwann kann's halt bei überbuchtem Speicher krachen.

> UNUSED gibt mir das was für das gforth noch an dictionary übrig ist.
> gforth bekommt als prozess 640KB.
>
> Aber wie spreche ich den dicken Batzen RAM der da so im Rechner
> herumliegt an? Da sind bei mir hier noch so typisch 300MB frei.


Mit ALLOCATE. Du kriegst nur keine Information, wieviel das ist. Nimm dir,
soviel du brauchst, nicht soviel wie da ist.

--
Bernd Paysan
"If you want it done right, you have to do it yourself"
http://www.jwdt.com/~paysan/
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 18-05-08, 03:49 PM
Anton Ertl
 
Posts: n/a
Default Re: allocate

Michael Kalus <michael.kalus@onlinehome.de> writes:
>On 16 Mai, 20:42, an...@mips.complang.tuwien.ac.at (Anton Ertl) wrote:
>> >> >> Michael Kalus <michael.ka...@onlinehome.de> writes:
>> >> >> >Gibt es im gforth einen weg heraus zu finden wieviel ram des rechne=

>rs
>> >> >> >ich per allocate maximal ergattern kann?

>>
>> >> >> Nein. Je nach Betriebssystem und seiner Konfiguration kann man sogar=

>
>> >> >> mehr ALLOCATEn als RAM und Swap-Space zur Verfuegung steht. Nur
>> >> >> Benutzen sollte man das dann nicht alles.

>
>Wie gibt man denn dann dem gforth unter linux einen sicher verf=FCgbaren
>maximalen Bereich an RAM?


Als Systemadministrator kannst Du folgendes versuchen:

echo 2 >/proc/sys/vm/overcommit_memory
# und eventuell noch /proc/sys/vm/overcommit_ratio aendern

Dann kriegst Du eher einen Fehler bei ALLOCATE und kannst
wahrscheinlich das System nicht dazu bringen, Prozesse umzubringen.

Die Frage ist allerdings: Wozu willst Du wissen, was der maximale
Speicher ist? Versuch einfach, soviel zu allokieren, wie Du brauchst,
und lass den Rest Sorge des Systemadministrators sein. Es ist auch
ziehmlich asozial, sich alles zu nehmen, und den anderen Prozessen
nichts uebrig zu lassen.

>UNUSED gibt mir das was f=FCr das gforth noch an dictionary =FCbrig ist.
>gforth bekommt als prozess 640KB.
>
>Aber wie spreche ich den dicken Batzen RAM der da so im Rechner
>herumliegt an? Da sind bei mir hier noch so typisch 300MB frei.


300 1024 * 1024 * allocate throw

Oder, wenn Du's im Dictionary haben willst:

gforth -m 300M

- 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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Try the foonews Toolbar!!!
 
Old 18-05-08, 09:32 PM
Michael Kalus
 
Posts: n/a
Default Re: allocate

Guten Abend.

> Die Frage ist allerdings: Wozu willst Du wissen, was der maximale
> Speicher ist? *Versuch einfach, soviel zu allokieren, wie Du brauchst,
> und lass den Rest Sorge des Systemadministrators sein. *Es ist auch
> ziehmlich asozial, sich alles zu nehmen, und den anderen Prozessen
> nichts uebrig zu lassen.


Nun, der admin auf meinem Laptop bin ich ja selbst. Beim
herumprobieren im project euler kommt man schon mal auf die Idee, bei
der einen oder anderen Aufgabe könnte viiiiiiel Speicher helfen. Ob
das dann wirklich auch nötig ist sei mal dahin gestellt. Jedenfalls
kam bei der Suche nach RAM fürs gforth ans ALLOCATE und UNUSED und
schon hatte plötzlich wieder Fragen über Fragen. :-) Aber die hast du
hier sehr gut beantwortet inzwischen, wofür ich dir sehr danken möchte
an dieser Stelle. Das war wirklich hilfreich.

...
> Oder, wenn Du's im Dictionary haben willst:
>
> gforth -m 300M


Aha, ja, das tuts.
: test unused 0 do $55 c, loop ; test
Und man kann in der Aktivitäts-Anzeige des OSX tatsächlich zusehen,
wie jede Sekunde der Prozess gforth um 1MB größer wird. Das dauert,
habs dann auch vorsichtshalber erst mal beim Stand von 100MB
abgebrochen.

Aber das ist gut zu wissen, und dürfte meinen Euler getriebenen
Speicherplatzhunger für eine Weile stillen. ;-)

> M. Anton Ertl * * * * * * * * * *Some things have to be seen to be believed


So isses. Danke für die Einsichten.

Michael
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 19-05-08, 09:55 PM
Anton Ertl
 
Posts: n/a
Default Re: allocate

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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



 RSS Feeds - Archive - Top




All times are GMT +1. The time now is 10:06 PM. Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 Forum style by ForumMonkeys.com.