Inhaltsverzeichnis
Virtualisierung Kernel Samepage Merging
Unter KSM (Kernel Samepage Merging) versteht man grob gesagt, das Zusammenfassen identischer Speicherbereiche im RAM (Hauptspeicher) des Wirt-Systems um den vorhandenen RAM (Hauptspeicher) effizienter nutzen zu können.
KSM versetzt den Linux-Kernel in die Lage, zwei oder mehrere laufende Programme im RAM (Hauptspeicher) zu identifizieren und deren Speicherbereiche zu vergleichen. Falls bei diesem Vergleich festgestellt wird, das zwei oder mehrere Speicherbereiche absolut identisch sind, reduziert KSM die Referenzierung des Linux-Kernels, von mehreren Referenzierungen bzw. Verweisen auf die einzelnen absolut identischen Speicherbereiche auf eine Referenz des als absolut identisch identifizierten Speicherbereichs.
Somit können die als „redundant“ erkannten Speicherbereiche wieder zur anderweitigen Nutzung durch den Linux-Kernel freigegeben werden. Esrt wenn sich bei einer der zusammengelegten Speicherbereiche etwas ändern sollte, wird wieder eine veränderte Kopie vom Linux-Kernel erstellt und eine separate Referenz auf den so neu entstandenen Speicherbereich gelegt.
Unter CentOS werden zwei separate Methoden zur Kontrolle von KSM genutzt:
ksmtuned
-Dienst - Kontrolliert, optimiert, startet und stoppt denksm
-Dienst in festgelegten Zeitintervallenksm
-Dienst - Startet und stoppt den Linux-Kernel Thread der KSM Methode
HINWEIS - Standardmäßig sind die Dienste ksmtuned
und ksm
nicht aktiv!!!
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Konfiguration
Standardmäßig ist KSM unter CentOS, so eingestellt, dass maximal 1/2 des RAM (Hauptspeicher) Speicher-Seiten geteilt werden können.
Um diese Beschränkung zu erweitern oder sogar aufzuheben, kann in der Konfigurationsdatei:
/etc/sysconfig/ksm
welche standardmäßig wie nachfolgend dargestellt aussieht
# cat /etc/sysconfig/ksm # The maximum number of unswappable kernel pages # which may be allocated by ksm (0 for unlimited) # If unset, defaults to half of total memory # KSM_MAX_KERNEL_PAGES=
Durch das auskommentieren und ändern der letzten Zeile, wie nachfolgend dargestellt, kann die Beschränkung der maximal zu teilenden Speicher-Seiten aufgehoben werden:
# The maximum number of unswappable kernel pages # which may be allocated by ksm (0 for unlimited) # If unset, defaults to half of total memory # Tachtler # default: # KSM_MAX_KERNEL_PAGES= KSM_MAX_KERNEL_PAGES=0
HINWEIS - Ein Neustart des Wirt-System sollte durchgeführt werden!!!
Dienst: ksmtuned
Standardmäßig ist der Dienst ksmtuned
unter CentOS NICHT aktiv.
Konfiguration
Der Dienst ksmtuned
benötigt nachfolgend dargestellte individuelle Konfiguration, um ordnungsgemäß und vor allem optimal arbeiten zu können.
Die dazu zu bearbeitende Konfigurationsdatei befindet sich im Verzeichnis /etc
und hat folgenden Namen:
/etc/ksmtuned.conf
HINWEIS - Die nachfolgend angewandte Konfiguration, ist für einen Server mit 16GB RAM (Hauptspeicher) optimiert!!!
Es wird eine Standard-Konfiguration für Server mit 16GB RAM (Hauptspeicher) als Beispiel mitgeliefert, welches hier auch zum Einsatz kommen soll. Deshalb müssen in diesem Beispiel nur teilweise die Kommentarzeichen # vor den entsprechenden Zeilen entfernt werden, wonach die Konfigurationsdatei dann wie nachfolgend dargestellt aussehen sollte:
# Configuration file for ksmtuned. # How long ksmtuned should sleep between tuning adjustments KSM_MONITOR_INTERVAL=60 # Millisecond sleep between ksm scans for 16Gb server. # Smaller servers sleep more, bigger sleep less. KSM_SLEEP_MSEC=10 KSM_NPAGES_BOOST=300 KSM_NPAGES_DECAY=-50 KSM_NPAGES_MIN=64 KSM_NPAGES_MAX=1250 KSM_THRES_COEF=20 KSM_THRES_CONST=2048 # uncomment the following if you want ksmtuned debug info # LOGFILE=/var/log/ksmtuned # DEBUG=1
HINWEIS - Falls die beiden letzten Zeilen, ebenfalls vom Kommentarstatus befreit werden, wird eine LOG-Datei geschrieben!!!
Dienst starten
Um den Dienst dauerhaft, auch nach einem Neustart des Wirt-Systems, Startbar zu machen, ist nachfolgender Befehl auszuführen:
# chkconfig ksmtuned on
Der eigentliche Start des Dienstes erfolgt durch Ausführen des nachfolgend gezeigten Befehls:
# service ksmtuned start Starting ksmtuned: [ OK ]
Logging aktivieren
Um die Log-Schreibung des ksmtuned
-Dienstes zu aktivieren, muss die Konfigurationsdatei /etc/ksmtuned.conf
noch um ein paar Kommentarzeichen #, wie nachfolgend dargestellt, befreit werden (nur relevanter Ausschnitt):
... # uncomment the following if you want ksmtuned debug info LOGFILE=/var/log/ksmtuned DEBUG=1
Anschließend muss der ksmtuned
-Dienst z.B. mit nachfolgendem Befehl, beendet und neu gestartet werden:
# service ksmtuned restart Stopping ksmtuned: [ OK ] Starting ksmtuned: [ OK ]
Um die Log-Schreibung von des ksmtuned
-Dienstes mit zu verfolgen, kann nachfolgender Befehl genutzt werden:
# tail -f /var/log/ksmtuned Wed Aug 3 11:30:35 CEST 2011: total 16399256 Wed Aug 3 11:30:35 CEST 2011: sleep 10 Wed Aug 3 11:30:35 CEST 2011: thres 3279851 Wed Aug 3 11:31:35 CEST 2011: committed 1408072 free 15132232 Wed Aug 3 11:31:35 CEST 2011: 4687923 < 16399256 and free > 3279851, stop ksm Wed Aug 3 11:32:35 CEST 2011: committed 1408072 free 15132652 Wed Aug 3 11:32:35 CEST 2011: 4687923 < 16399256 and free > 3279851, stop ksm
Um die Verfolgung der Log-Schreibung des ksmtuned
-Dienstes zu beenden, reicht das Drücken der Tastenkombination [Strg/Ctrl+c].
Falls eine dauerhafte Log-Schreibung durchgeführt werden soll, ist das Anwachsen der Log-Dateien langfristig ein Problem. Dieses kann durch das Rotieren einer Log-Datei mitteln Linux-Bordmitteln sehr leicht gelöst werden, wie nachfolgend dargestellt werden soll.
Dazu kann im Verzeichnis
/etc/logrotate.d
eine neue Konfigurationsdatei mit dem Namen
ksmtuned
und nachfolgendem Inhalt angelegt werden:
/var/log/ksmtuned { weekly missingok rotate 4 compress delaycompress copytruncate minsize 100k }
Die Log-Datei /vaer/log/ksmtuned
wird dann wöchentlich mit einer Historie von vier Log-Dateien in komprimierten Zustand rotiert!
Dienst: ksm
Standardmäßig ist auch der Dienst ksm
unter CentOS NICHT aktiv.
Um den Dienst dauerhaft, auch nach einem Neustart des Wirt-Systems, Startbar zu machen, ist nachfolgender Befehl auszuführen:
# chkconfig ksm on
Der eigentliche Start des Dienstes erfolgt durch Ausführen des nachfolgend gezeigten Befehls:
# service ksm start Starting ksm: [ OK ]
Ein Überprüfung ob beide Dienste ksmtuned
und ksm
auch nach einem Neustarte des Wirt-Systems automatisch gestartet werden, kann mit nachfolgend dargestelltem Befehl durchgeführt werden und sollte eine Ausgabe wie die nachfolgende erzeugen:
# chkconfig --list | grep ksm ksm 0:off 1:off 2:off 3:on 4:on 5:on 6:off ksmtuned 0:off 1:off 2:on 3:on 4:on 5:on 6:off
WICHTIG - Zur Systemweiten Aktivierung von KSM, sollte das Wirt-System neu gestartet werden!!!
Dienst Statusabfrage
HINWEIS - Die Statusabfrage des ksm
-Dienstes ist KEINE statische Anzeige !!!
Eine Abfrage von des Status von KSM mit nachfolgendem Befehl:
# cat /sys/kernel/mm/ksm/run 0
wird immer den Wert 0 zurückgeben, wenn nicht gerade im Moment der Abfrage der ksm
-Dienst mit einer Speicheroptimierung beschäftigt ist, was bedeutet, das dieser Wert NICHT einen statischen Statuswert darstellt!
Die möglichen Rückgabewerte können folgende sein:
- 0 - ist gerade nicht aktiv
- 1 - ist gerade aktiv
- 2 - ist gerade aktiv und zerlegt ehemals absolut identische Speicherbereiche
Monitoring
KSM schreibt Performance Daten in nachfolgend bezeichnetes Verzeichnis:
/sys/kernel/mm/ksm/
Die Dateien in diesem Verzeichnis werden direkt durch den Linux-Kernel aktuelle gehalten und stellen Informationen und Statistiken zu KSM zur Verfügung. Nachfolgende Dateien und deren Bedeutung sollen nachfolgend dargestellt werden:
- full_scans - KSM läufe mit voll umfänglichen Suchläufen nach absolut identischen Speicherbereichen im RAM (Hauptspeicher)
- pages_shared - Summe der geteilten Speicher-Seiten
- pages_sharing - Aktuelle Anzahl an geteilten Speicher-Seiten
- pages_to_scan - Anzahl der Speicher-Seiten, welche (noch) nicht durch einen Suchlauf bearbeitet wurden
- pages_unshared - Anzahl der Speicher-Seiten, welche nicht länger geteilt werden
- pages_volatile - Anzahl der Speicher-Seiten, welche unbeständig in der Speicher-Seiten Teilung sind
- run - Kennzeichen in welchem Status der Dienst
ksm
sich gerade in diesem Moment befindet - sleep_millisecs - Zeitintervall in Millisekunden bis zum nächsten Start des Dienstes
ksm
Durch eine einfache Ausgabe mit nachfolgendem Befehl, kann der Inhalt der jeweiligen Datei ausgegeben werden, hier z.B. run
:
# cat /sys/kernel/mm/ksm/run 0