Mysterium Arbeitsspeicher - über das, was in den kleinen Chips so vor sich geht

[PROLOG]

Viel hilft viel, so ist es auch beim Arbeitsspeicher, zumindest solange man nicht übertreibt. Doch was steckt da überhaupt so drin, wie wird er verwendet und warum wird er mit der Zeit immer voller und voller? Ein Blick in den Ressourcen Monitor vom QNAP NAS könnte da Aufschluss geben... Oder die totale Verwirrung.

In diesem Artikel möchte ich zeigen, welches Treiben in diesen kleinen und vor allem schnellen Speicherchips vor sich geht und wie die angezeigte RAM-Auslastung zu deuten ist.


[AUFGABEN VOM RAM]

RAM steht für Random Access Memory und wird in (Computer) Systemen verwendet um Daten „kurzzeitig“ zu speichern und verwenden zu können, das Augenmerk liegt dabei auf der Verarbeitungsgeschwindigkeit, denn RAM ist im Gegensatz zu allen anderen Speichern extrem schnell unterwegs. Die Leistung, die ein RAM vollbringt, muss entsprechend teuer bezahlt werden, demnach ist es wichtig, dass der RAM möglichst effizient genutzt wird, wofür vornehmlich das Betriebssystem verantwortlich ist. Das Sprichwort "Ungenutzter RAM ist verschenkter RAM" kommt daher nicht von ungefähr: Jedes Byte sollte nach Möglichkeit zu jeder Zeit ausgenutzt werden!


Im RAM-Speicher landen demnach Daten, die benötigt werden, um ein flüssiges Arbeiten zu ermöglichen, das können Daten des Betriebssystems oder von Anwendungen sein, wobei mit "Daten" nicht einfach nur Dateien gemeint sind, sondern auch die Ergebnisse von Rechenoperationen. So kennt man den RAM auch vornehmlich: Mit viel RAM laufen Anwendungen und das Betriebssystem einfach flüssiger und schneller, da die Daten von diesem flinken Speicher, statt von lahmen SSD oder gar HDD geladen werden können und mehr durch die CPU berechnete Eregebnisse von dort abgerufen werden können.


Jetzt machen wir uns aber nichts vor... Niemand dimensioniert seinen RAM so, dass er gelegentlich bei Bedarf an seine Grenzen gelangt, da ist immer Luft nach oben. Ich wage sogar zu unterstellen, dass sich die Wenigsten derart Gedanken machen, also bauen wir doch lieber gleich möglichst viel ein, statt den wirklichen Bedarf zu ermitteln. Da ist es gut, dass das Betriebssystem mit "überschüssigem" RAM umzugehen weiß und diesen in eine sinnvolle Verwendung bringt. So werden im RAM neben den wirklich dringend benötigten Daten auch andere Daten gespeichert oder behalten, wovon man unter Umständen profitieren kann. Das können Daten sein, die zwar kürzlich erst genutzt wurden, aber aktuell nicht benötigt werden, vielleicht braucht man sie ja doch gleich nochmal, dann sind sie schonmal da und schnell zugriffsbereit. Genauso gut ist es vor allem bei NAS/ Storage möglich, dass dort Daten zwischengespeichert werden, die vom restlichen System wie z.B. den Datenträgern nicht ausreichend schnell verarbeitet werden können (manch einer kauft sich dafür sogar lahme SSD, ohne zu wissen, dass der RAM das in einem gewissen Ausmaß auch kann, und wundern sich dann, dass es mit SSD-Cache irgendwie langsamer ist als ohne).


Da ist also so einiges im RAM los, was im Wesentlichen vom Betriebssystem gemanaged wird. Hauptsache das weiß, was da los ist und wie damit umzugehen ist, aber wie gehen wir User damit um, wenn wir uns die RAM-Auslastung anschauen? Brauche ich jetzt zusätzlichen RAM, oder ist alles im grünen Bereich? An der einen Stelle wird 16% Auslastung angezeigt und zeitgleich an der anderen irgendwie 89%. Also wie jetzt?


[RAM AUSLASTUNG ANZEIGEN UND DEUTEN]

Schauen wir uns also mal an, wie der RAM auf einem QNAP NAS verwendet wird, dazu gibt es mehrere Möglichkeiten.

Über die GUI wird die Auslastung im Ressourcenmonitor mit dem Verlauf der letzten 10min angezeigt.


res_memory1.PNG


Unterschieden wird hier wie folgt:


Buffer

