2016-02-08 3 views
5

Da Neo4j hauptsächlich im Speicher arbeitet, habe ich mich gefragt, ob es vorteilhaft wäre riesige Seiten (https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt) in meinem Linux Kernel zu aktivieren, und dann XX: + UseLargePages oder vielleicht -XX: + UseHugeTLBFS im (OpenJDK 8) JVM?Neo4j und Hugepages

Wenn ja, welche Faustregel sollte ich verwenden, um zu entscheiden, wie viele riesige Seiten konfiguriert werden?

Der Neo4j Performance Guide (http://neo4j.com/docs/stable/performance-guide.html) erwähnt dies nicht, und Google hat niemanden darüber aufgeklärt (auf den ersten paar Suchseiten sowieso), also dachte ich, ich würde fragen.

Ich wrestle, um akzeptable Leistung von meiner neuen Neo4j-Instanz (2.3.2-Community) zu bekommen. Jedes bisschen wird helfen. Ich möchte wissen, ob dies einen Versuch wert ist, bevor ich die Datenbank herunterbringe, um JVM-Flags zu ändern ... Ich hoffe, dass jemand anderes bereits einige Experimente in dieser Richtung durchgeführt hat.

Danke!

Antwort

5

Da Neo4j seinen eigenen Datei-Paging ausführt und sich nicht auf das Betriebssystem verlässt, sollte es vorteilhaft sein oder zumindest nicht verletzen. Riesige Seiten reduzieren die Wahrscheinlichkeit von TLB-Cache-Fehlern, wenn Sie viel Speicher verwenden, was Neo4j gerne tun würde, wenn viele Daten darin gespeichert sind.

Allerdings verwendet Neo4j nicht direkt riesige Seiten, obwohl es könnte und es wäre eine nette Ergänzung. Dies bedeutet, dass Sie sich auf transparente riesige Seiten verlassen müssen und welche Funktionen die JVM bietet. Die transparenten großen Seiten können mehr oder weniger kurze Staus verursachen, wenn kleinere Seiten zusammengeführt werden.

Wenn Sie eine repräsentative Staging-Umgebung haben, empfehle ich Ihnen, die Änderungen zuerst vorzunehmen und deren Effekt zu messen.

Transparente große Seiten sind meist ein Problem für Programme, die mmap verwenden, da ich denke, es ist an der Änderung die Größe der Einheit von IO führen kann, was die hart Pagefault Latenz viel höher machen. Ich bin mir darüber nicht ganz sicher, also korrigiere mich bitte, wenn ich falsch liege.

Die JVM machen eigentlich mmap für Telemetrie und Werkzeuge verwenden, durch eine Datei in /tmp so stellen Sie sicher, dass dieses Verzeichnis auf tmpfs montiert ist knorrige IO Stände zu vermeiden, zum Beispiel während Safe-Punkte (!!!). Tun Sie dies immer, auch wenn Sie keine großen Seiten verwenden.

Stellen Sie außerdem sicher, dass Sie den neuesten Linux-Kernel und die neueste Java-Version verwenden.

Sie können vielleicht einige Prozentpunkte mit Tuning G1 ausdrücken, aber das ist ein bisschen eine schwarze Kunst.

+0

Ok, auf den neueren Ubuntu Linux Systemen ist Transparent HugePages standardmäßig aktiviert. Ich kann sehen, dass ein Haufen zugeteilt wird, wenn ich 'AnonHugePages/proc/meminfo' grepe. Ich kann sehen, dass Neo4j eine Reihe von ihnen bereits 'Grep AnonHugePages/proc/'cat data/neo4j-service.pid'/smaps | verwendet grep -v "0 kB" '. Es scheint also, dass zumindest für mein System zu diesem Zeitpunkt nichts weiter zu tun ist. Danke für die wirklich hilfreiche und informative Antwort! – rotten