Keine Leistungssteigerung bei E / A-intensivem Betrieb nach Symlink zu Ramdisk


7

Wir haben ein System, das mehrere tausend Multi-MB-Dateien transformiert. Nach jedem Schritt in der Transformation wird die Zwischendatei auf die Festplatte geschrieben. Das Konzept ähnelt einer Arbeitsplatte.

Wir haben Hochleistungs-SAS-Laufwerke, die in RAID 6 ausgeführt werden, aber da weder der RAM noch die CPU stark beansprucht werden, vermute ich, dass einer unserer Engpässe darin besteht, die Zwischendateien in das Arbeitsverzeichnis zu schreiben.

Wir haben viel RAM auf diesen Systemen, und RHEL wird mit einem RAM-Laufwerk / dev / shm ausgeliefert. Als schnellen Test habe ich das Arbeitsverzeichnis entfernt und es mit einem Verzeichnis auf dem RAM-Laufwerk verknüpft. Die Leistung war gleich oder etwas schlechter? Wie?

Wird der Leistungsvorteil der Ramdisk dadurch beeinträchtigt, dass Sie auf die Festplatte gehen, um den Symlink zu erhalten?

Ich habe dies in einigen Szenarien getestet, in denen ich weiß, dass wir mehr als 10 GB Daten (das Maximum der Java-VM) berührt haben und es daher nicht zwischengespeichert werden sollte.

Was fehlt mir hier?


Wenn Sie Java verwenden, um die Arbeit zu erledigen, und die Quelle haben, werfen Sie einen Blick auf Optimieren der Java-E / A-Leistung oder ähnliche Artikel.
Brian

Antworten:


7

Was Sie vermissen, ist, dass Dateischreibvorgänge fast immer nicht blockieren. Solange das Betriebssystem über ausreichend Speicher verfügt, wird beim Schreiben einer Datei nur in den Speicher geschrieben. Das Betriebssystem löscht diese Schreibvorgänge auf die Festplatte, da es über die entsprechenden Ressourcen verfügt. Da Sie über viel RAM verfügen, kleine Dateien schreiben und über eine schnelle Festplatte verfügen, muss Ihre Anwendung wahrscheinlich fast nie auf den Abschluss der Schreibvorgänge warten.

Als vollständige Vermutung würde ich denken, dass Ihre Anwendungsarchitektur tatsächlich eingeschränkt ist. Sie sagen, dass die CPU nicht viel zu tun hat, aber das bedeutet wahrscheinlich, dass Ihre Anwendung zu grob ist, um einen Großteil der Ressourcen Ihrer CPU zu nutzen. Wenn Ihre CPU beispielsweise über 8 Kerne verfügt, Ihre Anwendungsarchitektur jedoch aus einem einzelnen Prozess und einem einzelnen Thread besteht, kann nur ein Kern verwendet werden.


Ehrlich gesagt denke ich, dass dies der Fall ist. Ich wollte auf jeden Fall versuchen, eine zusätzliche Leistung zu erzielen, wenn dies möglich ist, ohne die erforderliche Neuarchitektur. Danke David! Ich werde das als Antwort nehmen.
MattPark
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.