Im Buffer werden Daten zwischengespeichert, die vom System nicht schnell genug verarbeitet werden können, weil z.B. die Daten nicht ausreichend schnell auf die Festplatte geschrieben oder Daten nicht ausreichend schnell von der CPU verarbeitet werden können. Im Gegensatz zum Cache ist der Buffer relativ flüchtig (also meist nur kurzzeitig in Verwendung), er sorgt dafür, dass die schnellere Komponente nicht zu lange auf die langsamere Komponente warten muss. Er wird vornehmlich bei der Verarbeitung von Datenblöcken eingesetzt, beim Verarbeiten von Dateien im Storage (in einem Dateisystem) wird allerdings der Cache verwendet.

Cache

Dies sind Kopien von Daten, die in den RAM gelagert wurden, da sie häufig benötigt werden und somit ein schneller Zugriff ermöglicht wird. Dazu gehören auch Daten von Anwendungen, die zwar kürzlich verwendet wurden, aktuell aber nicht mehr benötigt werden, ebenfalls damit diese beim nächsten Bedarf wieder schnell zur Verfügung stehen (in manchen OS wird dies auch „inactive“ bezeichnet). Der Cache wird vornehmlich zum Lesen von Daten verwendet.

Cache und Buffer haben gemeinsam, dass die enthaltenen Daten nicht immer zwingend benötigt werden *, ihre Aufgabe ist es im Wesentlichen das System zu beschleunigen und den RAM sinnvoll zu nutzen.

Free

Das ist die Kapazität, die aktuell wirklich ungenutzt und quasi verschenkt ist, selbst das Betriebssystem weiß nicht, wie es diese Kapazität aktuell sinnvoll nutzen soll oder lässt diese absichtlich „als schnelle Reserve“ frei.

Available

Das ist die Angabe, die in der Regel von Relevanz ist und gibt an, wie viel RAM aktuell für neue Prozesse bereitsteht. Darin enthalten ist nicht nur der ungenutzte RAM (free), sondern auch Buffer und Cache, denn diese können bei Bedarf problemlos für neue Prozesse frei gemacht werden (zumindest weitgehend), schließlich sind die in Buffer und Cache enthaltenen Daten nicht zwingend für den Betrieb erforderlich *.


* Um korrekt zu bleiben muss man hierzu sagen, dass Daten die einmal im Buffer sind sehr wohl zwingend benötigt werden, bis sie verarbeitet wurden, es ist aber oft nicht zwingend, dass diese Daten überhaupt hierher geschrieben werden. Daten bleiben in der Regel nur sehr kurz im Buffer, wobei es Ausnahmen bei bestimmten Daten des Betriebssystems geben kann, die Verwendung (von Buffer und Cache) ist also nicht völlig optional, sondern wird zu kleinen Anteilen ebenfalls dringend benötigt.

Used

Das ist der RAM, der derzeit wirklich aktiv von Prozessen verwendet wird und auch nicht ohne Weiteres freigegeben werden kann.

Total usable memory

Das ist ganz einfach der insgesamt zur Verfügung stehende RAM, der genutzt werden kann. Die gesamten installierten 16GB im Beispiel sind nicht vollständig nutzbar, da Teile des RAM dediziert für z.B. die Videoausgabe oder das Betriebssystem bereitgestellt werden.


Auf der rechten Seite erhält man zudem Angaben zum Swap. Dies sind Speicherbereiche auf den Festplatten und SSD die als „RAM-Ersatz“ verwendet werden, wenn nicht ausreichend RAM zur Verfügung steht. QTS unterteilt den Swap in HDD- und SSD-Swap und verwendet auch bevorzugt die SSD, da diese schneller sind als HDD. Sollte der Swap also in Gebrauch sein, sollte man über weiteren RAM nachdenken, denn selbst die SSD sind nicht ansatzweise so schnell wie der RAM, was zu entsprechenden Leistungseinbußen führt.


Die Angaben aus der GUI decken sich soweit auch mit denen, die man über das CLI / SSH auf unterschiedliche Weisen abrufen kann, allerdings beinhaltet der verwendete RAM (used) bei dem Befehl „top“ auch Buffer und Cache, was die GUI für uns „freundlicherweise“ rausrechnet, damit der normale User besser mit den Angaben zurechtkommt und versteht, dass eine hohe Verwendung nicht zwingend auf zu wenig RAM zurückzuführen ist.


