Leistung von nichtflüchtigen Speichern optimieren


Nichtflüchtige Speicher liefern die in der Tabelle mit den Speichertypen angegebene Leistung, wenn die VM ausreichend genutzt wird, um die Leistungslimits zu erreichen. Nachdem Sie die Größe der nichtflüchtigen Speicher-Volumes an Ihre Leistungsanforderungen angepasst haben, müssen Sie unter Umständen noch die Anwendung und das Betriebssystem feinabstimmen.

In den folgenden Abschnitten werden einige wichtige Elemente beschrieben, die sich zur Leistungsoptimierung anpassen lassen. Außerdem wird erläutert, wie Sie diese teilweise auf bestimmte Arten von Arbeitslasten anwenden können.

E/A-Warteschlangentiefe

  • Hohe E/A-Warteschlangentiefe verwenden

    Da es sich bei nichtflüchtigen Speichern um Network Attached Storage-Geräte handelt, bieten sie einen sehr hohen IOPS-Wert und Durchsatz. Die Latenz ist jedoch im Vergleich zu physisch angehängten Laufwerken wie herkömmlichen Festplatten und lokalen SSDs höher. Wenn Sie die maximalen IOPS- und Durchsatzlimits des nichtflüchtigen Speichers erreichen möchten, müssen Sie E/A-Anfragen mit ausreichender Parallelität senden, damit die Anwendung nicht durch die Latenz beeinträchtigt wird. Passen Sie die Einstellungen für Ihr Betriebssystem oder Ihre Anwendung so an, dass Sie eine E/A-Warteschlangentiefe von mindestens 32 verwenden.

    Angenommen, die Latenz des nichtflüchtigen SSD-Speichers beträgt 800 Mikrosekunden. Wenn Sie in diesem Fall E/A-Vorgänge sequenziell starten, können Sie höchstens 1.250 IOPS erreichen:

    800 Mikrosekunden pro 1 E/A = 1 Mikrosekunde pro 0,00125 E/As = 1.250 E/As pro Sekunde

    Dies liegt weit unter dem maximalen Limit des Laufwerks von 30.000 IOPS.

E/A-Größe

  • Hohe E/A-Größe verwenden

    Verwenden Sie eine E/A-Größe von mindestens 256 KB, damit die Anwendungsleistung nicht durch IOPS-Limits und Latenz beeinträchtigt wird.

    Verwenden Sie große Stripes für verteilte Dateisystemanwendungen. Eine zufällige E/A-Arbeitslast mit großen Stripes (mindestens 4 MB) erzielt bei nichtflüchtigen Standardspeichern eine hervorragende Leistung, da die Arbeitslast mehrere sequenzielle Stream-Laufwerkszugriffe genau simuliert.

  • Für die Generierung ausreichender E/A-Vorgänge durch die Anwendung sorgen

    Achten Sie darauf, dass Ihre Anwendung genügend E/A-Vorgänge generiert, um die IOPS- und Durchsatzlimits des Laufwerks vollständig zu nutzen. Sehen Sie sich die Messwerte zur Nutzung und Leistung von nichtflüchtigen Speichern in Cloud Monitoring an, um das E/A-Muster Ihrer Arbeitslast besser zu verstehen.

  • Ausreichend verfügbare CPU-Kapazität auf der Instanz bereitstellen, auf der die E/A-Vorgänge generiert werden

    Wenn die VM-Instanz nicht genügend CPU-Kapazität hat, kann die Anwendung die oben angegebenen IOPS nicht verarbeiten. Wir empfehlen eine verfügbare CPU pro 2.000–2.500 IOPS des erwarteten Traffics.

Hohe E/A-Lasten auf einen Span von 50 TB begrenzen

