מגבלות הביצועים של SSD מקומי שמופיעות בקטע בחירת אפשרות אחסון הושגו באמצעות הגדרות ספציפיות במופע של SSD מקומי. אם המכונה הווירטואלית (VM) שלכם לא מצליחה להגיע למגבלות הביצועים האלה, וכבר הגדרתם את המכונה באמצעות ההגדרות המומלצות של SSD מקומי, אתם יכולים להשוות את מגבלות הביצועים שלכם למגבלות שפורסמו. כדי לעשות את זה, צריך לשכפל את ההגדרות שבהן השתמש צוות Compute Engine.
ההוראות האלה מבוססות על ההנחה שאתם משתמשים במערכת הפעלה Linux עם מנהל החבילות apt.
יצירת מכונה וירטואלית עם מכשיר SSD מקומי אחד
מספר כונני ה-SSD המקומיים שיכולים להיות למכונה וירטואלית מבוסס על סוג המכונה שמשמש ליצירת המכונה הווירטואלית. פרטים נוספים מופיעים במאמר בנושא בחירת מספר תקין של התקני SSD מקומיים.
יוצרים מופע של SSD מקומי עם ארבעה או שמונה ליבות vCPU לכל מכשיר, בהתאם לעומס העבודה.
לדוגמה, הפקודה הבאה יוצרת מכונת C3 וירטואלית עם 4 מעבדים וירטואליים ו-SSD מקומי אחד.
gcloud compute instances create c3-ssd-test-instance \ --machine-type "c3-standard-4-lssd"במכונות וירטואליות מסוגים מהדור השני ומדורות קודמים, מציינים את מספר ה-SSD המקומי לצירוף למכונה הווירטואלית באמצעות הדגל
--local-ssd. הפקודה הבאה יוצרת מכונת N2 VM עם 8 ליבות vCPU ו-SSD מקומי אחד שמשתמש בממשק הדיסק NVMe:gcloud compute instances create ssd-test-instance \ --machine-type "n2-standard-8" \ --local-ssd interface=nvmeמריצים את הסקריפט הבא במכונת ה-VM. הסקריפט משכפל את ההגדרות ששימשו להשגת נתוני הביצועים של ה-SSD שמופיעים בקטע הביצועים. הערה: הפרמטר
--bsמגדיר את גודל הבלוק, שמשפיע על התוצאות של סוגים שונים של פעולות קריאה וכתיבה.# 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
יצירת מכונה וירטואלית עם המספר המקסימלי של SSD מקומי
אם רוצים לצרף 24 או יותר מכשירי Local SSD למופע, צריך להשתמש בסוג מכונה עם 32 או יותר ליבות vCPU.
הפקודות הבאות יוצרות מכונת VM עם המספר המקסימלי המותר של דיסקי SSD מקומיים באמצעות ממשק NVMe:
צירוף אחסון SSD מקומי למכונה וירטואלית
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
בסדרות מכונות חדשות יותר מוצעים
-lssdסוגי מכונות שמגיעים עם מספר מוגדר מראש של דיסקים מסוג Local SSD. לדוגמה, כדי להשוות ביצועים של מכונה וירטואלית עם 32 כונני SSD מקומיים (קיבולת של 12TiB), משתמשים בפקודה הבאה:gcloud compute instances create ssd-test-instance \ --machine-type "c3-standard-176-lssd"מתקינים את הכלי
mdadm. תהליך ההתקנה שלmdadmכולל הנחיה למשתמש שמפסיקה את הסקריפטים, לכן צריך להריץ את התהליך באופן ידני:Debian ו-Ubuntu
sudo apt update && sudo apt install mdadm --no-install-recommendsCentOS ו-RHEL
sudo yum install mdadm -ySLES ו-openSUSE
sudo zypper install -y mdadmמשתמשים בפקודה
findכדי לזהות את כל כונני ה-SSD המקומיים שרוצים לטעון יחד:find /dev/ | grep google-local-nvme-ssdהפלט אמור להיראות כך:
/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לא מבטיח הזמנה. אין בעיה אם המכשירים מופיעים בסדר שונה, כל עוד מספר שורות הפלט תואם למספר המחיצות הצפוי של ה-SSD.אם משתמשים במכשירי SCSI, משתמשים בפקודה
findהבאה:find /dev/ | grep google-local-ssd
כל מכשירי NVMe צריכים להיות בפורמט
google-local-nvme-ssd-#וכל מכשירי SCSI צריכים להיות בפורמטgoogle-local-ssd-#.משתמשים בכלי
mdadmכדי לשלב כמה מכשירי SSD מקומיים במערך אחד בשם/dev/md0. בדוגמה הבאה, מתבצע מיזוג של 24 מכשירי SSD מקומיים שמשתמשים בממשק NVMe. במכשירי SSD מקומיים שמשתמשים ב-SCSI, משתמשים בשמות המכשירים שמוחזרים מהפקודהfindבשלב 3.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התגובה אמורה להיראות כך:
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.אפשר לאשר את פרטי המערך באמצעות
mdadm --detail. הוספת הדגל--prefer=by-idתציג את רשימת המכשירים באמצעות הנתיבים/dev/disk/by-id.sudo mdadm --detail --prefer=by-id /dev/md0הפלט שמתקבל עבור כל מכשיר במערך אמור להיראות כך:
... Number Major Minor RaidDevice State 0 259 0 0 active sync /dev/disk/by-id/google-local-nvme-ssd-0 ...מריצים את הסקריפט הבא במכונת ה-VM. הסקריפט משכפל את ההגדרות ששימשו להשגת נתוני הביצועים של ה-SSD שמופיעים בקטע הביצועים. הפרמטר
--bsמגדיר את גודל הבלוק, שמשפיע על התוצאות של סוגים שונים של פעולות קריאה וכתיבה.# 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=48 --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=48 --rw=randwrite --blocksize=4k --group_reporting --norandommap
השוואה לשוק של מכונות וירטואליות עם אופטימיזציה לאחסון
צריך להשוות ביצועים של מכונות וירטואליות שעברו אופטימיזציה לאחסון (כמו Z3 Family) ישירות למחיצות במכשיר. אפשר לקבל את שמות המחיצות באמצעות
lsblklsblk -o name,size -lpn | grep 2.9T | awk '{print $1}'הפלט אמור להיראות כך:
/dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1 /dev/nvme8n1 /dev/nvme9n1 /dev/nvme10n1 /dev/nvme11n1 /dev/nvme12n1
מריצים את נקודות ההשוואה ישירות מול מחיצות ה-SSD המקומיות, ומפרידים ביניהן באמצעות נקודתיים.
# 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