Hallo,
ich habe ab und an mit reht grossen Daten in Matlab (unter Linux) zu tun. Das Auslagern klappt soweit. Nur würde ich es gerne mit einem ("Highspeed-")USB-Stick beschleunigen. Ich habe etwas ähnliches schon mal mit einem normalen Stick und einem alten Laptop gemacht, hat wunderbar funktioniert. Um jedoch eine bessere Performance zu erzielen (bzw um überhaupt einen Gewinn zu sehen;) würde ich gerne wissen, wie genau Linux auslagert. Also, abhängig vom swappiness usw, das hab ich schon rausgefunden. Nur wie ganz genau ? Lagert es immer kleine 5kB Blöcke aus, so wie Windows, oder fängt es bei Linux erst bei 1MB an ?
Ich würde es gerne wissen, da viele USB-Sticks zwar gute Datenübertragungen erreichen, aber bei kleinen Teilen versagen.
Linux 14.982 Themen, 106.376 Beiträge
"Lagert es immer kleine 5kB Blöcke aus, so wie Windows, oder fängt es bei Linux erst bei 1MB an ?"
Das weiß ich nicht so genau, aber wenn du viel RAM eingebaut hast, dann wird wahrscheinlich überhaupt kein Speicher ausgelagert.
Erstmal muß man wissen das der Linuxkernel versucht die Anzahl der Festplattenzugriffe zu minimieren. Das heißt der Kernel versucht die Daten so lange wie möglich im RAM zuhalten. Das wird dadurch erreicht in dem ein großer Teil vom RAM als Festplattencache verwendet wird.
Die Auslagerungspartition wird nur dann verwendet wenn RAM wirklich knapp wird.
Du mußt erstmal herausfinden wieviel RAM dein Programm braucht. Das kann man sehr gut mit dem ps (Prozessstatus) Befehl herausbekommen. Du kannst auch mal die manpage von ps lesen:
"man ps"
Ich mache es immer so, wenn ich nicht weiß wieviel RAM im Rechner sinnvoll sind:
Ich lasse mir regelmäßig vom Befehl "free -m" oder auch nur "free" anzeigen wieviel von der Auslagerungspartition verwendet wird. Wenn immer wieder regelmäßig Speicher ausgelagert wird, dann baue ich noch ein zusätzliches (großes) RAM-Modul in den Rechner. Das Auslagern von Speicher macht den Rechner langsamer. Wenn man etwas mehr Speicher in den Rechner einbaut, dann kann man die Performance des Linux-Rechners steigern.
Die Speicherverwaltung vom Linuxkernel ist schon seit vielen Jahren in 64 bit programmiert. Dadurch kann der Linuxkernel bis zu 64 GByte RAM verwalten, auch die 32 bit Version.
Im Linuxkernel von der 32 bit Version gibt es eine High Memory Option. Wenn du nur 1 GByte RAM in den Rechner eingebaut hast, dann kann man dies Option auf "off" stellen.
Wenn du 2 - 4 GByte RAM in den Rechner eingebaut hast dann wird die High Memory Option auf 4 GByte eingestellt.
Wenn mehr als 4 Gbyte RAM im Rechner sind, dann sollte die High Memory Option auf 64 GByte eingestellt sein.
Du mußt mal bei deiner Distribution nachschauen, ob es spezielle Kernelimages (das schon fertig übersetzte Linuxkernels ) gibt, welche diese Option entsprechend eingestellt haben. Sonst kann du auch einen eigenen Betriebsystemkern übersetzen. Du mußt dazu kein Programmier sein.
Bei der 64 bit Version wird dann kein Unterschied zwischen dem Low Memory und dem High Memory gemacht. Aber wenn du die 32 bit Version installiert hast, dann kann der Linuxkernel auch bis zu 64 GByte RAM verwalten. Das ist alles viel besser programmiert als bei Windows ;-).
PS: Windows lagert im Gegensatz dazu schon Speicher aus, wenn mehr als 278 MByte RAM im Rechner eingebaut sind. Ich weiß das deshalb so gebaut, weil dazu immer eine Warnung bei der Konfiguration von VMware Workstation erscheint.