Die folgenden Ausgaben der unterschiedlichen Befehle sind bewusst nicht als Codeblock ausgeführt, um die unterschiedlichen Angaben farblich darstellen zu können.


[~] # top

Mem: 15552584K used, 537260K free, 374100K shrd, 802268K buff, 9007796K cached


Der Befehl „free“ rechnet uns den Buffer und Cache ebenfalls heraus (zweite Zeile der Ausgabe), sodass sich diese Angabe wieder mit der aus der GUI deckt. Die Angabe beim freien Speicher in dieser Zeile zeigt dann auch den zur Verfügung stehenden RAM (available), was „top“ nicht preisgibt. Die Angabe „shared“ / „shrd“ ist für unsere Betrachtung nicht relevant, sie ist Teil des verwendeten RAM. Der Befehl „free“ gibt außerdem auch Auskunft über den Swap.


[~] # free

...........total ..........used .........free .... shared buffers cached

Mem: 16089844 15548904 540940 374240 802456 9007916

-/+ buffers/cache: 5738532 10351312 ## Buffer/ Cache wird in der Zeile für "used" herausgerechnet

Swap: 16048948 776 16048172


Auch „cat /proc/meminfo“ zeigt den verfügbaren RAM an, dafür fehlt allerdings die Angabe von used:


[~] # cat /proc/meminfo

MemTotal: 16089844 kB

MemFree: 544564 kB

MemAvailable: 9713076 kB

Buffers: 802512 kB

Cached: 9007980 kB


Die Ausgabe von „free“ kann nun auch Aufschluss darüber geben, warum manche Anwendungen die RAM-Auslastung anders betrachten, als es das Betriebssystem tut. Leider habe ich auf keinem System ein passendes Beispiel parat, wohl aber dieser Thread, bei dem sich ein User fragt, warum QVR die RAM-Auslastung anders sieht als QuTS hero selbst.

Wie weiter oben schon beschrieben, rechnet QTS / QuTS hero für uns den Buffer und Cache aus dem verwendeten RAM heraus, was die Werte in der zweiten Zeile von „free“ ergibt. QVR legt allerdings jene Angaben zugrunde, die eben Buffer und Cache enthalten, also die Daten aus der ersten Zeile von „free“, was dann so aussieht, als würde echt fast der gesamte RAM „verbraucht“ sein.


Übrigens:

Je nach Betriebssystem oder angewendeten Befehl gibt es auch noch die RAM-Verwendungszwecke „wired“, „active“ und „inactive“. „Inaktiver“ RAM kann im Gegensatz zu aktivem RAM leergemacht und anderweitig verwendet werden, also ähnlich dem Cache. Wired RAM hingegen wird zwingend im RAM benötigt und kann daher auch nicht in den Swap ausgelagert werden.



Jetzt wo wir die Angaben besser deuten können, schauen wir nochmal auf das Beispiel und stellen fest…


res_memory2.PNG


… dass von 15,34GB nutzbarem RAM momentan 5,55GB in aktiver Verwendung sind und nicht anderweitig zur Verfügung gestellt werden können. Etwa 9,44GB werden mit Buffer und Cache sinnvoll genutzt, 448MB sind absolut leer und werden nicht verwendet. Insgesamt stehen dem System damit 9,79GB zur Verfügung, sofern diese „sinnvoller“ verwendet werden müssen.


Used = Total - Available = 15,34GB - 9,79GB = 5,55GB

Available = Buffer + Cache + Free = 0,789GB + 8,64GB + 0,448GB = 9,87GB (woher die Abweichung von etwa 120MB kommt, kann ich mir nicht erklären)


Die Grafik des RAM-Verlaufs von oben zeigt das System, während es so vor sich hindümpelt. Schauen wir uns nun noch ein paar andere Szenarien an und deuten diese.


Daten kopieren


res_memory_change.PNG


Hier habe ich ein paar Daten NAS-intern von SSD auf HDD kopiert. Man sieht, dass dafür mehr RAM für den Cache verwendet wird, zeitgleich sinkt natürlich die brachliegende (freie) Kapazität im RAM. An dem verwendeten und verfügbaren Speicher hingegen tut sich überhaupt nichts, denn das, was aktuell passiert muss nicht zwingend im RAM behalten werden und wird daher nicht zum verwendeten RAM gezählt. Die Tatsache sorgt auch dafür, dass der verfügbare RAM unverändert bleibt, denn unterm Strich ist es egal, ob die Kapazität bei Bedarf aus dem freien RAM geholt wird, oder ob der Cache dafür geleert und herangezogen wird, verfügbar ist die Kapazität also in jedem Fall.


