Speicher auslastung und abfrage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
KC25m
User
Beiträge: 65
Registriert: Freitag 14. Juli 2006, 12:11
Wohnort: Kassel
Kontaktdaten:

Speicher auslastung und abfrage

Beitragvon KC25m » Montag 31. Juli 2006, 11:57

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
BlackJack

Beitragvon BlackJack » Montag 31. Juli 2006, 12:10

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.
KC25m
User
Beiträge: 65
Registriert: Freitag 14. Juli 2006, 12:11
Wohnort: Kassel
Kontaktdaten:

Beitragvon KC25m » Montag 31. Juli 2006, 12:29

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 31. Juli 2006, 13:41

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Beitragvon BlackJack » Montag 31. Juli 2006, 14:21

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.
KC25m
User
Beiträge: 65
Registriert: Freitag 14. Juli 2006, 12:11
Wohnort: Kassel
Kontaktdaten:

Beitragvon KC25m » Montag 31. Juli 2006, 16:20

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.
KC25m
User
Beiträge: 65
Registriert: Freitag 14. Juli 2006, 12:11
Wohnort: Kassel
Kontaktdaten:

Beitragvon KC25m » Mittwoch 9. August 2006, 12:04

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.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Mittwoch 9. August 2006, 19:08

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)
Benutzeravatar
2bock
User
Beiträge: 94
Registriert: Freitag 12. September 2003, 07:58
Wohnort: 50.9333300 / 6.3666700

Wie wärs mit der WMI

Beitragvon 2bock » Freitag 11. August 2006, 13:26

Hi unter windows kann Dir eventl. die Wmi weiterhelfen.

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

Greetz from 2bock ;-)
KC25m
User
Beiträge: 65
Registriert: Freitag 14. Juli 2006, 12:11
Wohnort: Kassel
Kontaktdaten:

Beitragvon KC25m » Montag 14. August 2006, 11:23

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder