Wie kann ich den Dateisystem-Cache in Java oder Python nutzen?

Ein aktueller Blog-Post auf der Elasticsearch- Website spricht über die Features ihrer neuen 1.4-Beta-Version.

Ich bin sehr gespannt, wie sie den Dateisystem-Cache nutzen:

Aktuelle Versionen haben Unterstützung für doc-Werte hinzugefügt. Im Wesentlichen bieten die doc-Werte die gleiche Funktion wie die In-Memory-Fielddata, aber sie werden auf die Festplatte zur Indexzeit geschrieben. Der Vorteil, den sie bieten, ist, dass sie sehr wenig Haufen Platz verbrauchen. Doc-Werte werden von der Festplatte gelesen, anstatt aus dem Speicher. Während der Datenträgerzugriff langsam ist, profitieren doc-Werte vom Dateisystem-Cache des Kernels. Der Dateisystem-Cache ist im Gegensatz zum JVM-Heap nicht durch die 32GB-Grenze eingeschränkt. Durch das Verschieben von Felddaten vom Haufen zum Dateisystem-Cache können Sie kleinere Haufen verwenden, die schnellere Müllsammlungen und damit stabilere Knoten bedeuten.

Vor dieser Freigabe waren die Doc-Werte deutlich langsamer als die In-Memory-Fielddata. Die Änderungen in dieser Version haben die Leistung deutlich verbessert, so dass sie fast so schnell wie In-Memory-Fielddata.

Bedeutet dies, dass wir das Verhalten des Dateisystem-Cache manipulieren können, anstatt auf den Effekt aus dem OS passiv zu warten? Wenn es der Fall ist, wie können wir den Dateisystem-Cache bei normaler Anwendungsentwicklung nutzen? Sagen Sie, wenn ich ein Python– oder Java-Programm schreibe, wie kann ich das machen?

One Solution collect form web for “Wie kann ich den Dateisystem-Cache in Java oder Python nutzen?”

Der Dateisystem-Cache ist ein Implementierungsdetail, das sich auf OS-Innenarbeiten bezieht, die für den Endbenutzer transparent sind. Es ist nicht etwas, das Anpassungen oder Änderungen braucht. Lucene nutzt bereits den Dateisystem-Cache, wenn er die Indexsegmente verwaltet. Jedes Mal, wenn etwas in Lucene indiziert wird (über Elasticsearch), werden diese Dokumente in Segmente geschrieben, die zuerst in den Dateisystem-Cache geschrieben werden und dann nach einiger Zeit (wenn das Translog – ein Weg, um die Verfolgung von Dokumenten zu indizieren – ist Voll zum Beispiel) wird der Inhalt des Caches in eine aktuelle Datei geschrieben. Aber während die zu indizierenden Dokumente im Dateisystem-Cache sind, können sie noch aufgerufen werden.

Diese Verbesserung der doc-Wert-Implementierung bezieht sich auf diese Funktion, um den Dateisystem-Cache jetzt nutzen zu können, da sie von der Festplatte gelesen, in den Cache gelegt und von dort abgerufen werden, anstatt den Heap-Space aufzunehmen.

Wie dieser Dateisystem-Cache zugänglich ist, wird in diesem hervorragenden Blog-Post beschrieben :

In unseren bisherigen Ansätzen haben wir uns darauf verlassen, einen Syscall zu verwenden, um die Daten zwischen dem Dateisystem-Cache und unserem lokalen Java-Heap zu kopieren. Wie wäre es mit dem direkten Zugriff auf den Dateisystem-Cache? Das ist, was mmap tut!

Grundsätzlich macht mmap das gleiche wie die Handhabung des Lucene-Index als Swap-Datei. Der mmap () syscall teilt dem O / S-Kernel mit, dass er unsere ganzen Indexdateien virtuell in den zuvor beschriebenen virtuellen Adressraum einbindet und sie nach unserem Lucene-Prozess wie RAM aussieht. Wir können dann auf unsere Indexdatei auf der Festplatte zugreifen, genauso wie es wäre ein großes Byte [] Array (in Java ist dies durch eine ByteBuffer Schnittstelle gekapselt, um es sicher für die Verwendung durch Java-Code). Wenn wir auf diesen virtuellen Adressraum aus dem Lucene-Code zugreifen, brauchen wir keine Syscalls zu machen, die MMU und TLB des Prozessors behandeln alle Mapping für uns. Wenn die Daten nur auf der Festplatte sind, wird die MMU einen Interrupt verursachen und der O / S-Kernel lädt die Daten in den Dateisystem-Cache. Wenn es sich bereits im Cache befindet, markiert MMU / TLB es direkt im physischen Speicher im Dateisystem-Cache.

Im Zusammenhang mit der tatsächlichen Mittel der Verwendung von mmap in einem Java-Programm, ich denke, das ist die Klasse und Methode, dies zu tun .

  • Aktualisieren eines Python-Wörterbuchs beim Hinzufügen zu vorhandenen Schlüsseln?
  • Warum ist `Time.utc` langsamer in einem gegabelten Prozess in Ruby auf OS X (und nicht in Python)?
  • Python prime numbers Sieve von Eratosthenes
  • Vergleichsweise langsame Python-Numpy 3D Fourier Transformation
  • Pythons Multiprocessing: Beschleunigung einer For-Loop für mehrere Sätze von Parametern, "apply" vs. "apply_async"
  • Ist es möglich, python IO zu beschleunigen?
  • Wie kann ich meinen Python-Code schneller laufen lassen?
  • Schnellere Zugehörigkeitsprüfung in Python als Set ()
  • Langsame Leistung von Pandas Zeitstempel vs datetime
  • Effizienzunterschied zwischen dict.has_key und Schlüssel in dict in Python
  • MATLAB doppelt so schnell wie Numpy
  • Python ist die beste Programmiersprache der Welt.