VM starten und stoppen


res_memory_change2.PNG


Hier habe ich eine Windows VM mit 8GB RAM gestartet und später wieder gestoppt. Man sieht, dass der freie RAM beim Einschalten kaum angetastet wird, stattdessen wird der Cache herangezogen, weitgehend geleert und für die VM verwendet, der verwendete RAM steigt entsprechend in die Höhe.


Im Moment des Abschaltens geht der verwendete RAM wieder auf das „normale“ Level zurück, der nun befreite RAM wird ab diesem Moment als wirklich freier RAM dargestellt, und zwar etwa auf dem Niveau, was vorher als Cache im RAM lag. Das ist ja klar, denn der Cache wurde für die VM geleert und von dieser verwendet; jetzt wo die VM den RAM nicht mehr benötigt, liegt dieser erstmal eine Zeitlang ungenutzt herum, bis die Kapazität mit der Zeit wieder als Cache verwendet wird. Das ist übrigens das Gleiche, was diese tollen „RAM-boost-Tools“ wie dieser Roboter-Hampelmann in QTS machen… die leeren vornehmlich den Cache und es wird wieder mehr freier RAM angezeigt. Reine Augenwischerei, die dafür sorgt, dass RAM ungenutzt rumliegt und mancher Prozess nicht mehr so schnell ausgeführt/ gestartet werden kann!


In dem vorherigen Screenshot habe ich übrigens „den Härtefall“ für den RAM in meinem System dargestellt, mehr benötige ich bislang nicht. Dabei habe ich etwa 80% ausgereizt, und zwar wirklich verwendet. Somit blieben noch 20%, also etwa 3,2GB für Cache übrig, was mir sagt, dass der RAM für dieses System passend bemessen ist, auch wenn im Alltag immer einige MB ungenutzt bleiben. Der Swap wurde entsprechend gar nicht verwendet.


Snapshot-Replica übertragen


res_memory_change3.PNG


Zuletzt nochmal ein schönes, ungeplantes Beispiel. Es ist gerade 12 Uhr und die Snapshot-Replika werden auf ein anderes NAS ausgelagert, einige Minuten nach dem vorherigen Beispiel. Zu Beginn ist also noch eine ganze Menge RAM frei, dann verwendet der Prozess selbst etwa 1GB RAM, welcher wiederum von der blauen „available“-Linie abgeht, denn diese Kapazität wird fest von dem Prozess geblockt. Gleichzeitig wird eine ganze Menge, etwa 5GB in den Buffer geschrieben, diese Kapazität holt das Betriebssystem aus dem immer noch freien, gänzlich ungenutzten RAM. Der Cache ist hierbei kaum involviert, bei den zu verarbeitenden Daten handelt es sich um Datenblöcke, nicht um Dateien in einem Dateisystem, wofür vermutlich der Cache herangenommen würde. Ob nun irgendwas am Quell- oder Zielsystem der Flaschenhals ist kann ich nicht beurteilen, das 1G LAN dazwischen wird es eher nicht sein, da dies bei Snapshot-Replica kaum belastet wird (ich hatte zuletzt beobachtet, dass die Daten nur „schubweise“ übertragen werden, dazwischen gibt es immer Pausen in der Übertragung, aber die Funktion läuft zuletzt auch nicht ganz rund).


[VIEL HILFT VIEL]

Ich hatte weiter oben behauptet, dass das Betriebssystem selbst nicht wüsste, was es mit zu viel freiem RAM sinnvolles machen soll, sicher bin ich mir bei dieser Aussage allerdings nicht, schließlich könnte das Betriebssystem auch einfach einen gewissen Anteil RAM ungenutzt lassen, damit bei Bedarf nicht erst Daten aus dem RAM gelöscht werden müssen. Quasi als noch schneller zur Verfügung stehende Kapazität. Dabei fällt mir ein, dass ich ja noch die originalen 2x 2GB RAM liegen habe, diese hatte ich anfänglich ausgebaut, weil der neue RAM nicht sauber erkannt wurde und schlussendlich habe ich die Module nicht mehr eingebaut. Das holte ich nun mal nach, ich will wissen, wie das System mit den zusätzlichen 4GB umgeht, vor allem ist der eingelagerte RAM noch mehr Verschwendung, als wenn er eingebaut ist und zumindest temporär nicht genutzt wird.


