Windows Large Pages

Vor einiger Zeit hatte ich hier über Linux HugePages geschrieben. Die sind ja mittlerweile kein Geheimtipp mehr, und ab Oracle 12.2 lässt sich mit dem DBCA sogar eine Datenbank bei einem RAM > 4GB nur noch mit HugePages anlegen (oder es erscheint die Fehlermeldung „[DBT-11211]“).

Etwas anders scheint es nach meinem Eindruck um die Windows Large Pages bestellt zu sein. Da Oracle jedoch ab 4 GB SGA empfiehlt, auch unter Windows die größeren Speicherseiten zu nutzen, möchte ich hier eine kurze Einführung dazu schreiben.

Was sind Large Pages?

Für eine etwas ausführlichere Beschreibung möchte ich auf meinen früheren Artikel „Linux Huge Pages: Schnellstart“ verweisen und beschränke mich hier nur auf eine kurze Zusammenfassung:

  • In heutigen Rechnerarchitekturen werden Speicherbereiche im RAM von Anwendungen nicht mehr unmittelbar adressiert. Statt dessen wird Anwendungen eine virtuelle Adressierung präsentiert.
  • Diese virtuellen Adressen müssen in „echte“, physische Adressen übersetzt werden. Hierfür gibt es Tabellen im Betriebssystem („Page Tables“) und auch in der CPU, die diese Übersetzung übernehmen.
  • Die Tabellen in den CPUs (Translation Lookaside Buffers, kurz: TLB) haben nur begrenzten Umfang und können i.d.R. nur Bruchteile der kompletten Zuordnungen vorhalten.
  • Je häufiger eine CPU eine solche Zuordnung in ihrem TLB nicht findet („TLB Miss“), umso mehr ist sie damit beschäftigt, diese Zuordnung von Außen nachzuladen.
  • Wählt man daher größere Speicherseiten, so werden die Zuordnungstabellen kleiner und damit die Chance größer, dass die gesuchte Zuordnung im TLB der CPU gefunden wird („TLB Hit“).
  • Unter Windows werden solche großen Speicherseiten „Large Pages“ genannt. Bei 64-Bit x64 Windows sind diese 2MB groß (anstelle von 4 kB Standardgröße), bei 64-Bit Itanium beträgt die Seitengröße 16MB.

Der Druck, Large Pages zu verwenden, ist allerdings nicht so groß wie unter Linux, da Windows ein Thread-Modell nutzt und deshalb die Page Tables nicht für jeden Prozess – sprich: jede Oracle-Session – kopiert werden. Die Verschwendung von RAM für die Page Tables ist also nicht besonders hoch.

Dennoch gilt auch hier, dass CPU-Zyklen eingespart werden können, wenn weniger TLB Misses auftreten. Bei großen SGAs (Oracle hat hier schon mal etwas von 4 GB in den Raum gestellt) sollten Large Pages also verwendet werden.

Einrichtung

  1. Der Windows-Account, der die Datenbank-Dienste betreibt, muss in der Richtlinien-Verwaltung („Local Policy“) das Recht „Speicherseiten im Speicher sperren“ („Lock Pages in Memory“) bekommen.
    Das ist natürlich automatisch der Fall, wenn Oracle unter einem lokalen Admin-Account eingerichtet wurde. Ab Oracle 12 ist es aber üblich, einen spezifischen Account zu verwenden. Ggf. muss dies über eine AD-Richtlinie abgebildet werden.
  2. Mit Regedit unter „HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb12c_home1“ einen neuen String-Wert anlegen:
    • Name: ORA_LPENABLE, um Large Pages für alle Datenbanken zu verwenden, oder
      ORA__LPENABLE für eine bestimmte Datenbank-SID.
    • Wert: 1
  3. Den Dienst „OracleService“ neu starten.
  4. Im Alert Log prüfen, ob Large Pages verwendet werden („Large page enabled : 1“).

Troubleshooting

Wenn ein Windows-Server schon lange läuft, kann dessen RAM bereits so fragmentiert sein, dass nicht mehr genügend zusammenhängende Speicherbereiche gefunden werden, um die nötige Anzahl an Large Pages zu reservieren. Beim Start der Datenbank erscheint dann die Fehlermeldung

ORA-27102: out of memory
OSD-00022: additional error information
O/S-Error: (OS 1450) Insufficient system resources exist to complete the requested service.

Am einfachsten ist es, den Server neu zu starten. Wenn das nicht in Frage kommt, dann können auch die o.g. Registry-Einträge auf „0“ gesetzt werden, um die Instanz(en) wieder mit kleiner Speicherseitengröße zu betreiben.

Referenzen

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s