Hinweis: Bei E/A-Lasten wird eine maximale Leistung erzielt, wenn sie auf einen Span von 50 TB begrenzt sind. Spans auf separaten nichtflüchtigen Speichern, die zusammen maximal 50 TB haben, können zu Leistungszwecken als ein Span von 50 TB betrachtet werden. Ein Span bezeichnet einen zusammenhängenden Bereich logischer Blockadressen auf einem einzelnen physischen Laufwerk.

Verzögerte Initialisierung deaktivieren und DISCARD-Befehle aktivieren

Nichtflüchtige Speicher unterstützen DISCARD- oder TRIM-Befehle, mit denen Betriebssysteme die Laufwerke über nicht mehr verwendete Blöcke informieren können. Mithilfe von DISCARD können Laufwerkblöcke vom Betriebssystem als nicht mehr benötigt markiert werden, ohne dass Kosten für die Nullsetzung der Blöcke anfallen.

Bei den meisten Linux-Betriebssystemen aktivieren Sie DISCARD, wenn Sie einen nichtflüchtigen Speicher auf Ihrer Instanz bereitstellen. Windows Server 2012 R2-Instanzen aktivieren DISCARD standardmäßig, wenn ein nichtflüchtiger Speicher bereitgestellt wird.

Das Aktivieren von DISCARD kann die allgemeine Laufzeitleistung steigern und außerdem die Leistung Ihres Laufwerks bei der anfänglichen Bereitstellung beschleunigen. Das Formatieren eines ganzen Laufwerk-Volumes kann zeitaufwendig sein, weshalb "lazy formatting" gängig ist. Der Nachteil ist, dass die Kosten für ein "lazy formatting" oftmals dann bezahlt werden, wenn das Datenvolumen das erste Mal bereitgestellt wird. Durch die Deaktivierung von "lazy initialization" und die Aktivierung von DISCARD-Befehlen erhalten Sie eine schnelle Formatierung und Bereitstellung.

  • Übergeben Sie bei der Formatierung folgende Parameter an mkfs.ext4, um "lazy initialization" zu deaktivieren und DISCARD zu aktivieren:

    -E lazy_itable_init=0,lazy_journal_init=0,discard
    

    Der Parameter lazy_journal_init=0 funktioniert nicht auf Instanzen mit CentOS 6- oder RHEL 6-Images. Formatieren Sie für diese Instanzen nichtflüchtige Speicher ohne diesen Parameter.

    -E lazy_itable_init=0,discard
    
  • Aktivieren Sie DISCARD-Befehle bei der Bereitstellung. Übergeben Sie hierfür das folgende Flag an den Bereitstellungsbefehl:

    -o discard
    

Nichtflüchtige Speicher funktionieren gut, wenn die Option discard aktiviert ist. Optional können Sie doch auch fstrim in regelmäßigen Abständen zusätzlich zur Option oder anstelle der Option discard ausführen. Wenn Sie die Option discard nicht verwenden, führen Sie fstrim aus, bevor Sie einen Snapshot Ihres Laufwerks erstellen. Durch das Trimmen des Dateisystems können Sie kleinere Snapshot-Images erstellen und dadurch die Kosten für deren Speicherung reduzieren.

Readahead-Cache

Zur Verbesserung der E/A-Leistung nutzen Betriebssysteme Techniken wie Readahead. Dabei werden von einer Datei mehr Daten als angefordert in den Arbeitsspeicher gelesen. Es wird davon ausgegangen, dass diese Daten bei nachfolgenden Lesevorgängen benötigen werden. Ein höherer Readahead-Wert erhöht den Durchsatz, allerdings auf Kosten des Arbeitsspeichers und der IOPS-Werte. Ein niedrigerer Readahead-Wert erhöht die IOPS-Werte, jedoch zulasten des Durchsatzes.

Auf Linux-Systemen können Sie den Readahead-Wert mit dem Befehl "blockdev" abrufen und festlegen:

$ sudo blockdev --getra /dev/[DEVICE_ID]
$ sudo blockdev --setra [VALUE] /dev/[DEVICE_ID]