Da das System gerade erst hochgefahren ist, habe ich auch direkt mal einen Screenshot nach dem Booten erstellt, also ab dem Moment, wo der Ressourcenmonitor gestartet ist und ausgeführt werden konnte:


res_memory_ext_boot.PNG


Man kann schön sehen, wie weitere Anwendungen gestartet wurden und RAM benötigen, die verwendete Kapazität steigt also an, während natürlich zeitgleich die freie und zur Verfügung stehende Kapazität parallel sinken. Dann pendelt es sich erstmal ein, Cache wird noch nicht verwendet, dafür ist der Buffer fast doppelt so stark belegt wie zuvor. Ich bin gespannt ob dies durch den Neustart bedingt ist, oder ob das System ob des zusätzlichen RAM nun auch mehr im Buffer behält, darin könnten auch wichtige Daten des Kernels gepuffert sein.


Das System „idled“ anschließend eine ganze Zeitlang herum, drei kleine VM sind wie immer aktiv, da passiert aber nichts Aufregendes, ansonsten fasse ich das System nicht an. Anhand vergangener Aufzeichnungen im Monitoring sehe ich, dass es etwa 4 Stunden dauert, bis das System beginnt den RAM langsam für Cache zu verwenden; erst ab dem Zeitpunkt wo meine Snapshot Replika laufen, wird nahezu der gesamte RAM verwendet. Am Ende des Tages zeigt sich dann wieder das gewohnte Bild, nur eben mit mehr RAM… Die zusätzliche Kapazität liegt einfach nur brach als freier RAM herum, pure Geldverschwendung, auch wenn ich den originalen RAM ohnehin nicht verkaufen würde (könnte im Supportfall wichtig sein), dazu später mehr. Interessant finde ich jedoch, dass zumindest scheinbar etwa genau die zusätzlichen 4GB als Cache verwendet wurden, bis ich mich in QTS einloggte und den Ressourcenmonitor gestartet habe. Eine Fehlanzeige des Ressourcenmonitors oder steckt da wirklich etwas dahinter? Bei weiteren Beobachtungen konnte ich dieses Verhalten nicht nochmal feststellen.


res_memory_ext_cache.PNG


Pure Geldverschwendung bis hierhin, auch ohne Anschaffungskosten, denn bei der eingesetzten Kapazität des RAM kommt es nicht nur auf die Beschaffungs-, sondern auch auf die Betriebskosten an. Denn ob die Kapazität verwendet wird oder nicht, mehr RAM benötigt auch mehr Energie. Crucial gibt den Energiebedarf von RAM wage mit etwa 3W je 8GB an **. Das ist nicht viel, aber bei einem Gerät das 24/7 läuft auch nicht zu vernachlässigen, und würde bei 8GB mit etwa 65ct/ Monat zu Buche schlagen (bei 30ct/KWh).


** Weitere Recherchen bestätigen dies zumindest für DDR4 RAM, bei DDR3L scheint es in Richtung 5,5W zu gehen, unklar ist, ob dies auch die zusätzliche Stromaufnahme vom Controller beinhaltet. Die These zum Energiebedarf kann demnach nicht bestätigt werden, fest steht aber, dass zusätzliche Module und/ oder Kapazität auch mehr Energie benötigen.


Es ist nun gut ein Tag vergangen, seit ich den RAM erweitert habe. Mittlerweile hat sich das gewohnte Bild wieder eingeschlichen, es wird viel für Buffer und Cache verwendet, wie zuvor sind auch jetzt um die 400MB frei, der zusätzliche RAM wird also durchaus in Verwendung gebracht. Der Ressourcenmonitor gibt ja aber nur Auskunft, solange er geöffnet ist, und das auch nur über die letzten 10 Minuten. Ich hatte bereits das Monitoring erwähnt, das u.a. die Nutzung des RAM dauerhaft aufzeichnet und Folgendes anzeigt:


monit_ram_ext_clear.PNG


Die Erweiterung des RAM ist deutlich erkennbar, natürlich hat dies nicht so lange gedauert wie die Lücke suggeriert. Dieses Phänomen habe ich derzeit öfter, wenn das System wegen fehlgeschlagenen Snapshot-Replika instabil wird. Sei es drum, man sieht nach der Erweiterung des RAM (die kleine Lücke um etwa 7 Uhr), dass es etwas Zeit gebraucht hat, bis der zusätzliche RAM auch im Monitoring bekannt wurde, das aber nur am Rande. Was ich diesen Daten sonst noch entnehmen kann ist Folgendes:


