Seite 1 von 1

Speicher auslastung und abfrage

Verfasst: Montag 31. Juli 2006, 11:57
von KC25m
Hallo Leute , stehe leider vor einem Riesiegen problem.
Unser board wird mit nen USB gebottet wodrauf unser programm läuft.
Nun haben wir keine Swap unter linux und prob das wir grosse datenmängen im speicherladen so wie das OS.
Nun meine Frage gibt es eine einfach möglichkeit den Speicher auszulesen unter Py ?

Wir brauchen werder Virtuellspeicher noch sonst was abfragen halt nur den aktuellen speicher der noch frei ist.
Würde mich auch mit eine C/++ Api zufrieden stellen , wenn sie klein is ;)


LG KC

Verfasst: Montag 31. Juli 2006, 12:10
von BlackJack
Das lässt sich eigentlich nicht wirklich zufriedenstellend abfragen. Weil man es letztendlich doch mit virtuellem Speicher zu tun hat, auch wenn keine Auslagerungsdatei verwendet wird. Zum Beispiel kann man mit `malloc()` sehr viel Speicher anfordern, ohne das der wirklich physikalisch als RAM oder in der Auslagerungsdatei vorhanden sein muss. Solange man nichts in diesen Speicher hineinschreibt, belegt der nur ein ganz bischen Verwaltungsinformation.

Und bei Multitaskingsystemen hat man auch immer das Problem, dass das Ergebnis so einer Abfrage schon wieder ungültig sein kann wenn man es auswertet.

Verfasst: Montag 31. Juli 2006, 12:29
von KC25m
Es wird tatsächlich nur der DDR speicher auf dem Mainborad benutzt.
Virtuellen speicher haben wir komplett raus genommen , da kein schreibmedium da ist wo er auslagern könnte.
Daher reicht eine einfach abfrage des verbleibenden speichers eigentlich aus.

Verfasst: Montag 31. Juli 2006, 13:41
von gerold
KC25m hat geschrieben:Daher reicht eine einfach abfrage des verbleibenden speichers eigentlich aus.
Hi KC25m!

Unter Linux kannst du den freien Speicher mit "free" oder noch besser mit "free -m" abfragen.

Mit Python sieht das so aus:

Code: Alles auswählen

#!/usr/bin/env python

import os

for line in os.popen("free -m").readlines():
    if "buffers/cache" in line:
        print line[:-1].rsplit(" ", 1), "MB frei"
        break
(rsplit gibt es erst ab Python 2.4)
mfg
Gerold
:-)

Verfasst: Montag 31. Juli 2006, 14:21
von BlackJack
KC25m hat geschrieben:Es wird tatsächlich nur der DDR speicher auf dem Mainborad benutzt.
Virtuellen speicher haben wir komplett raus genommen , da kein schreibmedium da ist wo er auslagern könnte.
Daher reicht eine einfach abfrage des verbleibenden speichers eigentlich aus.
Virtuellen Speicher kann man nicht rausnehmen. Der ist ziemlich fundamental in Linux. Mit virtuellem Speicher ist die Umsetzung von virtuellen Adressen auf realen Speicher gemeint. Der kann dann entweder echtes RAM, oder aber Auslagerungsdatei sein. Egal wieviel RAM und/oder Auslagerungsdatei man wirklich hat, gibt's auf einem 32-bit Intelsystem einen virtuellen Adressraum von 4 GB pro Prozess. Davon wird nur das auf echten (Hintergrund)Speicher abgebildet, was in Benutzung ist.

Und nun die Frage: Wieviel Speicher verbraucht `*ptr` in diesem Programm:

Code: Alles auswählen

#include <stdlib.h>

int main(void)
{
    char *ptr;
    ptr = malloc(300 * 1024 * 1024);
    ptr[42] = '*';
    while (1) {
    }
}
(Vielleicht) Überraschende Antwort: Ungefähr 4 KB. Nämlich die Speicherseite in der das '*' geschrieben wird. Alle anderen angeforderten Seiten sind erstmal nur "virtuell" bis sie tatsächlich mit Daten beschrieben werden.

Verfasst: Montag 31. Juli 2006, 16:20
von KC25m
Ja okay hast ja schon gewonnen , aber wie gesagt wir benutzen kein Swap und daher ist wirklich nur der chipram da.
Das prob ist das wir sehr grosse daten an grafiken haben die auf dem Bildschirm geblittet werden müssen.
Derzeit hängt sich das System zwischenzeitig weg nach paar minuten.
Letzte änderungen waren nur halt mehr grafiken weil mehr effekte gewünscht wurden.

Daher brauche ich halt eine lösung die einfach zwischenzeitig mal den Ram abfragt und ausgibt.

Denke mal das mit dem Free werde ich mal versuchen hoffe das ich dann sehen kann was wirklich los ist mit dem speicher.

Verfasst: Mittwoch 9. August 2006, 12:04
von KC25m
inzwischen habe ich eine lösung gefunden, weiss nur noch net ob die so gut ist.

Ich öffne mit lesezugriff einfach "/proc/meminfo" was mir ständig die neuen werte dann angibt.
Funktioniert leider nur unter Linux , für windows hab ich leider immer noch keine brauchbare alternative gefunden.

Verfasst: Mittwoch 9. August 2006, 19:08
von Joghurt
KC25m hat geschrieben:Derzeit hängt sich das System zwischenzeitig weg nach paar minuten.
Klingt für mich nach einem Speicherleck (allozierter Speicher wird nicht vollständig wieder freigegeben)

Wie wärs mit der WMI

Verfasst: Freitag 11. August 2006, 13:26
von 2bock
Hi unter windows kann Dir eventl. die Wmi weiterhelfen.

http://python.sandtner.net/viewtopic.php?t=2639

Greetz from 2bock ;-)

Verfasst: Montag 14. August 2006, 11:23
von KC25m
Also prob war das wir halt eine riesen mänge an daten haben die geladen werden ... des weiteren schreiben wir noch auf dem USBStick daten zurück die wir im laufe des spieles sammeln.

Das aufhängen hat sich nun erledigt , für dem Speicher habe ich nun eine Preload funktion geschrieben (wir nutzen Pygames) ...
Lade die Grafiken in einen cStringIO und entpacke sie bei bedarf und lösche sie dann wieder , das cStringIO wird halt im Speicher gehalten.

Läuft echt super , nur das beim entpacken die CPU auslastung in die höhe geht :( und unser system dann halt für ein paar ms stehen bleibt.

Das mit dem WMI hört sich echt gut an , dann könnte ich alles unter Win testen und muss nicht immer zu ziehlplatform rennen und da die speichertests machen .

Danke Euch für die Schnelle und Infomative Antowrten.

Gruß der KC