Übersicht über das Caching in Cloud Storage FUSE

Cloud Storage FUSE bietet vier Arten von optionalem Caching, um die Leistung des Datenabrufs zu erhöhen:

Datei-Caching – Übersicht

Der Cloud Storage FUSE-Dateicache ist ein clientbasierter Lese-Cache, der wiederholte Dateilesevorgänge aus einem schnelleren Cache-Speicher Ihrer Wahl bereitstellt.

Vorteile des Datei-Caching

  • Verbesserte Leistung: Datei-Caching verbessert Latenz und Durchsatz, da Lesevorgänge direkt aus den Cache-Medien bereitgestellt werden. Kleine und zufällige E/A-Vorgänge können erheblich schneller sein, wenn sie aus dem Cache bereitgestellt werden.

  • Vorhandene Kapazität nutzen: Beim Datei-Caching kann die vorhandene bereitgestellte Maschinenkapazität für das Cache-Verzeichnis verwendet werden, ohne dass zusätzlicher Speicher in Rechnung gestellt wird. Hierzu gehören lokale SSDs, die im Lieferumfang von Cloud GPU-Maschinentypen enthalten sind, z. B. a2-ultragpu und a3-highgpu, Persistent Disk (also das Bootlaufwerk, das von jeder VM verwendet wird) oder In-Memory-/tmpfs.

  • Reduzierte Gebühren: Cache-Treffer werden lokal bereitgestellt und es fallen keine Cloud Storage-Vorgangs- oder Netzwerkgebühren an.

  • Verbesserte Gesamtbetriebskosten für KI- und ML-Training: Datei-Caching erhöht die Cloud-GPUs und die Cloud TPU-Auslastung, da Daten schneller geladen werden, was die Trainingszeit verkürzt und ein höheres Preis-Leistungs-Verhältnis für KI- und ML-Trainingsarbeitslasten bietet.

Dateicache aktivieren und konfigurieren

Der Datei-Cache ist standardmäßig deaktiviert und kann mit einer Cloud Storage FUSE-Konfigurationsdatei aktiviert und konfiguriert werden. Sie können das Caching-Verhalten mit den folgenden Feldern steuern:

  • max-size-mb: steuert die maximale Kapazität im Cache-Verzeichnis, die im Cache gespeicherte Daten belegen können. Das Feld max-size-mb ist standardmäßig so konfiguriert, dass die im Cache gespeicherten Daten wachsen können, bis sie die gesamte verfügbare Kapazität im Cacheverzeichnis belegen.

  • cache-dir: Gibt ein Verzeichnis zum Speichern von Dateicache-Daten an. Die Angabe eines Cache-Verzeichnisses ist eine Voraussetzung für die Aktivierung des Dateicaches.

  • ttl-secs: Bestimmt, wann im Cache gespeicherte Daten veraltet sind und aus Cloud Storage aktualisiert werden müssen. Das Feld ttl-secs ist standardmäßig so eingestellt, dass es nach 60 Sekunden Inaktivität in Cloud Storage abläuft und aktualisiert wird. Wir empfehlen, diesen Wert zu erhöhen.

    Informationen zum Steuern der Cachedaten-Entwertung finden Sie unter Cachedaten-Entwertung konfigurieren. Weitere Informationen zur Bereinigung von im Cache gespeicherten Daten finden Sie unter Bereinigung.

  • enable-parallel-downloads: Beschleunigt die Leseleistung für große Dateien über 1 GB, einschließlich erstmaliger Lesevorgänge, indem mehrere Worker zum parallelen Herunterladen einer Datei mit dem Datei-Cache-Verzeichnis als Prefetch verwendet werden. Zwischenspeicher Wir empfehlen, parallele Downloads für die Bereitstellung und die Wiederherstellung von Checkpoints zu aktivieren. Weitere Informationen zum Aktivieren und Konfigurieren paralleler Downloads finden Sie unter Parallele Downloads konfigurieren.

Zufällige und teilweise Lesevorgänge

Wenn der erste Dateilesevorgang am Anfang der Datei (dem Offset 0) beginnt, nimmt der Cloud Storage FUSE-Dateicache die gesamte Datei auf und lädt sie in den Cache, auch wenn Sie nur aus einer kleinen Bereichsuntergruppe lesen. Dadurch können nachfolgende zufällige oder partielle Lesevorgänge aus demselben Objekt direkt aus dem Cache bereitgestellt werden.

