Hauptspeicher

Die letzte fundamentale Ressource jedes Rechners ist der RAM. Auch hier ist es für das Verständnis der Utilities und der Eingriffsmöglichkeiten wieder essenziell, einige Grundbegriffe im Hinterkopf zu haben.

Das beantwortet beispielsweise die Frage, warum Tools wie »top« zumeist sehr wenig freien Speicher ausweisen, auch wenn gar nicht viele Programme aktiv sind. Der Grund ist einfach: Linux handelt nach der Devise „ungenutzter RAM ist verschwendeter RAM“ und ordnet ein großes Stück des momentan nicht gebrauchten Speichers dem Disk-Cache zu. Von dort kann das System Speicher auch leicht wieder abziehen, wenn es ihn anderweitig braucht. Genauen Aufschluss über die Speicherverwendung gibt beispielsweise »free ‑m«, das sein Wissen wiederum aus »/proc/meminfo« bezieht.

Um den Hauptspeicher möglichst effektiv zu nutzen und gleichzeitig den Applikationen die Illusion zu geben, jede von ihnen könne über einen zusammenhängenden Speicherblock verfügen, verwaltet Linux den Speicher als virtuellen Speicher (Virtual Memory). Auf den greift das Betriebssystem nicht etwa byteweise zu, sondern es allokiert, liest, schreibt und bewegt immer eine Gruppe zusammenhängender Adressen, eine so genannte Seite (Page), die im Normalfall vier KBytes groß ist. So genannte Seitentabellen (Page Tables) mappen den virtuellen Adressraum auf die physischen Speicheradressen, die sich mehr oder weniger ungeordnet irgendwo im RAM befinden, während das Virtual Memory stets zusammenhängt.

Der virtuelle Adressraum ist in der Regel größer als der physische. Damit das Defizit sich nicht in ein Problem verwandelt, kann das Betriebssystem momentan nicht verwendete Speicherseiten im Hintergrund auf Platte auslagern und erst wieder einlesen, wenn jemand ihren Inhalt benötigt. Dieser Prozess nennt sich Paging und ist vom Swapping zu unterscheiden, das nicht einzelne Seiten, sondern den Adressraum kompletter Prozesse auf die Festplatten verfrachtet. Ein gewisses Maß Paging gehört zu den normalen Operationen eines Betriebssystems – Swapping dagegen ist sehr zeitintensiv, weshalb man es nach Möglichkeit vermeidet. Oder andersherum: Solange der Rechner keinen oder kaum Swapspace verwendet, reicht der RAM – kommt es zu exzessivem Swapping hat man definitiv zu wenig davon.

Neben dem virtuellen Memory braucht auch der Kernel Speicher: für Verwaltungszwecke sowie eigene Caches für Objekte wie Semaphoren oder Prozessdeskriptoren, Files und so fort. Diese zusammenhängenden Speicherstücke heißen Slab. Ein eigener Algorithmus verwaltet sie.

Das wichtigste Tool fürs Monitoring der Speicherverwaltung ist »vmstat«. Neben den schon erwähnten Alternativen »top« und »free« berichtet auch »procinfo« über den Speicherverbrauch. Einen Blick auf die Kernel-interne Speicherverwaltung gestattet »slabtop«. Schließlich haben auch die Alleskönner »sar« und »nmon« umfangreiche Speicherstatistiken zu bieten.

Fazit

Tools für das Ressourcen-Monitoring gibt es reichlich. Manche ermitteln dieselben Werte, keines kann alles. Wesentlich für den Performance-Analysten ist es, diese Informationen systematisch und zielgerichtet auszunutzen, um zu erkennen, wo der Hebel anzusetzen ist. Das gelingt nicht ohne fundiertes Know-how über die Mechanik des Betriebssystems. Vor dem Hintergrund dieses Wissens aber ist es möglich, die Flaschenhälse einzugrenzen und durch eine geschickte Konfiguration oder gezielte Aufrüstung der Hardware zu beseitigen. Das löst die Performance-Probleme, spart Zeit und Geld und beschert zufriedene Anwender.

Infos

[1] blktrace: https://secure.engr.oregonstate.edu/­wiki/CS411/index.php/Blktrace_Guide

[2] IBM I/O-Scheduler-Studie: http://www.linuxinsight.com/ols2004_workload_dependent_performance_evaluation_of_the_linux_2_6_i_o_schedulers.html

[3] Bonnie++: http://www.coker.com.au/bonnie++/

[4] Iozone: http://www.iozone.org/

[5] fio: http://unix.freshmeat.net/projects/fio/

[6] iptraf: http://iptraf.seul.org

[7] beforeafter: ftp://ftp.cup.hp.com/dist/networking/tools/

[8] jnettop: http://freshmeat.net/projects/jnettop/

[9] wireshark: http://www.wireshark.org

[10] tcptrace: http://www.tcptrace.org

[11] httpperf: http://www.hpl.hp.com/research/linux/httperf/

[12] dkftpbench: http://www.kegel.com/dkftpbench/

[13] netperf: http://www.netperf.org/netperf/

[14] iperf: http://sourceforge.net/projects/iperf

comments powered by Disqus
Mehr zum Thema

Prozess-Scheduling unter Linux


Noch in der Kernel-Version 2.4 von Linux war der Scheduler eine einfache Funktion, bestehend aus nur rund 100 Zeilen Quellcode. Mittlerweile ist seine größe auf ein Vielfaches angewachsen. Dieser Artikel soll die Entwicklung des Prozess-Scheduling unter Linux in den letzten Jahren widerspiegeln und seine Herausforderungen beleuchten.
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023