בדף הזה מוסבר איך להגדיר ריבוי נימים סימולטני באשכולות Google Kubernetes Engine (GKE).
סקירה כללית
צמתים ב-GKE הם מכונות וירטואליות (VM) של Compute Engine שנוצרות על ידי GKE בשמכם. במכונות הווירטואליות האלה, נהוג להפעיל כברירת מחדל את התכונה Simultaneous Multi-Threading (SMT). SMT היא היכולת להריץ כמה תהליכים עצמאיים בליבת CPU פיזית אחת. כש-SMT מופעל, ליבה פיזית אחת יכולה להריץ שני מעבדים וירטואליים (vCPU) כשרשורים נפרדים ועצמאיים. לדוגמה, צומת n2-standard-32 GKE מריץ בפועל 32 מעבדים וירטואליים על 16 ליבות מעבד פיזיות.
עם ההשקה של אפשרות ההגדרה של SMT בצמתי GKE, אתם יכולים להגדיר את ה-SMT כך שמספר ה-vCPU האפקטיבי יהיה שווה למספר הליבות הפיזיות. המשמעות היא שצמתי GKE יכולים להשתמש בליבה הפיזית המלאה לכל vCPU.
יתרונות
הגדרת SMT ב-GKE מספקת את היתרונות הבאים.
ביצועים משופרים
יכול להיות שחלק מעומסי העבודה של מחשוב עתיר ביצועים (HPC) יראו שיפור בביצועים אם תהיה השבתה של SMT. בדרך כלל, במשימות מחשוב כלליות רבות או במשימות שדורשות הרבה קלט/פלט, טכנולוגיית ה-SMT יכולה להגדיל באופן משמעותי את קצב העברת הנתונים של האפליקציה. לעומת זאת, במשימות שמוגבלות על ידי המעבד, שבהן שני הליבות הווירטואליות מוגבלות על ידי המעבד, טכנולוגיית SMT עלולה לפגוע בביצועים הכוללים של האפליקציה ולהוסיף שונות לא דטרמיניסטית למשימות. לכן, כשהתכונה SMT מושבתת, יכול להיות שחלק מהאפליקציות של HPC יניבו ביצועים טובים יותר וצפויים יותר.
עלויות רישוי מופחתות
חלק מהסכמי הרישוי של תוכנות כוללים מודלים לחיוב שקשורים למספר ליבות ה-CPU הווירטואליות שנצרכות. השבתת SMT מקטינה את מספר ה-vCPU לכל ליבה בחצי, מה שעשוי להקטין את עלויות הרישוי. למידע נוסף, אפשר לעיין בהסכם הרישוי.
בקטע תמחור מוסבר איך Google Cloud מחייבים כשמגדירים SMT.
מגבלות
- סוגי מכונות: אי אפשר להגדיר SMT בסוגי מכונות עם פחות מ-2 ליבות vCPU (לדוגמה,
n1-standard-1) או עם סדרת המכונות N4A או סדרת המכונות Tau T2D. - הקצאת צמתים אוטומטית: אי אפשר להגדיר SMT באשכולות שמופעלת בהם הקצאת צמתים אוטומטית.
- שינוי גודל אוטומטי של אשכולות: שינוי גודל מאפס צמתים עם אפשרות להגדרה של SMT נתמך רק בשינוי גודל אוטומטי של אשכולות באשכולות שמופעלת בהם GKE מגרסה 1.21 ואילך.
- GKE Sandbox: אפשר להגדיר את הגדרות ה-SMT בצמתים של GKE Sandbox באשכולות GKE Standard שמריצים גרסה 1.24.2-gke.300 ואילך באמצעות הדגל
--threads-per-core, ובגרסאות קודמות באמצעות DaemonSet עצמאי. הוראות מפורטות מופיעות במאמר בנושא GKE Sandbox. מכיוון ש-multithreading מושבת כברירת מחדל ב-GKE Sandbox בגרסאות שלפני 1.24.2-gke.300, לא ניתן להגדיר SMT באמצעותthreads-per-core. אם אתם משתמשים ב-GKE Sandbox ורוצים להפעיל את SMT, כדאי לעיין במאמר יכול להיות ש-SMT מושבת. - מצב אשכול: אי אפשר להגדיר SMT באשכולות Autopilot של GKE.
תמחור
החיוב על SMT ב-GKE מבוסס על התמחור הבסיסי של Compute Engine ל-SMT. החיוב מתבצע לפי מספר יחידות ה-vCPU שמוגדרות בסוג המכונה של מכונת ה-VM, ולא לפי מספר השרשורים שפועלים בכל ליבה. גם אם תגדירו SMT, תמשיכו לשלם על מספר ברירת המחדל של יחידות ה-vCPU שמוגדרות לפי סוג המכונה הווירטואלית. מידע נוסף על החיוב על מכונות וירטואליות זמין במאמר בנושא תמחור של מכונות וירטואליות.
לדוגמה, צומת GKE שנוצר באמצעות n2-standard-8 סוג המכונה פועל עם SMT מופעל כברירת מחדל, ויכול להריץ עד 8 vCPU, כלומר 2 vCPU לכל אחת מארבע ליבות ה-CPU הפיזיות. אם מגדירים את ה-SMT כך שישתמש רק בשרשור אחד לכל ליבה (בפועל 4 vCPU), עדיין מחויבים על 8 vCPU.
הגדרת SMT
אתם יכולים להגדיר SMT באשכולות חדשים או במאגרי צמתים חדשים על ידי ציון מספר השרשורים לכל ליבה.
בטבלה הבאה מוצגים הערכים האפשריים של threads per core (שרשורים לכל ליבה) וההתנהגות התואמת של SMT עבור הצומת:
| שרשורים לכל ליבה | התנהגות SMT |
|---|---|
null (לא צוין) |
ברירת המחדל של מכונה וירטואלית ב-Compute Engine |
0 |
לא חוקי |
1 |
SMT off |
2 |
SMT on |
> 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.
המסוף
נכנסים לדף Create a Kubernetes cluster במסוף Google Cloud .
בתפריט הניווט, בקטע Node pools (מאגרי צמתים), לוחצים על השם של מאגר הצמתים ואז על Nodes (צמתים).
בקטע Machine Configuration, בוחרים סוג מכונה נתמך, כמו e2-standard-2.
לוחצים על CPU Platform and GPU (פלטפורמת CPU ו-GPU).
בתפריט הנפתח היחס בין vCPU לליבה, בוחרים באחת מהאפשרויות הבאות:
- 1 vCPU per core: משביתים את ה-SMT.
- 2 vCPUs per core: keep SMT on.
מגדירים את האשכולות ואת מאגרי הצמתים לפי הצורך, ואז לוחצים על יצירה.
הגדרת 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 או יותר vCPU. -
THREADS_PER_CORE: מספר השרשורים לכל ליבה פיזית. בטבלה הקודמת מפורטים הערכים שאפשר לציין.
רשימת האפשרויות המלאה זמינה במאמרי העזרה בנושא gcloud container clusters create.
המסוף
נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .
לוחצים על השם של האשכול שרוצים לשנות.
לוחצים על הכרטיסייה Nodes.
לוחצים על Create user-managed node pool (יצירת מאגר צמתים בניהול המשתמש).
בתפריט הניווט, לוחצים על Nodes (צמתים).
בקטע Machine Configuration (הגדרת המכונה), בוחרים Machine family (משפחת מכונות) וMachine type (סוג מכונה) שתומכים ב-SMT, כמו n2-standard-2.
לוחצים על CPU Platform and GPU (פלטפורמת CPU ו-GPU).
בתפריט הנפתח vCPUs to core ratio (יחס בין vCPU לליבה), בוחרים באחת מהאפשרויות הבאות:
- 1 vCPU per core: משביתים את ה-SMT.
- 2 vCPUs per core: keep SMT on.
מגדירים את מאגר הצמתים לפי הצורך, ואז לוחצים על יצירה.
אימות ההגדרה של SMT
Linux
כדי לאמת את הגדרת ה-SMTP בצמתי Linux, מבצעים את השלבים הבאים:
מתחברים לצומת באמצעות SSH:
gcloud compute ssh NODE_NAMEמחליפים את
NODE_NAMEבשם הצומת.בודקים את מספר המעבדים הווירטואליים:
cat /proc/cpuinfo | grep processor | wc -lהפלט אמור להיראות כך:
16אם מגדירים את מספר השרשורים לכל ליבה ל-
1, בפלט אמור להופיע חצי ממספר המעבדים הווירטואליים שמוגדר כברירת מחדל במכונה הווירטואלית ב-Compute Engine. לדוגמה, הפלט שלn2-standard-32כש-SMT מושבת צריך להיות16במקום ערך ברירת המחדל32.
Windows
כדי לוודא שהגדרת ה-SMT בצמתי Windows נכונה, מבצעים את השלבים הבאים:
מגדירים שם משתמש וסיסמה ל-RDP לצומת:
gcloud compute reset-windows-password NODE_NAMEמחליפים את
NODE_NAMEבשם הצומת.יוצרים חיבור ל-
EXTERNAL_IP:3389עבור ה-VM.מריצים את פקודת 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
המאמרים הבאים
- מידע על סוגי המכונות הזמינים
- איך מציינים פלטפורמת CPU מינימלית לצמתים ב-GKE
- מידע על שימוש בצמתים של דייר יחיד ב-Compute Engine ב-GKE