הגדרת Simultaneous Multi-Threading‏ (SMT)

בדף הזה מוסבר איך להגדיר ריבוי הליכים בו-זמני באשכולות של Google Kubernetes Engine ‏ (GKE).

סקירה כללית

צמתים של GKE הם מכונות וירטואליות (VM) של Compute Engine ש-GKE יוצר בשבילכם. במכונות הווירטואליות האלה, בדרך כלל ריבוי הליכי משנה בו-זמניים (SMT) מופעל כברירת מחדל. ‫SMT היא היכולת להריץ כמה שרשורים נפרדים בליבה פיזית אחת של מעבד. כש-SMT מופעל, ליבה פיזית אחת יכולה להריץ שני מעבדים וירטואליים (vCPU) כשרשורים נפרדים ועצמאיים. לדוגמה, n2-standard-32צומת GKE מפעיל בפועל 32 מעבדים וירטואליים ב-16 ליבות מעבד פיזיות.

עם ההשקה של אפשרות ההגדרה של SMT בצמתי GKE, אתם יכולים להגדיר SMT כך שמספר ה-vCPU האפקטיבי יהיה שווה למספר הליבות הפיזיות. המשמעות היא שצמתי GKE יכולים להשתמש בליבה הפיזית המלאה לכל vCPU.

יתרונות

הגדרת SMT ב-GKE מספקת את היתרונות הבאים.

ביצועים משופרים

יכול להיות שחלק מעומסי העבודה של מחשוב עתיר ביצועים (HPC) יראו שיפור בביצועים אם תהיה השבתה של SMT. בדרך כלל, במשימות מחשוב כלליות רבות או במשימות שדורשות הרבה קלט/פלט, טכנולוגיית ה-SMT יכולה להגדיל באופן משמעותי את קצב העברת הנתונים של האפליקציה. לעומת זאת, במשימות שמוגבלות על ידי מחשוב, שבהן שני הליבות הווירטואליות מוגבלות על ידי מחשוב, טכנולוגיית SMT עלולה לפגוע בביצועים הכוללים של האפליקציה ולהוסיף שונות לא דטרמיניסטית למשימות. לכן, אם SMT מושבת, יכול להיות שחלק מהאפליקציות של HPC יניבו ביצועים טובים וצפויים יותר.

עלויות רישוי מופחתות

בחלק מהסכמי הרישוי של תוכנות יש מודלים של חיוב שקשורים למספר המעבדים הווירטואליים שנעשה בהם שימוש. השבתת SMT מקטינה בחצי את מספר ה-vCPU לכל ליבה, מה שעשוי להוזיל את עלויות הרישוי. מידע נוסף מופיע בהסכם הרישוי.

בקטע תמחור מוסבר איך Google Cloud מחייבת כשמגדירים SMT.

מגבלות

  • סוגי מכונות: אי אפשר להגדיר SMT בסוגי מכונות עם פחות מ-2 מעבדי CPU וירטואליים (לדוגמה, n1-standard-1) או עם סדרת המכונות N4A או סדרת המכונות Tau T2D.
  • הקצאת צמתים אוטומטית (NAP): אי אפשר להגדיר SMT באשכולות שבהם מופעלת הקצאת צמתים אוטומטית.
  • מידרוג אוטומטי של אשכולות: שינוי גודל האשכול מאפס צמתים עם אפשרות להגדרה של SMT נתמך רק במידרוג אוטומטי של אשכולות באשכולות שמריצים GKE מגרסה 1.21 ואילך.
  • ‫GKE Sandbox: אפשר להגדיר את הגדרות ה-SMT בצמתים של GKE Sandbox באשכולות GKE Standard שמריצים גרסה 1.24.2-gke.300 ואילך באמצעות הדגל --threads-per-core, ובגרסאות קודמות באמצעות DaemonSet עצמאי. הוראות מפורטות מופיעות במאמר GKE Sandbox. מכיוון שריבוי הליכי משנה מושבת כברירת מחדל ב-GKE Sandbox בגרסאות שלפני 1.24.2-gke.300, אין תמיכה בהגדרת SMT באמצעות threads-per-core. אם אתם משתמשים ב-GKE Sandbox ורוצים להפעיל SMT, כדאי לעיין במאמר יכול להיות ש-SMT מושבת.
  • מצב אשכול: אי אפשר להגדיר SMT באשכולות Autopilot של GKE.

