Die im Abschnitt Speicheroption auswählen angegebenen Leistungsgrenzen für die lokale SSD wurden mit spezifischen Einstellungen auf der lokalen SSD-Instanz erreicht. Wenn Ihre VM-Instanz (virtuelle Maschine) 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. Replizieren Sie dazu die Einstellungen, die das Compute Engine-Team verwendet hat.
In dieser Anleitung wird davon ausgegangen, dass Sie ein Linux-Betriebssystem verwenden, auf dem der Paketmanager apt
installiert ist.
VM mit einem lokalen SSD-Gerät erstellen
Die Anzahl der lokalen SSDs, die eine VM haben kann, basiert auf dem Maschinentyp, den Sie zum Erstellen der VM verwenden. Weitere Informationen finden Sie unter Gültige Anzahl lokaler SSDs auswählen.
Erstellen Sie je nach Arbeitslast eine lokale SSD-Instanz mit 4 oder 8 vCPUs pro Gerät.
Mit dem folgenden Befehl wird beispielsweise eine C3-VM mit 4 vCPUs und einer lokalen SSD erstellt.
gcloud compute instances create c3-ssd-test-instance \ --machine-type "c3-standard-4-lssd"
Bei Maschinentypen der zweiten Generation und frühere Maschinentypen geben Sie die Anzahl der lokalen SSD mit dem Flag
--local-ssd
an, die an die VM angehängt werden soll. Mit dem folgenden Befehl wird eine N2-VM mit 8 vCPUs und 1 lokalen SSD erstellt, die die NVMe-Laufwerkschnittstelle verwendet:gcloud compute instances create ssd-test-instance \ --machine-type "n2-standard-8" \ --local-ssd interface=nvme
Führen Sie auf Ihrer VM das folgende Script 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 tools sudo apt-get -y update sudo apt-get install -y fio util-linux # discard Local SSD sectors sudo blkdiscard /dev/disk/by-id/google-local-nvme-ssd-0 # full write pass - measures write bandwidth with 1M blocksize sudo fio --name=writefile \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --bs=1M --nrfiles=1 \ --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \ --iodepth=128 --ioengine=libaio # rand read - measures max read IOPS with 4k blocks sudo fio --time_based --name=readbenchmark --runtime=30 --ioengine=libaio \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --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=writebenchmark --runtime=30 --ioengine=libaio \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
VM mit der maximalen Anzahl lokaler SSDs erstellen
Wenn Sie einer Instanz mehr als 24 lokale SSD-Geräte hinzufügen möchten, verwenden Sie einen Maschinentyp mit 32 oder mehr vCPUs.
Mit den folgenden Befehlen erstellen Sie eine VM mit der maximal zulässigen Anzahl von lokalen SSD-Laufwerken über die NVMe-Schnittstelle:
Lokale SSD an VM anhängen
gcloud compute instances create ssd-test-instance \ --machine-type "n1-standard-32" \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme
-lssd-Maschinentypen verwenden
Neuere Maschinenserien bieten
-lssd
-Maschinentypen mit einer vordefinierten Anzahl lokaler SSD-Laufwerke. Verwenden Sie beispielsweise den folgenden Befehl, um eine VM mit 32 lokalen SSDs (Kapazität 12 TiB) zu erstellen:gcloud compute instances create ssd-test-instance \ --machine-type "c3-standard-176-lssd"
Sie haben das
mdadm
-Tool installiert. Der Installationsprozess fürmdadm
enthält eine Eingabeaufforderung, mit der Skripts angehalten werden. Führen Sie den Prozess daher manuell aus.Debian und Ubuntu
sudo apt update && sudo apt install mdadm --no-install-recommends
CentOS und RHEL:
sudo yum install mdadm -y
SLES und openSUSE:
sudo zypper install -y mdadm
Verwenden Sie den Befehl
find
, um alle lokalen SSDs zu identifizieren, die zusammen bereitgestellt werden sollen.find /dev/ | grep google-local-nvme-ssd
Die Ausgabe sieht dann ungefähr so aus:
/dev/disk/by-id/google-local-nvme-ssd-23 /dev/disk/by-id/google-local-nvme-ssd-22 /dev/disk/by-id/google-local-nvme-ssd-21 /dev/disk/by-id/google-local-nvme-ssd-20 /dev/disk/by-id/google-local-nvme-ssd-19 /dev/disk/by-id/google-local-nvme-ssd-18 /dev/disk/by-id/google-local-nvme-ssd-17 /dev/disk/by-id/google-local-nvme-ssd-16 /dev/disk/by-id/google-local-nvme-ssd-15 /dev/disk/by-id/google-local-nvme-ssd-14 /dev/disk/by-id/google-local-nvme-ssd-13 /dev/disk/by-id/google-local-nvme-ssd-12 /dev/disk/by-id/google-local-nvme-ssd-11 /dev/disk/by-id/google-local-nvme-ssd-10 /dev/disk/by-id/google-local-nvme-ssd-9 /dev/disk/by-id/google-local-nvme-ssd-8 /dev/disk/by-id/google-local-nvme-ssd-7 /dev/disk/by-id/google-local-nvme-ssd-6 /dev/disk/by-id/google-local-nvme-ssd-5 /dev/disk/by-id/google-local-nvme-ssd-4 /dev/disk/by-id/google-local-nvme-ssd-3 /dev/disk/by-id/google-local-nvme-ssd-2 /dev/disk/by-id/google-local-nvme-ssd-1 /dev/disk/by-id/google-local-nvme-ssd-0
find
garantiert keine Reihenfolge. Die Geräte können auch in einer anderen Reihenfolge aufgelistet werden, solange die Anzahl der Ausgabezeilen der erwarteten Anzahl von SSD-Partitionen entspricht.Wenn Sie SCSI-Geräte verwenden, führen Sie den folgenden
find
-Befehl aus:find /dev/ | grep google-local-ssd
NVMe-Geräte sollten alle das Format
google-local-nvme-ssd-#
und SCSI-Geräte das Formatgoogle-local-ssd-#
haben.Verwenden Sie das
mdadm
-Tool, um mehrere lokale SSD-Geräte zu einem einzigen Array namens/dev/md0
zu kombinieren. Im folgenden Beispiel werden 24 lokale SSD-Geräte zusammengeführt, die die NVMe-Schnittstelle verwenden. Verwenden Sie für lokale SSD-Geräte, die SCSI verwenden, die Gerätenamen, die vom Befehlfind
in Schritt 3 zurückgegeben wurden.sudo mdadm --create /dev/md0 --level=0 --raid-devices=24 \ /dev/disk/by-id/google-local-nvme-ssd-0 \ /dev/disk/by-id/google-local-nvme-ssd-1 \ /dev/disk/by-id/google-local-nvme-ssd-2 \ /dev/disk/by-id/google-local-nvme-ssd-3 \ /dev/disk/by-id/google-local-nvme-ssd-4 \ /dev/disk/by-id/google-local-nvme-ssd-5 \ /dev/disk/by-id/google-local-nvme-ssd-6 \ /dev/disk/by-id/google-local-nvme-ssd-7 \ /dev/disk/by-id/google-local-nvme-ssd-8 \ /dev/disk/by-id/google-local-nvme-ssd-9 \ /dev/disk/by-id/google-local-nvme-ssd-10 \ /dev/disk/by-id/google-local-nvme-ssd-11 \ /dev/disk/by-id/google-local-nvme-ssd-12 \ /dev/disk/by-id/google-local-nvme-ssd-13 \ /dev/disk/by-id/google-local-nvme-ssd-14 \ /dev/disk/by-id/google-local-nvme-ssd-15 \ /dev/disk/by-id/google-local-nvme-ssd-16 \ /dev/disk/by-id/google-local-nvme-ssd-17 \ /dev/disk/by-id/google-local-nvme-ssd-18 \ /dev/disk/by-id/google-local-nvme-ssd-19 \ /dev/disk/by-id/google-local-nvme-ssd-20 \ /dev/disk/by-id/google-local-nvme-ssd-21 \ /dev/disk/by-id/google-local-nvme-ssd-22 \ /dev/disk/by-id/google-local-nvme-ssd-23
Die Antwort ähnelt dem folgenden Beispiel:
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
Sie können die Details des Arrays mit
mdadm --detail
bestätigen. Wenn Sie das Flag--prefer=by-id
hinzufügen, werden die Geräte über die Pfade/dev/disk/by-id
aufgelistet.sudo mdadm --detail --prefer=by-id /dev/md0
Die Ausgabe für jedes Gerät im Array sollte in etwa so aussehen:
... Number Major Minor RaidDevice State 0 259 0 0 active sync /dev/disk/by-id/google-local-nvme-ssd-0 ...
Führen Sie auf Ihrer VM das folgende Script aus. Das Script 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 tools sudo apt-get -y update sudo apt-get install -y fio util-linux # full write pass - measures write bandwidth with 1M blocksize sudo fio --name=writefile \ --filename=/dev/md0 --bs=1M --nrfiles=1 \ --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \ --iodepth=128 --ioengine=libaio # rand read - measures max read IOPS with 4k blocks sudo fio --time_based --name=benchmark --runtime=30 \ --filename=/dev/md0 --ioengine=libaio --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=32 --rw=randread --blocksize=4k --group_reporting --norandommap # rand write - measures max write IOPS with 4k blocks sudo fio --time_based --name=benchmark --runtime=30 \ --filename=/dev/md0 --ioengine=libaio --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=32 --rw=randwrite --blocksize=4k --group_reporting --norandommap
Benchmarking von speicheroptimierten VMs
Speicheroptimierte VMs (wie die Z3-Familie) sollten direkt mit den Gerätepartitionen verglichen werden. Sie können die Partitionsnamen mit
lsblk
abrufen.lsblk -o name,size -lpn | grep 2.9T | awk '{print $1}'
Die Ausgabe sieht dann ungefähr so aus:
/dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1 /dev/nvme8n1 /dev/nvme9n1 /dev/nvme10n1 /dev/nvme11n1 /dev/nvme12n1
Führen Sie die Benchmarks direkt für die lokalen SSD-Partitionen aus. Trennen Sie sie dazu durch Doppelpunkte als Trennzeichen.
# install benchmarking tools sudo apt-get -y update sudo apt-get install -y fio util-linux # Full Write Pass. # SOVM achieves max read performance on previously written/discarded ranges. sudo fio --readwrite=write --blocksize=1m --iodepth=4 --ioengine=libaio \ --direct=1 --group_reporting \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1 # rand read - measures max read IOPS with 4k blocks sudo fio --readwrite=randread --blocksize=4k --iodepth=128 \ --numjobs=4 --direct=1 --runtime=30 --group_reporting --ioengine=libaio \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1 # rand write - measures max write IOPS with 4k blocks sudo fio --readwrite=randwrite --blocksize=4k --iodepth=128 \ --numjobs=4 --direct=1 --runtime=30 --group_reporting --ioengine=libaio \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1