במסמך הזה מפורטות שגיאות שיכולות להתרחש כשמשתמשים בדיסקים עם ממשק NVMe (זיכרון מהיר לא נדיף).
אתם יכולים להשתמש בממשק NVMe ל-SSD מקומי ולדיסקים לאחסון מתמיד (Persistent Disk או Google Cloud Hyperdisk). רק בסדרות המכונות החדשות ביותר, כמו Tau T2A, M3, C3, C3D ו-H3, נעשה שימוש בממשק NVMe עבור Persistent Disk. ב-Confidential VMs נעשה שימוש גם ב-NVMe ל-Persistent Disk. כל שאר סדרות המכונות של Compute Engine משתמשות בממשק הדיסק SCSI עבור דיסקים קשיחים.
שגיאה – תם הזמן הקצוב לתפוגה של פעולת קלט/פלט
אם נתקלים בשגיאות של זמן קצוב לתפוגה של קלט/פלט, יכול להיות שההשהיה חורגת מפרמטר ברירת המחדל של זמן קצוב לתפוגה לפעולות קלט/פלט שנשלחות למכשירי NVMe.
הודעת השגיאה:
[1369407.045521] nvme nvme0: I/O 252 QID 2 timeout, aborting [1369407.050941] nvme nvme0: I/O 253 QID 2 timeout, aborting [1369407.056354] nvme nvme0: I/O 254 QID 2 timeout, aborting [1369407.061766] nvme nvme0: I/O 255 QID 2 timeout, aborting [1369407.067168] nvme nvme0: I/O 256 QID 2 timeout, aborting [1369407.072583] nvme nvme0: I/O 257 QID 2 timeout, aborting [1369407.077987] nvme nvme0: I/O 258 QID 2 timeout, aborting [1369407.083395] nvme nvme0: I/O 259 QID 2 timeout, aborting [1369407.088802] nvme nvme0: I/O 260 QID 2 timeout, aborting ...
הפתרון:
כדי לפתור את הבעיה, צריך להגדיל את הערך של פרמטר הזמן הקצוב לתפוגה.
צופים בערך הנוכחי של פרמטר הזמן הקצוב לתפוגה.
- קובעים באיזה בקר NVMe נעשה שימוש בדיסק לאחסון מתמיד או בכרך Local SSD.
ls -l /dev/disk/by-id
ההגדרה
io_timeoutמוצגת בשניות, עבור הדיסק. מחליפים את מה שכתוב בשדות הבאים:cat /sys/class/nvme/CONTROLLER_ID/NAMESPACE/queue/io_timeout
-
CONTROLLER_ID: המזהה של בקר הדיסק NVMe, לדוגמה,nvme1 -
NAMESPACE: מרחב השמות של דיסק NVMe, לדוגמה,nvme1n1
אם יש לכם רק דיסק אחד שמשתמש ב-NVMe, אתם יכולים להשתמש בפקודה:
cat /sys/class/nvme/nvme0/nvme0n1/queue/io_timeout
-
- קובעים באיזה בקר NVMe נעשה שימוש בדיסק לאחסון מתמיד או בכרך Local SSD.
כדי להגדיל את פרמטר הזמן הקצוב לתפוגה של פעולות קלט/פלט שנשלחות למכשירי NVMe, מוסיפים את השורה הבאה לקובץ
/lib/udev/rules.d/65-gce-disk-naming.rulesואז מפעילים מחדש את המכונה הווירטואלית:KERNEL=="nvme*n*", ENV{DEVTYPE}=="disk", ATTRS{model}=="nvme_card-pd", ATTR{queue/io_timeout}="4294967295"
דיסקים מנותקים עדיין מופיעים במערכת ההפעלה של מופע Compute
במכונות וירטואליות שמשתמשות בגרסת ליבה 6.0 עד 6.2 של Linux, יכול להיות שפעולות שכוללות את שיטת Compute Engine API instances.detachDisk או את הפקודה gcloud compute instances detach-disk לא יפעלו כמצופה.
במסוף Google Cloud המכשיר מוצג כמוסר, במטא נתונים של מופע המחשוב (פקודה compute disks describe) המכשיר מוצג כמוסר, אבל נקודת הטעינה של המכשיר וכל הקישורים הסמליים שנוצרו על ידי כללי udev עדיין גלויים במערכת ההפעלה של האורח.
הודעת השגיאה:
ניסיון לקרוא מהדיסק המנותק במכונה הווירטואלית מוביל לשגיאות קלט/פלט:
sudo head /dev/nvme0n3 head: error reading '/dev/nvme0n3': Input/output error
בעיה:
אימג'ים של מערכות הפעלה שמשתמשים בקרנל Linux 6.0-6.2 אבל לא כוללים תיקון NVMe לא מצליחים לזהות מתי דיסק NVMe מנותק.
הפתרון:
מפעילים מחדש את ה-VM כדי להשלים את תהליך ההסרה של הדיסק.
כדי להימנע מהבעיה הזו, צריך להשתמש במערכת הפעלה עם גרסת ליבת לינוקס שבה הבעיה הזו לא קיימת:
- 5.19 ומעלה
- 6.3 ואילך
אפשר להשתמש בפקודה uname -r במערכת ההפעלה של האורח כדי לראות את גרסת ליבת Linux.
מה השלב הבא?
- מידע נוסף על Persistent Disk
- מידע נוסף על SSD מקומי
- הגדרת דיסקים בהתאם לדרישות הביצועים.
- מידע נוסף על קישורים סימבוליים