תמחור

החיוב על SMT ב-GKE מבוסס על התמחור הבסיסי של Compute Engine ל-SMT. החיוב הוא על מספר המעבדים הווירטואליים שמוגדרים בסוג המכונה של ה-VM, ולא על מספר הליכי המשנה שפועלים בכל ליבה. גם אם תגדירו SMT, תמשיכו לשלם על מספר ברירת המחדל של יחידות vCPU שמוגדרות לפי סוג המכונה הווירטואלית. מידע נוסף על החיוב על מכונות וירטואליות זמין במאמר תמחור של מכונות VM.

לדוגמה, צומת GKE שנוצר באמצעות סוג המכונה n2-standard-8 פועל עם SMT מופעל כברירת מחדל, ויכול להריץ עד 8 vCPU, כלומר 2 vCPU לכל אחת מארבע ליבות ה-CPU הפיזיות. אם מגדירים את SMT כך שישתמש רק בשרשור אחד לכל ליבה (בפועל 4 vCPU), עדיין תחויבו על 8 vCPU.

הגדרת SMT

אתם יכולים להגדיר SMT באשכולות חדשים או במאגרי צמתים חדשים על ידי ציון מספר השרשורים לכל ליבה.

בטבלה הבאה מוצגים הערכים האפשריים של שרשורים לכל ליבה והתנהגות ה-SMT התואמת לצומת:

שרשורים לכל ליבה התנהגות של SMT
‫null (לא צוין) ברירת המחדל של מכונה וירטואלית ב-Compute Engine
0 לא חוקי
1 SMT off
2 SMT מופעל
> 2 לא חוקי

הגדרת SMT באשכול חדש

אפשר להגדיר SMT באשכולות חדשים באמצעות ה-CLI של gcloud או Google Cloud המסוף.

gcloud

כדי להגדיר SMT, מריצים את הפקודה הבאה:

gcloud container clusters create CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --threads-per-core=THREADS_PER_CORE

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: השם של האשכול החדש.
  • ‫MACHINE_TYPE: סוג המכונה לשימוש בצמתי GKE. זה חייב להיות סוג מכונה עם 2 מעבדי vCPU או יותר.
  • ‫THREADS_PER_CORE: מספר השרשורים לכל ליבה פיזית. בטבלה הקודמת מוצגים הערכים שאפשר לציין.

רשימת האפשרויות המלאה זמינה במאמרי העזרה בנושא gcloud container clusters create.

המסוף

  1. נכנסים לדף Create a Kubernetes cluster במסוף Google Cloud .

    מעבר אל יצירת אשכול Kubernetes

  2. בתפריט הניווט, בקטע Node pools (מאגרי צמתים), לוחצים על השם של מאגר צמתים ואז על Nodes (צמתים).

  3. בקטע Machine Configuration (הגדרת המכונה), בוחרים Machine type (סוג המכונה) נתמך, כמו e2-standard-2.

  4. לוחצים על פלטפורמת המעבד (CPU) ו-GPU.

  5. בתפריט הנפתח היחס בין vCPU לליבה, בוחרים אחת מהאפשרויות הבאות:

    • ‫1 vCPU לכל ליבה: משביתים את SMT.
    • ‫2 vCPUs per core: כדאי להשאיר את SMT מופעל.
  6. מגדירים את האשכול ואת מאגרי הצמתים לפי הצורך, ואז לוחצים על יצירה.