Der Readahead-Wert ist <desired_readahead_bytes> / 512 Byte.

Beispiel: Bei einem 8-MB-Readahead sind 8 MB = 8.388.608 Byte (8 * 1024 * 1024).

8388608 bytes / 512 bytes = 16384

Legen Sie für "blockdev" 16384 fest:

$ sudo blockdev --setra 16384 /dev/[DEVICE_ID]

Freie CPUs

Für das Lesen und Schreiben in nichtflüchtigen Speicher sind CPU-Zyklen auf der VM erforderlich. Wenn Sie sehr hohe, konsistente IOPS-Level erreichen möchten, benötigen Sie freie CPUs für die E/A-Verarbeitung.

IOPS-orientierte Workloads

Datenbanken, ob SQL oder NoSQL, haben Nutzungsmuster mit zufälligem Zugriff auf Daten. Google empfiehlt für IOPS-orientierte Arbeitslasten die folgenden Werte:

  • Werte für E/A-Warteschlangentiefen von 1 pro 400–800 IOPS, bis zu einem Limit von 64 auf großen Volumes

  • Eine freie CPU pro 2.000 zufälligen Lese-IOPS und eine freie CPU pro 2.500 zufälligen Schreib-IOPS

In den Best Practices für MongoDB, Apache Cassandra und andere Datenbankanwendungen werden meist niedrigere Readahead-Werte empfohlen.

Durchsatzorientierte Arbeitslasten

Streamingvorgänge, wie ein Hadoop-Job, profitieren vom schnellen sequenziellen Lesen. Durch höhere E/A-Größen kann sich außerdem die Streamingleistung verbessern.

  • Verwenden Sie eine E/A-Größe von mindestens 256 KB.

  • Verwenden Sie für nichtflüchtige Standardspeicher nach Möglichkeit 8 oder mehr parallele sequenzielle E/A-Streams. Nichtflüchtige Standardspeicher sind so ausgelegt, dass die E/A-Leistung für den sequenziellen Laufwerkszugriff optimiert wird, ähnlich wie bei einer physischen HDD-Festplatte.

  • Anwendung auf großen Laufwerken für einen angemessenen, temporären Datenspeicherort optimieren

    Wenn die Anwendung auf Daten zugreift, die für einen kurzen Zeitraum auf verschiedene Bereiche eines Laufwerks verteilt sind (mehrere hundert GB pro vCPU), wird kein optimaler IOPS-Wert erreicht. Für maximale Leistung müssen Sie den temporären Datenspeicherort optimieren. Berücksichtigen Sie dabei Faktoren wie die Laufwerkfragmentierung und die Zufälligkeit des Zugriffs auf Bereiche des Laufwerks.

  • Achten Sie bei nichtflüchtigen SSD-Speichern darauf, dass der E/A-Planer im Betriebssystem entsprechend Ihren Anforderungen konfiguriert ist.

    Auf Linux-basierten Systemen können Sie den E/A-Planer auf noop festlegen, um die höchste Anzahl von IOPS auf SSD-unterstützten Geräten zu erzielen.

Leistungsmesswerte für nichtflüchtigen Speicher prüfen

Sie können Leistungsmesswerte für nichtflüchtige Speicher in Cloud Monitoring, der integrierten Monitoring-Lösung von Google Cloud, prüfen.

Einige dieser Messwerte sind hilfreich, um nachzuvollziehen, ob und wann Ihre Laufwerke gedrosselt werden. Die Drosselung soll dabei helfen, stoßweise eingehende E/A-Vorgänge auszugleichen. Durch die Drosselung können stoßweise eingehende E/A-Vorgänge über einen bestimmten Zeitraum verteilt werden, sodass die Leistungsgrenzen Ihres Laufwerks erreicht, aber nie überschritten werden können.

Weitere Informationen finden Sie unter Leistungsmesswerte für nichtflüchtigen Speicher prüfen.

Weitere Informationen