Speicherverbrauch

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.
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Hallo zusammen,

ich würde gerne wissen wie ich mit python so wenig Arbeitsspeicher wie möglich in Anspruch nehmen kann. Mein Programm benötigt aktuell 35Mb (Direkt nach dem Start) und ich bezweifle stark dass ich wirklich alles davon brauche. Nun dachte ich daran alles mit "from x import y" zu machen, aber das hat zumindest bei wx nichts gebracht als ich es im Interpreter mal kurz ausprobiert habe. (from wx import ID_YES) Ich vermute das liegt daran, dass wx eben alles in einen Namespace packt, wie ich es ja letztlich auch mache (siehe mein letzter Thread wegen den partiellen imports).

Dann wäre da noch die Sache mit dem was nach dem Start des Programms an Speicher angehäuft wird. Ich weiß, garbage collection usw., aber gibt es irgendetwas was ich ähem, optimieren könnte? :roll: (Gerne auch Lesestoff, wenns da was gibt.)

Ich frage mich nun, ob ich überhaupt irgendwas machen kann? Sonderlich wichtig ists nicht, war nur sone Idee die letzten Tage und interessiert mich jetzt einfach mal.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Du könntest z.B. mal schauen ab welchem Zeitpunkt der Verbrauch so drastig steigt -- nach welchem Modul-Import, welcher Schleife, etc...

Allerdings sei dazugesagt, dass die üblichen Prozessmonitoren etc. eher schlechte Auskunft über Speicherverbrauch geben. Allgemein ist es eher schwer, genaue zu bestimmen, wie viel ein Prozess jetzt nutzt, vor allem, wenn Shared Libraries im Spiel sind.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Zu dem `from x import y`: Wenn mich nicht alles täuscht, cached CPython in jedem Falle (ob jetzt `from`-Import oder nicht) das ganze Modul, also z.B. `wx`. Würde dann also keinen Unterschied machen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, man kann Module nicht "partiell" laden. Die einzige Art Speicher zu sparen ist weniger und kleinere Objekte zu allokieren. Und möglichst wenige Referenzen zu diesen vorhalten, damit der Garbage Collector sie möglichst früh wegräumt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@Gremlin: Wie hast Du die Zahl denn ermittelt und warum zweifelst Du das davon alles gebraucht wird? Das so wenig wie möglich realer Arbeitsspeicher belegt wird, ist zu einem guten Teil Aufgabe des Betriebssystems. Du kannst wie Leonidas schon ausgeführt hat, nur dafür sorgen das Du nicht übermässig lange Referenzen auf Sachen hältst, die nicht mehr benötigt werden.

Aber fang jetzt bitte nicht an zu versuchen das explizit zu forcieren. Wenn Du normal und sauber programmierst musst Du da nichts extra machen.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Gremlin hat geschrieben:Dann wäre da noch die Sache mit dem was nach dem Start des Programms an Speicher angehäuft wird. Ich weiß, garbage collection usw., aber gibt es irgendetwas was ich ähem, optimieren könnte? :roll: (Gerne auch Lesestoff, wenns da was gibt.)
C benutzen. Wenn du das nicht willst, verschwende nicht deine Zeit damit, so lange du noch freien Speicher hast.
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Dauerbaustelle hat geschrieben:Du könntest z.B. mal schauen ab welchem Zeitpunkt der Verbrauch so drastig steigt -- nach welchem Modul-Import, welcher Schleife, etc...
Hm, allerdings hab ich keine so rechte Vorstellung davon wann etwas "viel" und wann "wenig" Speicher braucht, also im Vergleich dazu was gemacht wird.
Leonidas hat geschrieben:möglichst wenige Referenzen zu diesen vorhalten
Gut, das ist dann aber eindeutig etwas dass ich, wenn ich es nicht von vornherein beachte, auf die Liste der zu erledigenden Sachen während tierischer Langeweile schiebe :P
Darii hat geschrieben:C benutzen. Wenn du das nicht willst, verschwende nicht deine Zeit damit, so lange du noch freien Speicher hast.
Naja, das Programm läuft unter Umständen im Hintergrund während ein Spiel im Vordergrund läuft. Letztlich wollt ich hiermit nur nochmal sicher gehen, dass das was ich mir dachte zutrifft. Das also der Aufwand größer ist als der Nutzen. :)

@BlackJack
Ich hab einfach im Windows Taskmanager nachgesehen. Warum ich daran zweifle? Weil ich nicht jede Klasse, Funktion oder Konstante aus den Paketen (z.b. wx) benötige. Klar, intern hängt das auch wieder von vielem ab was ich nicht sehe bzw. direkt anwende aber wenn der Interpreter nach dem "from wx import ID_YES" plötzlich von 3,5Mb auf 16Mb ansteigt.. naja. Aber wie gesagt, lässt sich nicht ändern. Und nein ich fange jetzt nicht damit an überall lauter del's einzufügen, keine Angst. :mrgreen:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gremlin hat geschrieben:
Leonidas hat geschrieben:möglichst wenige Referenzen zu diesen vorhalten
Gut, das ist dann aber eindeutig etwas dass ich, wenn ich es nicht von vornherein beachte, auf die Liste der zu erledigenden Sachen während tierischer Langeweile schiebe :P
Ja, hast ja den Grundtenor ganz richtig eingeschätzt: "Lohnt sich nicht, wenn es nicht extrem wird". Natürlich kann es fälle geben bei denen exorbitant viel Speicher verbraucht wird, aber jetzt alles durchgehen wenn kein akuter "Bug" vorliegt lohnt sich wirklich nicht. Am Schluss sparst du 500kb und hast 2 Tage investiert, und das nächste wx-Update verbraucht dann 2 MB mehr.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Nun ja, als ich mir vor gefühlten 400 Jahren nach C16 und Atari ST meinen ersten 'richtigen' Computer, einen Amstrad PC 1512 mit 640 KB Speicher und 20 MB Festplatte für unglaubliche ~ 2000 Mark schenken ließ, da war das durchaus ein beliebter Sport, durch alle möglichen Tricks hier und da 10 KB zu sparen... :)