Wenn der erste Lesevorgang einer Datei von einem anderen Ort als dem Offset 0 beginnt, löst Cloud Storage FUSE standardmäßig keinen asynchronen vollständigen Dateiabruf aus. Um dieses Verhalten zu ändern, sodass Cloud Storage FUSE bei einem ersten zufälligen Lesevorgang eine Datei in den Cache aufnimmt, setzen Sie das Flag cache-file-for-range-read auf true. Wir empfehlen, das Flag cache-file-for-range-read zu aktivieren, wenn viele verschiedene zufällige oder partielle Lesevorgänge für dasselbe Objekt ausgeführt werden.

Bereinigung

Das Entfernen von im Cache gespeicherten Metadaten und Daten basiert auf einem am weitesten in der Vergangenheit verwendeten (LRU)-Algorithmus, der beginnt, sobald der pro max-size-mb-Limit konfigurierte Speicherplatzgrenzwert erreicht ist. Wenn der Eintrag basierend auf seiner TTL abläuft, wird zuerst ein Get-Metadatenaufruf an Cloud Storage ausgeführt, der Netzwerklatenzen unterliegt. Da die Daten und Metadaten separat verwaltet werden, kann es sein, dass eine Entität entfernt oder ungültig wird und die andere nicht.

Leistung

Das Caching von Cloud Storage FUSE funktioniert mit jedem benutzerdefinierten Verzeichnis, das durch den von Ihnen ausgewählten Speicher gesichert ist, z. B. lokale SSD, nichtflüchtiger Speicher, In-Memory-tmpfs oder Filestore. Die Cache-Leistung von Cloud Storage FUSE entspricht mit minimalem Aufwand dem zugrunde liegenden Speicher, der vom Cache verwendet wird.

Achten Sie darauf, dass Ihr gesamtes Dataset in die Cache-Kapazität passt, um eine optimale Leistung zu erzielen und Cache-Seitenflattern zu vermeiden. Berücksichtigen Sie auch die maximale Kapazität und Leistung, die Ihre Cache-Medien bieten können. Wenn Sie die maximale Leistung oder das Kapazitätslimit des bereitgestellten Caches oder beides erreichen, ist es sinnvoll, direkt aus Cloud Storage zu lesen, da dort viel höhere Limits gelten als bei Cloud Storage FUSE.

Persistenz

Cloud Storage FUSE-Caches werden beim Trennen und Neustarten nicht beibehalten. Beim Datei-Caching werden die Metadateneinträge, die zum Bereitstellen von Dateien aus dem Cache erforderlich sind, beim Aushängen und Neustarten entfernt. Die Daten im Dateicache befinden sich jedoch möglicherweise noch im Dateiverzeichnis. Sie sollten Daten im Dateicache-Verzeichnis nach dem Trennen oder Neustarten löschen.

Sicherheit

Wenn Sie das Caching aktivieren, verwendet Cloud Storage FUSE das Cache-Verzeichnis, das Sie im Feld cache-dir als zugrunde liegendes Verzeichnis für den Cache angegeben haben, um Dateien aus Ihrem Cloud Storage-Bucket in einem unverschlüsselten Format zu speichern. Jeder Nutzer oder Prozess, der Zugriff auf dieses Cache-Verzeichnis hat, kann auf diese Dateien zugreifen. Wir empfehlen, den Zugriff auf dieses Verzeichnis einzuschränken.

Direkter oder Mehrfachzugriff auf den Dateicache

Die Verwendung eines anderen Prozesses als Cloud Storage FUSE für den Zugriff auf oder die Änderung einer Datei im Cache-Verzeichnis kann zu Datenbeschädigungen führen. Cloud Storage FUSE-Caches sind für jeden ausgeführten Cloud Storage FUSE-Prozess spezifisch, ohne Kenntnis der verschiedenen Cloud Storage FUSE-Prozesse, die auf demselben oder verschiedenen Computern ausgeführt werden. Daher empfehlen wir, dasselbe Cache-Verzeichnis nicht für verschiedene Cloud Storage FUSE-Prozesse zu verwenden.