Täglich um 12 Uhr mittags werden meine Snapshot-Replica erstellt, wo der Buffer in die Höhe schießt. Anschließend bleibt der RAM mit diesen Daten gefüllt (vorher etwa 8GB, mit der RAM-Erweiterung etwa 11GB). Am Dienstag wurde der Buffer wieder recht schnell frei gemacht und stattdessen Cache verwendet, keine Ahnung was an dem Tag anders lief. Jeden Tag um 0100 Uhr gehen Buffer und Cache schlagartig runter und steigen anschließend wieder an. Diese Regelmäßigkeit ist in der Crontab begründet, gemäß dieser wird nämlich der RAM durch /etc/init.d/flush_memory.sh >/dev/null 2>&1 freigemacht. Wie sinnvoll es im Allgemeinen ist, das täglich zu tun, mag ich nicht beurteilen, prinzipiell empfinde ich es jedoch als Verschwendung, denn das Betriebssystem sollte in der Lage sein zu entscheiden, wie lange die Daten in Buffer und Cache wirklich benötigt werden bzw. wann diese Kapazität anderweitig sinnvoller genutzt werden kann. Offensichtlich kann QTS/ Linux das auch, wie der Dienstag in den Daten des Monitoring zeigt, denn hier wurde der Buffer von den Snapshot-Replica ja gelöscht und die Kapazität für den Cache verwendet. Ob die Replika nun schneller vonstattengehen würden, wenn die Daten beim nächsten Durchlauf noch im Buffer wären, sei dahingestellt, passieren würde dies sowieso nicht, da um 0300 und 0400 weitere Backups laufen und der RAM dann ohnehin dafür leergemacht wird.


So richtige Verbesserungen durch den zusätzlichen RAM spüre ich nicht, mittlerweile frage ich mich sogar, ob QTS/ Linux nicht sinnvoller mit dem RAM umgehen könnte, vor allem das nächtliche Leeren von Buffer und Cache nervt mich, das werde ich aus der Crontab rausnehmen, einfach für´s gute Gefühl... außerdem wird das NAS wird sowieso wöchentlich neu gestartet und der RAM dabei geleert. Insgesamt dauert es mir zu lange, bis der Buffer oder Cache anderweitig verwendet wird, kann aber nicht beurteilen, ob es bei dem System zwischendurch überhaupt eine sinnvollere Verwendung geben würde.

Derart "verkommen" lassen werde ich die zusätzliche Kapazität allerdings nicht, zumindest einen Teil davon werde ich meinen 24/7 VMs zuweisen, die laufen zwar recht anständig, aber ein kleiner Schub täte ihnen bestimmt auch ganz gut. Dabei fällt mir direkt noch was ein… so langsam glaube ich, dass ich kein Ende finde…


Bevor ich meinen kleinen VM mehr RAM zuweise, wollte ich natürlich erstmal schauen, welche VM zusätzlichen RAM am besten gebrauchen kann. Nach den Angaben in der Übersicht der Virtualization Station kann man dabei allerdings nicht gehen, denn diese Angaben weisen aus, wie viel RAM die entsprechende VM momentan vom im Host/ NAS eingebauten RAM verwendet, nicht aber, wie die VM selbst mit dem zugewiesenen RAM zurechtkommt. Zwei der VM sind da schon recht nahe am Limit und "swappen" bereits, die bekommen jeweils 1GB drauf, das schont auch ein wenig die SSDs.


Im Nachfolgenden Screenshot sieht man die Auswirkung der Verdoppelung des RAM von 1 auf 2 GB bei einer VM: Vorher wurde der Swap verwendet, das hat nun ein Ende. Der total „installierte“ RAM ist auch hier noch nicht beim Monitoring angekommen, daher wird der freie RAM mit einem negativen Wert ausgegeben und die Angaben scheinen etwas wirr zu sein.


monit_momory_VM.PNG


Bei einer anderen VM kann man auch sehen, dass das Betriebssystem (hier Linux) den Cache auch benötigt und verwendet, wenn eigentlich nicht ausreichend Kapazität frei ist. In diesem Fall wurde der Swap mit 130MB für aktive Prozesse verwendet, erst nach der Erweiterung wird endlich der RAM dafür benutzt. Diese 130MB hätten auch zuvor problemlos im RAM untergebracht werden können, stattdessen wurde die Kapazität aber für den erforderlichen Cache verwendet. Auch hier ist die neue totale Kapazität noch nicht im Monitoring angekommen.