Unglaublich, mit welchen Maschinen wir heute hantieren und wie gleichgültig uns ein Speicherverbrauch in Größe meiner damaligen Festplatte sein kann... :shock:

Über was wohl mein Sohnemann einmal schmunzeln wird...?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

mutetella hat geschrieben:Über was wohl mein Sohnemann einmal schmunzeln wird...?
Wahrscheinlich über Garbage Collectoren und ``delete``-Methoden. ;)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@snafu: Du hast Recht, eigentlich hat sich nur das Niveau verschoben...

Die Vorstellung, Speicher wird einmal überhaupt keine Rolle mehr spielen, hmm, das ist schon irgendwie irre....
Ich stelle mir das in die Richtung vor, dass der weltweit vorhandene Speicher intelligent geteilt wird, d. h., wenn ich hier an eine bestimmte Grenze komme, dann schiebt mein System einfach etwas zu Dir rüber, falls Du gerade genügend Freiraum hast...
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@mutella
Das widerspricht sich aber irgendwie mit den CPU nahen Konstruktionen, der Hauptspeicher muss doch *schnell* sein. Ich kann mir nicht vorstellen, dass das sonderlich Effizient ist, diesen erst zum Nachbarn schieben zu müssen :)
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Xynon1: Nun ja, Speicherbereiche mit dem USB-Stick zur nächsten Maschine zu tragen ist für ein flüssiges Arbeiten vielleicht nicht so ganz das Wahre...
Aber ich hoffe doch sehr, dass aus dem Politikum "schnelles Internet" bis dahin doch etwas geworden ist, mit dem Du und ich dann auch umgehen dürfen... :wink:



EDIT: Und ich meine jetzt wirklich SCHNELLES Internet... :)
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ich bezweifle, dass das Internet schneller wird als Festplatten, denn ein "Swap"s in einem schnellen RAID ist zwar vergleichsweise noch sehr langsam zum normalen Hauptspeicher aber um einiges schneller als ein Datenaustausch via Internet. Von daher wenn du langsamen Speicher nutzen willst dann nimm nicht auch noch den langsamsten. :mrgreen:
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
lunar

@mutetella: Selbst wirklich schnelle und latenzarme Verbindungen wie Infiniband erreichen allenfalls Transferraten von 20 GB/s bei Latenzen von 200 ns. Moderner Arbeitsspeicher erreicht bereits pro Modul Transferraten von 25 GB/s bei Latenzzeiten von 10 ns, und selbst das ist für moderne Prozessoren zu langsam.

Und InfiniBand wird immerhin in Cluster-Systemen eingesetzt, viel schneller geht es nicht. Normale TCP-Verbindungen sind schon aufgrund des Protokoll-Overheads weitaus langsamer.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ken Olson, Präsident und Gründer von DEC, 1977 hat geschrieben:Es gibt keinen Grund, warum jemand einen Computer zu Hause haben wollte.
Xynon1, 2011 hat geschrieben:Ich bezweifle, dass das Internet schneller wird als Festplatten, ...
lunar hat geschrieben:Selbst wirklich schnelle und latenzarme Verbindungen wie Infiniband erreichen allenfalls Transferraten von 20 GB/s bei Latenzen von 200 ns. ... und selbst das ist für moderne Prozessoren zu langsam.
Wo habt ihr denn eure Visionen versteckt...?

:roll:
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

mutetella hat geschrieben:Wo habt ihr denn eure Visionen versteckt...?

:roll:
Zum Beispiel hinter dieser dämlichen Lichtgeschwindigkeit...
Das Leben ist wie ein Tennisball.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@mutetella
Im Realismus, gut verborgen und zum Teil begraben :D
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

mutetella: Vergiss es, das Problem ist hier nicht der absolute Durchsatz sondern die Latenzzeit. Und da tut sich eigentlich nichts Nennenswertes mehr, im Gegenteil, zur Zeit eingesetzte Netzwerkstrukturen erzeugen da ziemlich viel Overhead, so genannten Bufferbloat.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

mutetella hat geschrieben:Unglaublich, mit welchen Maschinen wir heute hantieren und wie gleichgültig uns ein Speicherverbrauch in Größe meiner damaligen Festplatte sein kann... :shock:
Mein erster Computer hatte 16 KB RAM. Das Notebook, an dem ich gerade schreibe, hat 8 GB RAM und mein nächster iMac wird das auch mindestens haben, wahrscheinlich kaufe ich da aber gleich 16 GB.

Wenn es mir also damals gelang, 1 KB Programmgröße einzusparen, dann ist das bei 16 GB RAM mit 1 GB RAM zu vergleichen. Darunter ist es müßig, sich über den Speicherverbrauch ernsthaft Gedanken zu machen.

Stefan
Antworten