Wenn mehrere Cloud Storage FUSE-Prozesse auf demselben Computer ausgeführt werden müssen, sollte jeder Cloud Storage FUSE-Prozess ein eigenes spezifisches Cache-Verzeichnis erhalten oder eine der folgenden Methoden verwenden, um sicherzustellen, dass Ihre Daten nicht beschädigt werden:

  • Alle Buckets mit einem freigegebenen Cache bereitstellen: Verwenden Sie die dynamische Bereitstellung, um alle Buckets, auf die Sie Zugriff haben, in einem einzigen Prozess mit einem freigegebenen Cache bereitzustellen. Weitere Informationen finden Sie unter Dynamische Bereitstellung von Cloud Storage FUSE.

  • Caching für einen bestimmten Bucket aktivieren: Sie können das Caching nur für einen bestimmten Bucket mithilfe der statischen Bereitstellung aktivieren. Weitere Informationen finden Sie unter Statische Bereitstellung von Cloud Storage FUSE.

  • Nur einen bestimmten Ordner oder ein bestimmtes Verzeichnis im Cache speichern: Anstatt einen ganzen Bucket bereitzustellen, können Sie mit der -Option nur einen bestimmten Ordner auf Bucket-Ebene bereitstellen und im Cache speichern. Weitere Informationen finden Sie unter Verzeichnis in einem Bucket bereitstellen.

Caching von Statistiken

Der Statistik-Cache von Cloud Storage FUSE ist ein Cache für Objektmetadaten, der die Leistung für Vorgänge verbessert, die für Dateiattribute spezifisch sind, z. B. Größe, Änderungszeit oder Berechtigungen. Die Verwendung des Statistik-Cache verbessert die Latenz, da die im Cache gespeicherten Daten zum Ausführen von Vorgängen verwendet werden, anstatt eine Statistik-Objektanfrage an Cloud Storage zu senden. Weitere Informationen zum Statistik-Caching finden Sie in der Semantik-Dokumentation auf GitHub.

Der Statistik-Cache ist standardmäßig aktiviert und kann mit einer Cloud Storage FUSE-Konfigurationsdatei konfiguriert werden. Die maximale Größe des Caches wird durch das Feld stat-cache-max-size-mb gesteuert, das den Standardwert 32 (32 MB) hat. Die TTL des Cache wird über das Feld ttl-secs gesteuert, das den Standardwert 60 (60 Sekunden) hat.

Best Practices

Für das Statistik-Caching empfehlen wir den Standardwert 32 für das Feld stat-cache-max-size-mb, wenn Ihre Arbeitslast bis zu 20.000 Dateien umfasst. Wenn Ihre Arbeitslast mehr als 20.000 Dateien enthält, erhöhen Sie den Wert stat-cache-max-size-mb um 10 pro weitere 6.000 Dateien, also etwa 1.500 Byte pro Datei.

stat-cache-max-size-mb ist ein Limit auf Bereitstellungsebene und die tatsächliche Speichernutzung kann niedriger sein als der von Ihnen angegebene Wert. Alternativ können Sie stat-cache-max-size-mb auf -1 setzen, damit der Statistik-Cache so viel Arbeitsspeicher wie nötig verwendet.

Typ-Caching – Übersicht

Der Cache des Cloud Storage FUSE-Typs ist ein Metadaten-Cache, der die Leistung für Metadatenvorgänge beschleunigt, die für das Vorhandensein von Dateien oder Verzeichnissen spezifisch sind. Die Verwendung des Typcache verbessert die Latenz, da die Anzahl der Anfragen an Cloud Storage reduziert wird, um zu prüfen, ob eine Datei oder ein Verzeichnis vorhanden ist, indem diese Informationen lokal gespeichert werden. Weitere Informationen zum Typ-Caching finden Sie in der Semantik-Dokumentation auf GitHub.

Der Typcache ist standardmäßig aktiviert und kann mit einer Cloud Storage FUSE-Konfigurationsdatei konfiguriert werden. Die maximale Größe des Cache wird durch das Feld type-cache-max-size-mb gesteuert, das den Standardwert 4 (4 MB) hat. Die TTL des Cache wird über das Feld ttl-secs gesteuert, das den Standardwert 60 (60 Sekunden) hat.

Best Practices

Für das Typ-Caching empfehlen wir die Verwendung des Standardwerts 4 für das Feld type-cache-max-size-mb, wenn die maximale Anzahl von Dateien in einem einzelnen Verzeichnis aus dem Bucket, den Sie bereitstellen, 20.000 Dateien oder weniger umfasst. “ Wenn die maximale Anzahl von Dateien in einem einzelnen Verzeichnis, das Sie bereitstellen, mehr als 20.000 Dateien enthält, erhöhen Sie den Wert type-cache-max-size-mb um 1 pro 5.000 Dateien, ca. 200 Byte pro Datei.

