ram
RAM Disk
Mir kommt vor, viele Leute haben immer noch Panik vor einer RAM Disk.
Doch nichts leichter als das in einem Raspian Image:
Konkret mit Raspbian GNU/Linux 11 (bullseye)
# mkdir /mnt/ramdisk # Add to /etc/fstab tmpfs /mnt/ramdisk tmpfs nodev,nosuid,size=2M 0 0
Speicherfresser
Anmerkung zum Artikel „Speicherfresser – Speicherverwaltung bei High-End-Systemen“ im Linuxmagazin 03/14
Einfach gesagt, geht es um eine Thema über das ich schon vor einiger Zeit gebloggt habe: Swap
Es geht in dem sieben seitigen Artikel unter anderem um die Frage, warum man auch auf modernen Systemen, mit massenhaft Speicher noch immer Swap-Speicher benötigt.
I/O intensive Prozesse können den Speicher von Anwendungen, die kaum I/O lastig sind, in den Swap Bereich zwingen. Am Besten verständlich wird das anhand eines Beispieles: Eine Datenbank hält jede Menge Speicher für verschiedene Buffer belegt. Der Großteil des nötigen Datensets liegt im RAM und alles ist gut. Dieses eingespielte System verursacht dann nur mehr wenig I/O. Läuft jetzt aber ein Backup, von dem die ganze Disk gelesen wird, wandern diese Daten in den Cache und zwingen so die eigentlichen Arbeitsdaten in den Swap. Im Anschluss wird die ursprüngliche Performance erst wieder erreicht, wenn die Daten den eigentlich unnötigen Cache wieder verdrängt haben.
Swap
Ein weiterer Grund, warum der verbrauchte Speicher, nicht mit belegtem Speicher plus Swap übereinstimmt: …
As it turns out, swap means more than just pages swapped to disk. An application's binary and libraries need not stay in memory the whole time. The kernel can mark some of the memory pages as unnecessary at the time; but because the binary is at a known location on disk, there is no need to use the swap file. This is still counted as swap because the part of the code isn't resident. In addition, memory can be mapped to a disk file by the application. Because the whole size of the application (VIRT) includes the mapped memory, but it isn't resident (RES), it's counted as swap.
Speicherauslastung und Swap
Wird der RAM in einem Linux-System zu wenig, wird auch der Swap-Bereich benutzt. Woher kommt es aber, dass manchmal noch Speicher frei ist, aber trotzdem schon Swap benutzt wird?
Laut Thorsten Robers, LPI 301, S. 306 gibt es zwei Bedingungen, wann Speicher in den Swap-Bereich ausgelagert wird:
Steht nicht genügend RAM zur Verfügung oder geht der Betriebssystemkern davon aus, dass der Prozess in nächster Zukunft nicht weiter ausgeführt werden muss, lagert der Kernel diese Daten in den Swap-Speicher aus.
Das bedeutet, dass der Kernel bereits präventiv den Swap-Bereich benutzt, um mehr Speicher für die tatsächlich aktiven Prozesse und den Platten-Cache frei zu haben.
Im Idealfall wird dieser (Anm: der Swap-Speicher) kaum genutzt, wobei nicht die Verwendung der [sic] Swap-Speichers per se auf einen Engpass hinweist. Erst wenn der Kernel Swap-Speicher exzessiv zur Auslagerung von Prozessen und Daten nutzt, wirkt sich das negativ auf die Gesamtperformance des Systems aus.
Das Verhalten "wie gerne" ein System den Auslagerungsspeicher benutzt, kann eingestellt werden unter der Bezeichnung swappiness:
# cat /proc/sys/vm/swappiness 60
60 ist der Default-Wert, 0 würde bedeuten, dass gar nichts mehr in den Swap-Bereich kommen soll.
A Crash Course in Modern Hardware
In dieser Präsentation (passt übrigens zur Vorlesung in Rechnerarchitektur) von der JVM Languages Summit 2009, erzählt Cliff Click über die Von Neumann Architektur, CISC & RISC, den Aufstieg von Multicore, Instruction-Level Parallelism (ILP), Pipelining, Out-of-order Dispatch, Static & Dynamic ILP, Performance Einflüsse von Cache Misses, Memory Performance, Memory & CPU Caching, Beispiele für Speicher / CPU Cache Wechselwirkungen, and Tipps für verbesserte Performance.
Das ganze findet sich in Englischer Sprache hier:
http://www.infoq.com/presentations/click-crash-course-modern-hardware