monit_memory_VM2.PNG


[DUALCHANNEL]

Spricht man über RAM, so ist der Begriff „Dualchannel“ in aller Munde. Beim Dualchannelbetrieb werden mehrere RAM-Module paarweise auf unterschiedlichen Kanälen eingesetzt, was eine Verdoppelung der Übertragungsrate nach sich zieht, der RAM wird also noch schneller angebunden, als es im Singlechannelbetrieb mit z.B. nur einem Modul der Fall ist. QNAP NAS unterstützen ebenfalls Dualchannel, Voraussetzung ist auch hier, dass die Module auf zwei Kanäle aufgeteilt werden. Bei nur zwei Slots für den RAM kann man heutzutage davon ausgehen, dass es sich um unterschiedliche Kanäle handelt, sollten vier oder mehr Slots vorhanden sein, muss man prüfen, welcher Slot auf welchem Kanal angebunden ist und die Module entsprechend installieren. Oftmals sind die Slots (farblich) gekennzeichnet, was bei QNAP NAS aber nicht (immer) der Fall ist. Hier lohnt sich ein Blick in den Systemstatus, der anzeigt auf welchem Kanal das jeweilige Modul sitzt. Auch ein Blick in die Hardwareanleitung kann eigentlich nicht schaden, ich habe hier jedoch zumindest beim TVS-473 die Erfahrung gemacht, dass die Angaben der Anleitung nicht stimmen, ein Ticket dazu wurde vor geraumer Zeit erstellt.


Dualchannel bietet unterschiedliche Modi, so z.B. den Flexmode, der es ermöglicht unterschiedlich große Module im Dualchannelbetrieb zu verwenden. Die Aussage, dass es sich stets um zwei Module mit identischer Kapazität handeln muss, ist also nicht (mehr) ganz korrekt. QNAP unterstützt angeblich ebenfalls den Flexmode, dabei wird entsprechend nur die Kapazität des kleineren Moduls im Dualchannel betrieben, die restliche Kapazität im Single Channel. Leider kenne ich keine Möglichkeit zu prüfen, ob und welcher Anteil im Flexmode wirklich im Dualchannel betrieben wird, sodass diese Aussage zunächst spekulativ bleibt.


Die Aussage, dass es sich stets um Module des gleichen Typs handeln muss, ist übrigens schon immer verkehrt, allerdings ist es empfehlenswert, die gleichen Typen in einer Paarung zu verwenden. Man kann also durchaus, auch ohne Verwendung des Flexmode, je ein 8GB Modul auf Kanal A1 und B1 von Hersteller X und je ein 2GB Modul auf Kanal A2 und B2 von Hersteller Y verwenden, so wie ich es anwende (siehe Nachfolgender Screenshot). Aber auch selbst wenn bei den hier verwendeten vier Modulen vier unterschiedliche Typen verwendet würden, so würden diese im Dualchannel betrieben werden, wenn auch nicht optimal, da sich die Module in unterschiedlichen Spezifikationen unterscheiden und daher unter Umständen nicht optimal miteinander arbeiten.


dualchannel.PNG


[EPILOG]

Wir stellen schlussendlich also fest, dass „freier RAM“ allein nicht herangezogen werden kann, um zu bewerten, ob das System über ausreichend Arbeitsspeicher verfügt. Die etwa 400MB freier RAM aus dem ersten Beispiel sind demnach alles andere als kritisch zu bewerten, für dieses System wäre es somit auch nicht erforderlich, dass RAM nachgerüstet wird. Schaden tut dies aber nicht, denn durch zusätzlichen RAM könnte das System noch mehr darin auslagern und spätere Anwendungen durchaus beschleunigen, ich habe die zusätzliche Kapazität nun einfach meinen VM gegeben, auch wenn diese ganz gut liefen, Swap muss auch bei kleinen VM nicht sein. Wenn es unglücklich läuft, dann hat man so viel RAM, dass man unnötig Geld ausgegeben hat, weil das System es einfach nicht schafft, diesen sinnvoll zu verwenden, aber Haben ist ja bekanntlich besser als Brauchen. Wichtig ist, dass das System nicht „swapt“, also nichts auf die langsamen SDD oder HDD auslagern muss. In Ausnahmesituationen mag das akzeptabel sein, kommt dies jedoch im Alltag vor, so besteht Handlungsbedarf… aber auch bei SSD-Swap? Die sind doch auch schnell?! Diese Frage ist ganz einfach mit „Ja“ zu beantworten, dazu muss man nur mal grob auf die jeweiligen Lesegeschwindigkeiten schauen: Eine HDD bringt etwas um die 170MB/s und eine SSD um die 500MB/s, das müssen wir gar nicht so genau nehmen. In QNAP NAS werden vornehmlich DDR3 und DDR4 RAM verwendet, hier beträgt die Übertragungsrate mindestens 6.400MB/s, üblicherweise aber wohl eher 12.800MB/s bis zu 25.600MB/s, da kann man selbst über eine M.2 SSD nur lachen! Zudem werden SSD durch den Swap auch schneller abgenutzt, das muss wirklich nicht sein.