type-cache-max-size-mb ist ein Limit auf Bereitstellungsebene und die tatsächliche Speichernutzung kann niedriger als der angegebene Wert sein. Alternativ können Sie den Wert type-cache-max-size-mb auf -1 setzen, damit der Typ-Cache so viel Arbeitsspeicher wie nötig verwendet.

Caching-Übersicht auflisten

Der Listen-Cache von Cloud Storage FUSE ist ein Cache für Verzeichnis- und Dateilisten oder ls, Antworten zur Verbesserung der Geschwindigkeit von Listenvorgängen. Das Caching von Listen ist besonders nützlich für Arbeitslasten, die im Rahmen der Ausführung vollständige Verzeichniseinträge wiederholen, z. B. KI/ML-Trainingsläufe.

Der Listen-Cache wird im Arbeitsspeicher des Seitencache gespeichert. Dieser wird vom Kernel basierend auf der Arbeitsspeicherverfügbarkeit gesteuert. Im Gegensatz dazu werden Statistik- und Typ-Caches im Arbeitsspeicher Ihres Computers gespeichert und von Cloud Storage FUSE gesteuert.

Listen-Caching aktivieren

Der Listen-Cache ist standardmäßig deaktiviert. Sie können das Listen-Caching mit dem Feld kernel-list-cache-ttl-secs mit einem der folgenden Werte aktivieren:

  • Ein positiver Wert, der die Gültigkeitsdauer (Time to Live, TTL) in Sekunden darstellt, um die Antwort der Verzeichnisliste im Seitencache des Kernels zu speichern.

  • Der Wert -1, um den Ablauf des Eintrags zu umgehen und die Listenantwort aus dem Cache zurückzugeben, wenn sie verfügbar ist.

Informationen zum Aktivieren und Konfigurieren des Listen-Caching finden Sie in der Cloud Storage FUSE-Konfigurationsdatei.

Cache-Entwertung konfigurieren

In den folgenden Abschnitten wird beschrieben, wie Sie die Cache-Entwertung für alle Cache-Typen konfigurieren.

Datei-, Statistik- und Typ-Cache-Entwertung

Für Datei-, Statistik- und Typ-Caches gibt das Feld ttl-secs die TTL in Sekunden an, für die im Cache gespeicherte Metadaten ab dem Zeitpunkt verwendet werden, zu dem sie aus Cloud Storage abgerufen werden, bis sie ablaufen und aktualisiert werden müssen.

Sie können ttl-secs in einer Cloud Storage FUSE-Konfigurationsdatei konfigurieren.

Das Feld ttl-secs ist standardmäßig auf 60 gesetzt. Wenn Sie einen Wert für ttl-secs angeben, der größer als 0 ist, bleiben die Metadaten für den Dateicache nur für den von Ihnen angegebenen Zeitraum gültig. Für das Datei-Caching empfehlen wir, den Wert ttl-secs basierend auf der erwarteten Zeit zwischen wiederholten Lesevorgängen zu erhöhen, während Sie Konsistenzanforderungen ausgleichen. Abhängig von der Wichtigkeit und Häufigkeit der Datenänderungen empfehlen wir, den Wert ttl-secs so hoch wie möglich für Ihre Arbeitslast festzulegen. Wenn ein Metadateneintrag ungültig wird, werden nachfolgende Lesevorgänge von Cloud Storage abgefragt.

Sie können nicht nur Werte angeben, die eine bestimmte TTL in Sekunden darstellen, bevor die im Cache gespeicherten Metadaten ablaufen und aktualisiert werden müssen. Mit den folgenden Werten können Sie auch angeben, wie die Datei gelesen wird:

  • ttl-secs-Wert von 0: Stellt sicher, dass die Datei mit den neuesten Daten gelesen wird. Dazu wird ein GET-Metadatenaufruf an Cloud Storage gesendet, der Folgendes prüft: Die Datei, aus der sie bereitgestellt wird, um sicherzustellen, dass der Cache konsistent ist. Wenn die Datei im Cache aktuell ist, wird sie direkt aus dem Cache bereitgestellt. Die Angabe eines anderen Werts als 0 kann zu einer geringeren Leistung führen, da immer ein Aufruf an Cloud Storage erfolgen muss, damit zuerst die Metadaten geprüft werden. Befindet sich die Datei im Cache und hat sich nicht geändert, wird die Datei nach dem Metadaten-Aufruf GET mit Konsistenz aus dem Cache bereitgestellt.

  • ttl-secs-Wert von -1: Legt fest, dass die Datei immer aus dem Cache gelesen wird, sofern sie verfügbar ist, ohne auf Konsistenz zu prüfen. Dateien, die ohne Konsistenzprüfung bereitgestellt werden, können inkonsistente Daten liefern. Daher sollten sie nur vorübergehend für Arbeitslasten verwendet werden, die in Jobs mit nicht ändernden Daten ausgeführt werden. Die Verwendung eines Werts von -1 ist beispielsweise für das Training mit maschinellem Lernen nützlich, bei dem dieselben Daten über mehrere Epochen ohne Änderungen gelesen werden.

