בדף הזה מוסבר איך להגדיר ריבוי נימים סימולטני באשכולות Google Kubernetes Engine (GKE).
סקירה כללית
צמתים ב-GKE הם מכונות וירטואליות (VM) של Compute Engine שנוצרות על ידי GKE בשמכם. במכונות הווירטואליות האלה, נפוץ שsimultaneous multi-threading (SMT) מופעל כברירת מחדל. SMT היא היכולת להריץ כמה תהליכים עצמאיים בליבה פיזית אחת של CPU. כש-SMT מופעל, ליבה פיזית אחת יכולה להריץ שתי יחידות CPU וירטואליות (vCPU) כשרשורים נפרדים ועצמאיים. לדוגמה, צומת GKE n2-standard-32 מריץ בפועל 32 מעבדים וירטואליים על 16 ליבות מעבד פיזיות.
עם ההשקה של אפשרות ההגדרה של SMT בצמתי GKE, אתם יכולים להגדיר את SMT כך שמספר ה-vCPU האפקטיבי יהיה שווה למספר הליבות הפיזיות. המשמעות היא שצמתי GKE יכולים להשתמש בליבה הפיזית המלאה לכל vCPU.
יתרונות
הגדרת SMT ב-GKE מספקת את היתרונות הבאים:
ביצועים משופרים
יכול להיות שחלק מעומסי העבודה של מחשוב עתיר ביצועים (HPC) יראו שיפור בביצועים אם תהיה השבתה של SMT. בדרך כלל, במשימות רבות של מחשוב כללי או במשימות שדורשות הרבה קלט/פלט, טכנולוגיית ה-SMT יכולה להגדיל באופן משמעותי את קצב העברת הנתונים של האפליקציה. לעומת זאת, במשימות שמוגבלות על ידי המעבד, שבהן שני הליבות הווירטואליות מוגבלות על ידי המעבד, טכנולוגיית ה-SMT עלולה לפגוע בביצועים הכוללים של האפליקציה ולהוסיף שונות לא דטרמיניסטית למשימות. לכן, כשה-SMT מושבת, יכול להיות שחלק מהאפליקציות של HPC יניבו ביצועים טובים יותר וצפויים יותר.
עלויות רישוי מופחתות
חלק מהסכמי הרישוי של תוכנות כוללים מודלים לחיוב שקשורים למספר ליבות ה-CPU הווירטואליות שנצרכות. השבתת SMT מקטינה את מספר המעבדים הווירטואליים לכל ליבה בחצי, מה שעשוי להקטין את עלויות הרישוי. למידע נוסף, אפשר לעיין בהסכם הרישוי.
בקטע תמחור מוסבר איך 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 מבוסס על התמחור הבסיסי של SMT ב-Compute Engine. החיוב מתבצע לפי מספר יחידות ה-vCPU שמוגדרות בסוג המכונה של מכונת ה-VM, ולא לפי מספר השרשורים שפועלים בכל ליבה. גם אם תגדירו SMT, תמשיכו לשלם על מספר ברירת המחדל של יחידות ה-vCPU שמוגדרות לפי סוג המכונה הווירטואלית. מידע נוסף על החיוב על מכונות וירטואליות זמין במאמר בנושא תמחור של מכונות וירטואליות.
לדוגמה, צומת GKE שנוצר באמצעות סוג המכונה n2-standard-8 פועל עם SMT מופעל כברירת מחדל, ויכול להריץ עד 8 vCPU, כלומר 2 vCPU לכל אחת מארבע ליבות ה-CPU הפיזיות. אם תגדירו את ה-SMT כך שישתמש רק ב-thread אחד לכל ליבה (בפועל 4 vCPU), עדיין תחויבו על 8 vCPU.
הגדרת SMT
אפשר להגדיר SMT באשכולות חדשים או במאגרי צמתים חדשים על ידי ציון מספר השרשורים לכל ליבה.
בטבלה הבאה מוצגים הערכים האפשריים של threads per core (שרשורים לכל ליבה) וההתנהגות התואמת של SMT עבור הצומת:
| שרשורים לכל ליבה | התנהגות SMT |
|---|---|
null (לא צוין) |
ברירת מחדל של מכונה וירטואלית ב-Compute Engine |
0 |
לא חוקי |
1 |
ה-SMT כבוי |
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).
בתפריט הנפתח vCPUs to core ratio (יחס בין ליבות וירטואליות לליבות פיזיות), בוחרים באחת מהאפשרויות הבאות:
- 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 (צמתים).
בקטע 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בשם הצומת.בודקים את מספר יחידות ה-vCPU:
cat /proc/cpuinfo | grep processor | wc -lהפלט אמור להיראות כך:
16אם מגדירים את מספר ה-threads לכל ליבה ל-
1, בפלט צריך להופיע חצי ממספר ברירת המחדל של מעבדי ה-vCPU במכונה הווירטואלית ב-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