Leistung lokaler SSD optimieren

Lokale SSDs optimieren

In der nach Speichertyp sortierten Leistungstabelle ist die maximal erreichbare Leistung lokaler SSD-Geräte aufgeführt. Damit Ihre Anwendungen und VM-Instanzen diese Geschwindigkeiten erreichen, verwenden Sie die folgenden Best Practices:

Gastumgebung für lokale SSD optimieren

Standardmäßig führen die meisten in Compute Engine bereitgestellten Linux-Images automatisch ein Optimierungsskript aus, das die Instanz für eine maximale Leistung der lokalen SSD konfiguriert. Das Skript aktiviert bestimmte sysfs-Einstellungen für Warteschlangen zur Verbesserung der Gesamtleistung der Maschine. Außerdem maskiert es Interrupt-Anfragen (IRQs) an bestimmte virtuelle CPUs (vCPUs). Dieses Skript optimiert nur die Leistung für lokale Compute Engine-SSD-Geräte.

Ubuntu-, SLES- und andere frühere Images können möglicherweise nicht für diese Leistungsoptimierung konfiguriert werden. Wenn Sie eines dieser Images oder ein älteres Image als v20141218 verwenden, können Sie stattdessen die Gastumgebung installieren, um diese Optimierungen zu aktivieren.

Optimales Image für NVMe- oder SCSI-Schnittstellen auswählen

Lokale SSDs können entweder eine NVMe- oder eine SCSI-Schnittstelle bereitstellen. Die optimale Auswahl richtet sich nach dem verwendeten Betriebssystem. Wählen Sie eine Schnittstelle für Ihre lokalen SSD-Geräte aus, die am besten mit dem Image Ihres Bootlaufwerks arbeitet. Wenn die Instanzen über SCSI-Schnittstellen eine Verbindung zu lokalen SSDs herstellen, können Sie auf dem Gastbetriebssystem das Multi-Queue-SCSI aktivieren, um die Leistung über die SCSI-Schnittstelle zu optimieren.

Multi-Queue-SCSI auf Instanzen mit benutzerdefinierten Images und lokalen SSDs aktivieren

Einige öffentliche Images unterstützen Multi-Queue-SCSI. Wenn Sie Multi-Queue-SCSI für benutzerdefinierte Images benötigen, die Sie in Ihr Projekt importieren, müssen Sie die Funktion selbst aktivieren. Importierte Linux-Images unterstützen Multi-Queue-SCSI ab Kernel-Version 3.19.

Wenn Sie Multi-Queue-SCSI für ein benutzerdefiniertes Image aktivieren möchten, importieren Sie das Image mit aktivierter Gastbetriebssystemfunktion VIRTIO_SCSI_MULTIQUEUE. Fügen Sie dabei der GRUB-Konfiguration einen Eintrag hinzu:

CentOS

Nur für CentOS7

  1. Importieren Sie Ihr benutzerdefiniertes Image mit der API. Beziehen Sie dabei das Element guestOsFeaturesmit dem type-Wert VIRTIO_SCSI_MULTIQUEUE ein.

  2. Erstellen Sie eine Instanz mit Ihrem benutzerdefinierten Image und hängen Sie eine oder mehrere lokale SSDs an.

  3. Stellen Sie über SSH eine Verbindung zu Ihrer Instanz her.

  4. Prüfen Sie den Wert der Datei /sys/module/scsi_mod/parameters/use_blk_mq.

    $ cat /sys/module/scsi_mod/parameters/use_blk_mq
    

    Wenn der Wert dieser Datei Y ist, ist das Multi-Queue-SCSI bereits auf Ihrem importierten Image aktiviert. Ist der Wert der Datei N, fügen Sie scsi_mod.use_blk_mq=Y in den Eintrag GRUB_CMDLINE_LINUX der GRUB-Konfigurationsdatei ein und starten Sie dann das System neu.

    1. Öffnen Sie die GRUB-Konfigurationsdatei /etc/default/grub in einem Texteditor.

      $ sudo vi /etc/default/grub
      
    2. Fügen Sie scsi_mod.use_blk_mq=Y zum Eintrag GRUB_CMDLINE_LINUX hinzu.

      GRUB_CMDLINE_LINUX=" vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16 scsi_mod.use_blk_mq=Y"
      
    3. Speichern Sie die Konfigurationsdatei.

    4. Führen Sie den Befehl grub2-mkconfig aus, um die GRUB-Datei neu zu generieren und die Konfiguration abzuschließen.

      $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      
    5. Starten Sie die Instanz neu.

      $ sudo reboot
      