Cache-Entwertung auflisten

Die Invalidation des Listen-Caches wird festgelegt, indem im Feld kernel-list-cache-ttl-secs ein Wert größer als 0 angegeben wird. Die Antwort der Verzeichnisliste wird auf der Cache-Seite des Kernels gespeichert und bleibt für die von Ihnen angegebene Zeit gültig. Standardmäßig ist der Listen-Cache deaktiviert und auf den Wert 0 festgelegt. Wenn Sie den Wert -1, Cloud Storage FUSE deaktiviert den Listen-Cache-Ablauf und gibt die Listenantwort aus dem Cache zurück, wenn sie verfügbar ist.

Lesepfad für im Cache gespeicherte Daten

Der Cloud Storage FUSE-Cache beschleunigt wiederholte Lesevorgänge, nachdem sie in den Cache aufgenommen wurden. Sowohl erstmalige Lesevorgänge als auch Cache-Fehler werden direkt an Cloud Storage übertragen und unterliegen den normalen Cloud Storage-Netzwerklatenzen.

Bevor Sie Ihre Arbeitslast ausführen, wird empfohlen, dass Sie zuerst die Dateien in Ihrem bereitgestellten Bucket rekursiv auflisten, um die Statistik- und Typ-Caches vorab zu füllen und die Leistung bei der ersten Ausführung mit einer schnelleren Batchmethode zu verbessern:

ls -R MOUNT_POINT > /dev/null

Hinweise

  • Das Aktivieren von Datei-Caching, Statistik-Caching, Typ-Caching oder Listen-Caching kann die Leistung erhöhen, aber die Konsistenz reduzieren. Diese tritt normalerweise auf, wenn Sie auf denselben Bucket mit mehreren Clients mit einer hohen Änderungsrate zugreifen. Um die Auswirkungen auf die Konsistenz zu reduzieren, empfehlen wir, Buckets schreibgeschützt bereitzustellen. Weitere Informationen zum Caching-Verhalten finden Sie in der Dokumentation zur Cloud Storage FUSE-Semantik auf GitHub.

  • Wenn ein Datei-Cache-Eintrag noch nicht anhand seiner TTL abgelaufen ist und sich die Datei im Cache befindet, wird der gesamte Vorgang vom lokalen Client-Cache bereitgestellt, ohne dass eine Anfrage an Cloud Storage gesendet wird.

  • Wenn ein Datei-Cache-Eintrag basierend auf seiner TTL abgelaufen ist, wird zuerst ein "Get-Metadatenaufruf" an Cloud Storage ausgeführt. Wenn sich die Datei nicht im Cache befindet, wird die Datei aus Cloud Storage abgerufen. Beide Vorgänge unterliegen Netzwerklatenzen. Wenn der Metadateneintrag ungültig wurde, sich die Datei jedoch im Cache befindet und sich die Objektgenerierung nicht geändert hat, wird die Datei erst dann vom Cache bereitgestellt, wenn der Aufruf der Metadaten aufgerufen wurde, um zu prüfen, ob die Daten gültig sind.

  • Wenn ein Cloud Storage FUSE-Client eine im Cache gespeicherte Datei oder ihre Metadaten ändert, wird die Datei sofort ungültig und die Konsistenz wird beim folgenden Lesen durch denselben Client gewährleistet. Wenn jedoch verschiedene Clients auf dieselbe Datei oder ihre Metadaten zugreifen und ihre Einträge im Cache gespeichert sind, wird die im Cache gespeicherte Version der Datei oder der Metadaten gelesen und nicht die aktualisierte Version, bis die Datei durch diese bestimmte TTL-Einstellung des jeweiligen Clients entwertet wird.

Nächste Schritte