הגדרת SMT במאגר צמתים חדש

אפשר להגדיר SMT במאגרי צמתים חדשים באמצעות ה-CLI של gcloud או המסוף Google Cloud .

gcloud

כדי להגדיר SMT, מריצים את הפקודה הבאה:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --threads-per-core=THREADS_PER_CORE

מחליפים את מה שכתוב בשדות הבאים:

  • ‫POOL_NAME: השם של מאגר הצמתים החדש.
  • ‫CLUSTER_NAME: השם של האשכול הקיים.
  • ‫MACHINE_TYPE: סוג המכונה לשימוש בצמתי GKE. זה חייב להיות סוג מכונה עם 2 או יותר מעבדי CPU וירטואליים.
  • ‫THREADS_PER_CORE: מספר השרשורים לכל ליבה פיזית. בטבלה הקודמת מוצגים הערכים שאפשר לציין.

רשימת האפשרויות המלאה זמינה במאמרי העזרה בנושא gcloud container clusters create.

המסוף

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. לוחצים על השם של האשכול שרוצים לשנות.

  3. לוחצים על הכרטיסייה Nodes (צמתים).

  4. לוחצים על יצירת מאגר צמתים בניהול המשתמש.

  5. בתפריט הניווט, לוחצים על Nodes (צמתים).

  6. בקטע Machine Configuration (הגדרת המכונה), בוחרים Machine family (משפחת מכונות) וMachine type (סוג מכונה) שתומכים ב-SMT, כמו n2-standard-2.

  7. לוחצים על פלטפורמת המעבד (CPU) ו-GPU.

  8. בתפריט הנפתח vCPUs to core ratio, בוחרים באחת מהאפשרויות הבאות:

    • ‫1 vCPU per core: השבתת SMT.
    • ‫2 מעבדי vCPU לכל ליבה: השאירו את SMT מופעל.
  9. מגדירים את מאגר הצמתים לפי הצורך ולוחצים על יצירה.

אימות ההגדרה של SMT

Linux

כדי לוודא שהגדרת ה-SMT בצמתי Linux נכונה, מבצעים את השלבים הבאים:

  1. מתחברים לצומת באמצעות SSH:

    gcloud compute ssh NODE_NAME
    

    מחליפים את NODE_NAME בשם הצומת.

  2. בודקים את מספר יחידות ה-vCPU:

    cat /proc/cpuinfo | grep processor | wc -l
    

    הפלט אמור להיראות כך:

    16
    

    אם מגדירים את מספר הליבות לכל שרשור ל-1, הפלט אמור להציג חצי ממספר ברירת המחדל של המעבדים הווירטואליים של המכונה הווירטואלית ב-Compute Engine. לדוגמה, הפלט של n2-standard-32 כש-SMT מושבת צריך להיות 16 במקום ערך ברירת המחדל 32.

Windows

כדי לאמת את הגדרת ה-SMT בצומתי Windows, מבצעים את הפעולות הבאות:

  1. מגדירים שם משתמש וסיסמה ל-RDP לצומת:

    gcloud compute reset-windows-password NODE_NAME
    

    מחליפים את NODE_NAME בשם הצומת.

  2. יוצרים חיבור ל-EXTERNAL_IP:3389 עבור ה-VM.

  3. מריצים את פקודת PowerShell הבאה:

    Get-WmiObject -Class Win32_Processor -ComputerName. | Select-Object -Property [a-z]* | Select NumberOfCores,NumberOfLogicalProcessors
    

    אם מגדירים את מספר השרשורים לכל ליבה כ-1, הערך NumberOfCores צריך להיות שווה לערך NumberOfLogicalProcessors, כמו בפלט לדוגמה הבא:

    Output (example n1-standard-2 with SMT off)
    
    NumberOfCores NumberOfLogicalProcessors
    ------------- -------------------------
                1                         1
    

המאמרים הבאים