Ubuntu

  1. Importieren Sie das benutzerdefinierte Image mit der Compute Engine API und schließen Sie ein guestOsFeatures-Element mit dem type-Wert VIRTIO_SCSI_MULTIQUEUE ein.

  2. Erstellen Sie eine Instanz mit Ihrem benutzerdefinierten Image und verwenden Sie die SCSI-Schnittstelle, um eine oder mehrere lokale SSDs anzuhängen.

  3. Stellen Sie über SSH eine Verbindung zu Ihrer Instanz her.

  4. Prüfen Sie den Wert der Datei /sys/module/scsi_mod/parameters/use_blk_mq.

    $ cat /sys/module/scsi_mod/parameters/use_blk_mq
    

    Wenn der Wert dieser Datei Y ist, ist das Multi-Queue-SCSI bereits auf Ihrem importierten Image aktiviert. Ist der Wert der Datei N, fügen Sie scsi_mod.use_blk_mq=Y in den Eintrag GRUB_CMDLINE_LINUX der GRUB-Konfigurationsdatei ein und starten Sie dann das System neu.

    1. Öffnen Sie die GRUB-Konfigurationsdatei sudo nano /etc/default/grub in einem Texteditor.

      $ sudo nano /etc/default/grub
      
    2. Fügen Sie scsi_mod.use_blk_mq=Y zum Eintrag GRUB_CMDLINE_LINUX hinzu.

      GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=Y"
      
    3. Speichern Sie die Konfigurationsdatei.

    4. Führen Sie den Befehl update-grub aus, um die GRUB-Datei neu zu generieren und die Konfiguration abzuschließen.

      $ sudo update-grub
      
    5. Starten Sie die Instanz neu.

      $ sudo reboot
      

Leerung des Schreibcache deaktivieren

Dateisysteme, Datenbanken und andere Anwendungen leeren den Cache, um dafür zu sorgen, dass Daten an verschiedenen Checkpoints durch einen Commit langfristig gespeichert werden. Bei den meisten Speichergeräten ist dieses Standardverhalten sinnvoll. Allerdings sind Schreibcache-Leerungen auf lokalen SSDs ziemlich langsam. Sie können die Schreibleistung einiger Anwendungen erhöhen. Deaktivieren Sie hierzu automatische Leerungsbefehle in diesen Anwendungen bzw. Leerungsoptionen auf der Dateisystemebene.

Lokale SSDs leeren im Cache gespeicherte Schreibvorgänge immer innerhalb von zwei Sekunden ungeachtet der Leerungsbefehle, die Sie für Dateisysteme und Anwendungen festgelegt haben. So können bei temporären Hardwarefehlern nur maximal zwei Sekunden an zwischengespeicherten Schreibvorgängen verloren gehen. Allerdings können dauerhafte Hardwarefehler immer noch zu einem kompletten Datenverlust auf dem Gerät führen, unabhängig davon, ob der Cache geleert wurde. Sichern Sie wichtige Daten daher trotzdem auf nichtflüchtigen Speichern oder in Cloud Storage-Buckets.

Wenn Sie das Leeren von Schreibvorgängen im Cache für Dateisysteme vom Typ ext4 deaktivieren möchten, nehmen Sie die Einstellung nobarrier in die Bereitstellungsoptionen oder in die /etc/fstab-Einträge auf. Beispiel:

$ sudo mount -o discard,defaults,nobarrier /dev/[LOCAL_SSD_ID] /mnt/disks/[MNT_DIR]

Dabei ist [LOCAL_SSD_ID] die Geräte-ID der lokalen SSD, die Sie bereitstellen möchten, und [MNT_DIR] das Verzeichnis für die Bereitstellung.

Benchmarking der lokalen SSD-Leistung

Die im Abschnitt zur Leistung angegebenen Leistungszahlen der lokalen SSD wurden mit spezifischen Einstellungen auf der lokalen SSD-Instanz erreicht. Wenn Ihre Instanz Schwierigkeiten hat, diese Leistungsgrenzen zu erreichen, und Sie die Instanz mit den empfohlenen Einstellungen für die lokale SSD bereits konfiguriert haben, können Sie Ihre Leistungsgrenzen mit den veröffentlichten Grenzen vergleichen, indem Sie die Einstellungen replizieren, die das Compute Engine-Team verwendet hat.

  1. Erstellen Sie je nach Arbeitslast eine lokale SSD-Instanz mit 4 oder 8 vCPUs pro Gerät. Wenn Sie beispielsweise 4 lokale SSD-Geräte an eine Instanz anfügen möchten, verwenden Sie einen Maschinentyp mit 16 oder 32 vCPUs.

    Der folgende Befehl erstellt eine virtuelle Maschine mit 8 vCPUs und einer einzelnen lokalen SSD:

    gcloud compute instances create ssd-test-instance \
    --machine-type "n1-standard-8" \
    --local-ssd interface="SCSI"
    
  2. Führen Sie auf Ihrer VM das folgende Skript aus. Das Skript repliziert die Einstellungen, mit denen Sie die im Bereich "Leistung" angegebenen Leistungszahlen für die SSD erzielen. Der Parameter--bs definiert die Blockgröße, die die Ergebnisse für verschiedene Arten von Lese- und Schreibvorgängen beeinflusst.

    # install dependencies
    sudo apt-get update -y
    sudo apt-get install -y build-essential git libtool gettext autoconf \
    libgconf2-dev libncurses5-dev python-dev fio bison autopoint
    
    # blkdiscard
    git clone https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git
    cd util-linux/
    ./autogen.sh
    ./configure --disable-libblkid
    make
    sudo mv blkdiscard /usr/bin/
    sudo blkdiscard /dev/disk/by-id/google-local-ssd-0
    
    # full write pass - measures write bandwidth with 1M blocksize
    sudo fio --name=writefile --size=100G --filesize=100G \
    --filename=/dev/disk/by-id/google-local-ssd-0 --bs=1M --nrfiles=1 \
    --direct=1 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 \
    --iodepth=200 --ioengine=libaio
    
    # rand read - measures max read IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randread --blocksize=4k --group_reporting
    
    # rand write - measures max write IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
    

Nächste Schritte

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation