Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:virtualisierung_kernel_samepage_merging

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 den ksm-Dienst in festgelegten Zeitintervallen
  • ksm-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

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/virtualisierung_kernel_samepage_merging.txt · Zuletzt geändert: 2012/05/08 22:36 von klaus