Irgendwie erinnert mich dieses „verwendet“ und „scheinbar verwendet, aber nutzbar“ beim RAM an die Elektrotechnik: Hier gibt es Wirkleistung und Scheinleistung, also etwas, das wirklich da ist und etwas, das zwar irgendwie da ist aber irgendwie doch nicht so richtig. Klassisch wird dies gerne anhand eines gefüllten Bierglases dargestellt, wobei das Bier die Wirkleistung und die Schaumkrone die Scheinleistung darstellt. Das wiederum erinnert mich daran, dass ich Durst habe. Cheers! :beer:

Kommentare 5

  • Spannender, interessanter und unterhaltsamer Artikel. Selbst ich als Nicht-Laie konnte noch das eine oder andere dazu lernen. Über einiges habe ich mir so noch nie Gedanken darüber gemacht.

    Zitat

    üblicherweise aber wohl eher 12.800MB/s bis zu 25.600MB/s, da kann man selbst über eine M.2 SSD nur lachen!

    Ich fürchte, da hat die Zeiten Deinen Artikel bald eingeholt und die SSDs lachen. Die schnellste SSD erreicht inzwischen knapp über 14 GB/s. :)

    The world’s fastest SSD has just been tested and it packs an unbelievable smart cooling system
    The Phison E26 Max14um ES 2TB SSD delivers speeds of more than 14GB/s
    www.techradar.com

    • Hui, das ist auch schon sehr fix... wenn die SSD auch wie eine SSD kostet und nicht wie RAM, dann ist das schon krass :)

      Aber ich denke auch RAM wird was das angeht nicht stehenbleiben und DDR5 geht ja tatsächlich schon bis 64GB/s... ist also noch ein bissl Zeit, bis die SSD lachen darf :)

    • Ansonsten einfach HBM verwenden. HBM3 hat z.B. eine Durchsatz von bis zu 819 GB/s. Da wird es wohl noch etwas dauern, bis SSDs hier angekommen sind. ;)


      Aber ja, sowohl die schnelle SSD mit über 14 GB/s als auch HBM wird für zuhause kaum bezahlbar sein, zumindest in nächster Zeit. HBM ist wohl auch weniger als RAM gedacht.

  • Ich bin ja nun wirklich Laie, was Speicherverwaltung und vieles andere anbelangt. Von daher darf ich die Expertenmeinung des Ahnungslosen vertreten, dass es wohl kaum sonst einen solch interessanten Einblick in eine komplizierte Materie gibt, der mich auch noch glauben lässt, etwas verstanden zu haben. Schon das verdient meinen Dank!


    Wofür ich aber zu dem meine Bewunderung ausdrücken möchte ist, die gelungene Darstellung, die angenehm verständliche Sprache ohne dabei derart zu vereinfachen, dass sich Ungenauigkeiten ausmachen lassen - jedenfalls für mich. Dieser Artikel ist mehr als interessant, lehrreich, gut gegliedert und verständlich. Er ist zudem auch unterhaltsam!

    Vielen Dank!

    Danke 1
    • Herzlichen Dank für das Feedback!


      Ich würde mich zwar niemals als Experten bezeichen, da hier für einen echten Experten sicherlich auch noch einige Kanten drin sind, aber ich versuche mich halt bestmöglich in die Materie einzuarbeiten, wenn ich ein begründetes Interesse habe... so entstehen solche Artikel bei mir ja auch: Ich will etwas verstehen, lese mich rein und sehe es nicht ein, das dann für mich zu behalten.


      Ich denke, und das hast Du ja bestätigt, dass es einigen Aufschluss gibt, auch wenn manches eventuell doch nicht ganz korrekt ist und Fehler enthält...