במאמר הזה נסביר איך להפעיל את הערכה לפיתוח מישור הנתונים (DPDK) במכונה וירטואלית (VM) כדי להאיץ את העיבוד של מנות נתונים ברשת.
DPDK הוא מסגרת לאפליקציות עתירות ביצועים שדורשות עיבוד מהיר של מנות, זמן אחזור נמוך וביצועים עקביים. DPDK מספקת קבוצה של ספריות מישור נתונים ובקר ממשק רשת (NIC) שעוקף את רשת הליבה ופועל ישירות במרחב המשתמש. לדוגמה, הפעלת DPDK במכונה וירטואלית שימושית כשמריצים את הפעולות הבאות:
פריסות של וירטואליזציה של פונקציות רשת (NFV)
אפליקציות של שירותי Networking מוגדרי-תוכנה (SDN)
אפליקציות של סטרימינג וידאו או של שיחות קוליות באינטרנט (VoIP)
אפשר להפעיל DPDK במכונת VM שמשתמשת באחד מסוגי כרטיסי הרשת הווירטואליים (vNIC) הבאים:
מומלץ: gVNIC
ממשק רשת וירטואלי (vNIC) מאובטח, ניתן להתאמה ועתיר ביצועים שנועד במיוחד ל-Compute Engine. הוא מחליף את virtIO ומהווה את הדור הבא של vNIC.
-
מנהל התקן אתרנט בקוד פתוח שמאפשר למכונות וירטואליות לגשת ביעילות לחומרה פיזית, כמו אחסון בלוקים ומתאמי רשת.
בעיה אחת בהרצת DPDK בסביבה וירטואלית, במקום בחומרה פיזית, היא שבסביבות וירטואליות אין תמיכה ב-SR-IOV וב-I/O Memory Management Unit (IOMMU) עבור אפליקציות עם ביצועים גבוהים. כדי לעקוף את המגבלה הזו, צריך להריץ את DPDK בכתובות פיזיות של האורח ולא בכתובות וירטואליות של המארח, באמצעות אחד מהדרייברים הבאים:
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Cloud de Confiance כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Cloud de Confiance by S3NS
gcloud
-
התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud init
-
- הגדרת אזור ותחום כברירת מחדל
REST
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם.
מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Cloud de Confiance .
דרישות
כשיוצרים מכונה וירטואלית להרצת DPDK, חשוב לוודא את הדברים הבאים:
כדי להימנע ממצב שבו אין קישוריות לרשת כשמריצים את האפליקציות, כדאי להשתמש בשתי רשתות בענן וירטואלי פרטי (VPC):
רשת VPC למישור הבקרה
רשת VPC למישור הנתונים
בשתי רשתות ה-VPC צריך לציין את הפרטים הבאים:
תת-רשת עם טווח כתובות IP ייחודי
אותו אזור עבור רשתות המשנה שלהם
אותו סוג של VNIC – gVNIC או VirtIO-Net
כשיוצרים את המכונה הווירטואלית:
צריך לציין את אותו אזור כמו רשתות ה-VPC, וגם את רשתות המשנה שלהן.
צריך לציין את סוג ה-vNIC שמתכננים להשתמש בו עם DPDK.
צריך לציין סדרת מכונות נתמכת עבור gVNIC או VirtIO-Net.
הגבלות
יש הגבלות על הפעלת DPDK במכונת VM:
אפשר להשתמש רק בתת-רשתות עם מחסנית יחידה בשתי רשתות ה-VPC שבהן נעשה שימוש במכונה הווירטואלית.
אם אתם משתמשים ב-gVNIC כסוג ה-vNIC בשני רשתות ה-VPC, ודאו את הדברים הבאים:
חובה להשתמש ב-DPDK בגרסה 22.11 ואילך.
אפשר להשתמש רק בתמונות דיסק נתמכות.
אם רוצים להפעיל ביצועים ברשת Tier_1 לכל מכונה וירטואלית כדי לשפר את הביצועים ברשת כשיוצרים את המכונה הווירטואלית, צריך לציין את הפרטים הבאים:
gVNIC כסוג כרטיס ה-vNIC
סוג מכונה נתמך עם 30 יחידות vCPU ומעלה
סקירה כללית של התכונות והגרסאות של DPDK
מומלץ להשתמש בגרסה העדכנית ביותר של מנהל ההתקן DPDK כדי ליהנות מהתכונות החדשות ביותר ומתיקוני באגים. ברשימה הבאה מופיעה סקירה כללית של מה שזמין בכל גרסה של מנהל ההתקן DPDK:
- 24.07
- שינוי התמיכה במידות טבעת (לכל סוגי המכונות הנתמכים).
- תמיכה בתהליכים משניים.
- 24.03
- תמיכה ב-RSS (לכל סוגי המכונות הנתמכים).
- 23.11
- תמיכה בגודל מאגר RX (לכל סוגי המכונות הנתמכים).
- תמיכה בפריים ג'מבו (9K) עבור סוגי מכונות דור שלישי ומעלה.
- 23.07
- הוספנו תמיכה בסוגי מכונות מדור שלישי ומעלה.
- תמיכה בפריים ג'מבו (9K) בסוגי מכונות מהדור הראשון והשני.
- 23.03
תמיכה בנתונים סטטיסטיים של דיווח:
- נתוני תוכנה לכל סוגי המכונות הנתמכים.
- נתוני חומרה של סוגי מכונות מהדור הראשון והשני.
- 22.11
- גרסת ה-driver הראשונית עם תמיכה בסוגי מכונות מהדור הראשון והשני.
הגדרת מכונה וירטואלית להרצת DPDK
בקטע הזה מוסבר איך ליצור מכונה וירטואלית להרצת DPDK.
יצירת רשתות VPC
יוצרים שתי רשתות VPC, למישור הנתונים ולמישור הבקרה, באמצעות Cloud de Confiance המסוף, Google Cloud CLI או Compute Engine API. אפשר לציין את הרשתות האלה מאוחר יותר כשיוצרים את ה-VM.
המסוף
יוצרים רשת VPC למישור הנתונים:
במסוף Cloud de Confiance , עוברים אל VPC networks.
ייפתח הדף רשתות VPC.
לוחצים על יצירת רשת VPC.
ייפתח הדף יצירת רשת VPC.
בשדה שם, מזינים שם לרשת.
בקטע New subnet (רשת משנה חדשה):
בשדה שם, מזינים שם לרשת המשנה.
בתפריט Region (אזור), בוחרים אזור לרשת המשנה.
בוחרים באפשרות IPv4 (single-stack) (ברירת מחדל).
בשדה טווח כתובות IPv4, מזינים כתובת תקינה של טווח כתובות IPv4 בפורמט CIDR.
לוחצים על סיום.
לוחצים על יצירה.
ייפתח הדף VPC networks. יכול להיות שיחלפו עד דקה לפני שהיצירה של רשת ה-VPC תושלם.
יוצרים רשת VPC למישור הבקרה עם כלל חומת אש שמאפשר חיבורי SSH למכונה הווירטואלית:
לוחצים שוב על יצירת רשת VPC.
ייפתח הדף יצירת רשת VPC.
בשדה שם, מזינים שם לרשת.
בקטע New subnet (רשת משנה חדשה):
בשדה Name, מזינים שם לרשת המשנה.
בתפריט Region, בוחרים את אותו אזור שצוין עבור רשת המשנה של רשת מישור הנתונים.
בוחרים באפשרות IPv4 (single-stack) (ברירת מחדל).
בשדה טווח כתובות IPv4, מזינים כתובת תקינה של טווח כתובות IPv4 בפורמט CIDR.
לוחצים על סיום.
בכרטיסייה IPv4 firewall rules, מסמנים את התיבה NETWORK_NAME-allow-ssh.
כאשר NETWORK_NAME הוא שם הרשת שציינתם בשלבים הקודמים.
לוחצים על יצירה.
ייפתח הדף רשתות VPC. יכול להיות שיחלפו עד דקה לפני שהיצירה של רשת ה-VPC תושלם.
gcloud
כדי ליצור רשת VPC למישור הנתונים, פועלים לפי השלבים הבאים:
כדי ליצור רשת VPC עם רשת משנה שנוצרה באופן ידני, משתמשים בפקודה
gcloud compute networks createעם הדגל--subnet-modeשהערך שלו הואcustom.gcloud compute networks create DATA_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=customמחליפים את מה שכתוב בשדות הבאים:
DATA_PLANE_NETWORK_NAME: השם של רשת ה-VPC למישור הנתונים.
MTU: יחידת השידור המקסימלית (MTU), שהיא גודל החבילה הגדול ביותר ברשת. הערך צריך להיות בין1300ל-8896. ערך ברירת המחדל הוא1460. לפני שמגדירים את ה-MTU לערך גבוה מ-1460, כדאי לעיין במאמר בנושא יחידת שידור מקסימלית.
יוצרים רשת משנה לרשת מישור הנתונים של ה-VPC שיצרתם זה עתה באמצעות הפקודה
gcloud compute networks subnets create.gcloud compute networks subnets create DATA_PLANE_SUBNET_NAME \ --network=DATA_PLANE_NETWORK_NAME \ --range=DATA_PRIMARY_RANGE \ --region=REGIONמחליפים את מה שכתוב בשדות הבאים:
DATA_PLANE_SUBNET_NAME: השם של רשת המשנה של רשת מישור הנתונים.
DATA_PLANE_NETWORK_NAME: השם של רשת מישור הנתונים שציינתם בשלבים הקודמים.
DATA_PRIMARY_RANGE: a valid IPv4 range for the subnet in CIDR notation.
REGION: האזור שבו רוצים ליצור את רשת המשנה.
כדי ליצור רשת VPC למישור הבקרה עם כלל חומת אש שמאפשר חיבורי SSH למכונה הווירטואלית, פועלים לפי השלבים הבאים:
כדי ליצור רשת VPC עם רשת משנה שנוצרה באופן ידני, משתמשים בפקודה
gcloud compute networks createעם הדגל--subnet-modeשהערך שלו הואcustom.gcloud compute networks create CONTROL_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=customמחליפים את מה שכתוב בשדות הבאים:
CONTROL_PLANE_NETWORK_NAME: השם של רשת ה-VPC למישור הבקרה.
MTU: ה-MTU, שהוא גודל החבילה הגדול ביותר ברשת. הערך צריך להיות בין1300ל-8896. ערך ברירת המחדל הוא1460. לפני שמגדירים את ה-MTU לערך גבוה מ-1460, כדאי לעיין במאמר בנושא יחידת שידור מקסימלית.
יוצרים רשת משנה לרשת מישור הבקרה של ה-VPC שיצרתם באמצעות הפקודה
gcloud compute networks subnets create.gcloud compute networks subnets create CONTROL_PLANE_SUBNET_NAME \ --network=CONTROL_PLANE_NETWORK_NAME \ --range=CONTROL_PRIMARY_RANGE \ --region=REGIONמחליפים את מה שכתוב בשדות הבאים:
CONTROL_PLANE_SUBNET_NAME: השם של רשת המשנה של מישור הבקרה.
CONTROL_PLANE_NETWORK_NAME: השם של רשת מישור הבקרה שציינתם בשלבים הקודמים.
CONTROL_PRIMARY_RANGE: a valid IPv4 range for the subnet in CIDR notation.
REGION: האזור שבו רוצים ליצור את רשת המשנה, שצריך להיות זהה לאזור שצוין ברשת של מישור הנתונים.
יוצרים כלל חומת אש ב-VPC שמאפשר חיבורי SSH לרשת של מישור הבקרה באמצעות הפקודה
gcloud compute firewall-rules createעם הדגל--allowשמוגדר לערךtcp:22.gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --action=allow \ --network=CONTROL_PLANE_NETWORK_NAME \ --rules=tcp:22מחליפים את מה שכתוב בשדות הבאים:
FIREWALL_RULE_NAME: השם של כלל חומת האש.
CONTROL_PLANE_NETWORK_NAME: השם של רשת מישור הבקרה שיצרתם בשלבים הקודמים.
API
כדי ליצור רשת VPC למישור הנתונים, פועלים לפי השלבים הבאים:
כדי ליצור רשת VPC עם תת-רשת שנוצרה באופן ידני, שולחים בקשת
POSTאל ה-methodnetworks.insertעם השדהautoCreateSubnetworksשמוגדר לערךfalse.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "DATA_PLANE_NETWORK_NAME", "mtu": MTU }מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט הנוכחי.
DATA_PLANE_NETWORK_NAME: השם של הרשת של מישור הנתונים.
MTU: יחידת השידור המקסימלית (MTU), שהיא גודל החבילה הגדול ביותר ברשת. הערך צריך להיות בין1300ל-8896. ערך ברירת המחדל הוא1460. לפני שמגדירים את ה-MTU לערך גבוה מ-1460, כדאי לעיין במאמר בנושא יחידת שידור מקסימלית.
יוצרים רשת משנה לרשת מישור הנתונים של ה-VPC על ידי שליחת בקשת
POSTלשיטהsubnetworks.insert.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "DATA_PRIMARY_RANGE", "name": "DATA_PLANE_SUBNET_NAME", "network": "projects/PROJECT_ID/global/networks/DATA_PLANE_NETWORK_NAME" }מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט שבו נמצאת רשת מישור הנתונים.
REGION: האזור שבו רוצים ליצור את רשת המשנה.
DATA_PRIMARY_RANGE: טווח IPv4 העיקרי של תת-הרשת החדשה בסימון CIDR.
DATA_PLANE_SUBNET_NAME: השם של תת-הרשת של רשת מישור הנתונים שיצרתם בשלב הקודם.
DATA_PLANE_NETWORK_NAME: השם של רשת מישור הנתונים שיצרתם בשלב הקודם.
כדי ליצור רשת VPC למישור הבקרה עם כלל חומת אש שמאפשר חיבורי SSH למכונה הווירטואלית, פועלים לפי השלבים הבאים:
כדי ליצור רשת VPC עם תת-רשת שנוצרה באופן ידני, שולחים בקשת
POSTאל ה-methodnetworks.insertעם השדהautoCreateSubnetworksשמוגדר לערךfalse.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "CONTROL_PLANE_NETWORK_NAME", "mtu": MTU }מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט הנוכחי.
CONTROL_PLANE_NETWORK_NAME: השם של הרשת עבור מישור הבקרה.
MTU: ה-MTU, שהוא גודל החבילה הגדול ביותר ברשת. הערך צריך להיות בין1300ל-8896. ערך ברירת המחדל הוא1460. לפני שמגדירים את ה-MTU לערך גבוה מ-1460, כדאי לעיין במאמר בנושא יחידת שידור מקסימלית.
יוצרים תת-רשת לרשת בקרת הנתונים של ה-VPC על ידי שליחת
POSTבקשה לשיטהsubnetworks.insert.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "CONTROL_PRIMARY_RANGE", "name": "CONTROL_PLANE_SUBNET_NAME", "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME" }מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט שבו נמצאת רשת מישור הבקרה.
REGION: האזור שבו רוצים ליצור את רשת המשנה.
CONTROL_PRIMARY_RANGE: טווח IPv4 העיקרי של תת-הרשת החדשה בסימון CIDR.
CONTROL_PLANE_SUBNET_NAME: השם של תת-הרשת של רשת מישור הבקרה שיצרתם בשלב הקודם.
CONTROL_PLANE_NETWORK_NAME: השם של רשת מישור הבקרה שיצרתם בשלב הקודם.
יוצרים כלל חומת אש ב-VPC שמאפשר חיבורי SSH לרשת של מישור הבקרה על ידי שליחת בקשת
POSTלשיטהfirewalls.insert. בבקשה, מגדירים את השדהIPProtocolלערךtcpואת השדהportsלערך22.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME" }מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט שבו נמצאת רשת מישור הבקרה.
CONTROL_PLANE_NETWORK_NAME: השם של רשת מישור הבקרה שיצרתם בשלבים הקודמים.
אפשרויות הגדרה נוספות ליצירת רשת VPC מפורטות במאמר יצירה וניהול של רשתות VPC.
יצירת מכונה וירטואלית שמשתמשת ברשתות VPC ל-DPDK
יוצרים מכונה וירטואלית שמפעילה gVNIC או virtIO-Net בשתי רשתות ה-VPC שיצרתם קודם באמצעות Cloud de Confiance המסוף, ה-CLI של gcloud ו-Compute Engine API.
מומלץ: מציינים את Ubuntu LTS או את Ubuntu Pro כתמונת מערכת ההפעלה, כי מנהל החבילות שלהם תומך במנהלי ההתקנים של UIO ו-VFIO ללא IOMMU. אם לא רוצים לציין אף אחת ממערכות ההפעלה האלה, מומלץ לציין Debian 11 ואילך כדי לעבד את החבילות מהר יותר.
המסוף
כדי ליצור מכונה וירטואלית שמשתמשת בשתי רשתות המשנה של רשת ה-VPC שיצרתם בשלבים הקודמים, פועלים לפי השלבים הבאים:
נכנסים לדף VM instances במסוף Cloud de Confiance .
ייפתח הדף VM instances.
לוחצים על Create instance.
ייפתח הדף Create an instance.
בשדה שם, מזינים שם למכונה הווירטואלית.
בתפריט אזור, בוחרים את אותו אזור שבו יצרתם את הרשתות בשלבים הקודמים.
בתפריט Zone, בוחרים אזור למכונה הווירטואלית.
בקטע Machine configuration מבצעים את הפעולות הבאות:
בוחרים באחת מהאפשרויות הבאות:
לרוב עומסי העבודה, בוחרים בכרטיסייה General purpose (ברירת מחדל).
עבור עומסי עבודה שדורשים ביצועים גבוהים, בוחרים בכרטיסייה Compute optimized.
לעומסי עבודה עם יחסים גבוהים בין זיכרון ליחידות vCPU, בוחרים בכרטיסייה Memory optimized (אופטימיזציה של הזיכרון).
לעומסי עבודה שמשתמשים ביחידות עיבוד גרפי (GPU), בוחרים בכרטיסייה GPU.
זה שינוי אופציונלי. אם ציינתם יחידות GPU בשלב הקודם ואתם רוצים לשנות את ה-GPU לצירוף למכונה הווירטואלית, מבצעים אחת או יותר מהפעולות הבאות:
בתפריט סוג ה-GPU, בוחרים סוג GPU.
בתפריט Number of GPUs (מספר יחידות ה-GPU), בוחרים את מספר יחידות ה-GPU.
בתפריט סדרה, בוחרים סדרת מכונות.
בתפריט Machine type, בוחרים סוג מכונה.
אופציונלי: מרחיבים את הגדרות מתקדמות ופועלים לפי ההנחיות כדי להתאים אישית את המכונה למכונה הווירטואלית הזו.
אופציונלי: בקטע דיסק אתחול לוחצים על Change ופועלים לפי ההנחיות כדי לשנות את תמונת הדיסק.
מרחיבים את הקטע אפשרויות מתקדמות.
מרחיבים את הקטע Networking.
בקטע Network performance configuration (הגדרת ביצועי הרשת), מבצעים את הפעולות הבאות:
בתפריט כרטיס רשת, בוחרים באחת מהאפשרויות הבאות:
כדי להשתמש ב-gVNIC, בוחרים באפשרות gVNIC.
כדי להשתמש ב-VirtIO-Net, בוחרים באפשרות VirtIO.
אופציונלי: כדי לשפר את ביצועי הרשת ולהקטין את זמן האחזור, מסמנים את התיבה הפעלת רשת Tier_1.
בקטע Network interfaces:
בשורה default, לוחצים על הסמל מחיקת הפריט default.
לוחצים על הוספת ממשק רשת.
מופיע הקטע New network interface (ממשק רשת חדש).
בתפריט Network, בוחרים את רשת מישור הבקרה שיצרתם בשלבים הקודמים.
לוחצים על סיום.
לוחצים שוב על הוספת ממשק רשת.
מופיע הקטע New network interface (ממשק רשת חדש).
בתפריט Network (רשת), בוחרים את רשת מישור הנתונים שיצרתם בשלבים הקודמים.
לוחצים על סיום.
לוחצים על יצירה.
ייפתח הדף VM instances. יכול להיות שיחלפו עד דקה לפני שהיצירה של המכונה הווירטואלית תושלם.
gcloud
יוצרים מכונה וירטואלית שמשתמשת בשתי רשתות המשנה של רשת ה-VPC שיצרתם בשלבים הקודמים באמצעות הפקודה gcloud compute instances create עם הדגלים הבאים:
gcloud compute instances create VM_NAME \
--image-family=IMAGE_FAMILY \
--image-project=IMAGE_PROJECT \
--machine-type=MACHINE_TYPE \
--network-interface=network=CONTROL_PLANE_NETWORK_NAME,subnet=CONTROL_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \
--network-interface=network=DATA_PLANE_NETWORK_NAME,subnet=DATA_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \
--zone=ZONE
מחליפים את מה שכתוב בשדות הבאים:
VM_NAME: שם ה-VM.
IMAGE_FAMILY: שם המשפחה של התמונה של מערכת ההפעלה שדיסק האתחול יאותחל איתה. לחלופין, אפשר לציין את הדגל--image=IMAGEולהחליף אתIMAGEבגרסה ספציפית של תמונה. איך רואים רשימה של תמונות שזמינות בפרויקט התמונות של Compute Engine
IMAGE_PROJECT: השם של פרויקט התמונות שמכיל את תמונת הדיסק.
MACHINE_TYPE: סוג מכונה, מוגדר מראש או בהתאמה אישית, למכונה הווירטואלית.
VNIC_TYPE: סוג ה-vNIC לשימוש ברשתות של מישור הבקרה ומישור הנתונים. הערך חייב להיות אחד מהערכים הבאים:כדי להשתמש ב-gVNIC, מציינים
GVNIC.כדי להשתמש ב-VirtIO-Net, מציינים
VIRTIO_NET.
CONTROL_PLANE_NETWORK_NAME: השם של רשת מישור הבקרה שיצרתם בשלבים הקודמים.
CONTROL_PLANE_SUBNET_NAME: השם של תת-הרשת של רשת מישור הבקרה שיצרתם בשלבים הקודמים.
DATA_PLANE_NETWORK_NAME: השם של רשת מישור הנתונים שיצרתם בשלבים הקודמים.
DATA_PLANE_SUBNET_NAME: השם של תת-הרשת של רשת מישור הבקרה שיצרתם אוטומטית בשלבים הקודמים.
ZONE: האזור שבו רוצים ליצור את המכונה הווירטואלית. מציינים אזור באותו אזור של רשת המשנה שיצרתם בשלבים הקודמים.
לדוגמה, כדי ליצור מכונה וירטואלית בשם dpdk-vm באזור us-central1-a עם דיסק מתמיד שמבוסס על SSD בנפח 512GB, סוג מכונה מוגדר מראש C2 עם 60 מעבדים וירטואליים, רשת Tier_1, ורשת של מישור נתונים ומישור הבקרה ששתיהן משתמשות ב-gVNIC, מריצים את הפקודה הבאה:
gcloud compute instances create dpdk-vm \
--boot-disk-size=512GB \
--boot-disk-type=pd-ssd \
--image-project=ubuntu-os-cloud \
--image-family=ubuntu-2004-lts \
--machine-type=c2-standard-60 \
--network-performance-configs=total-egress-bandwidth-tier=TIER_1 \
--network-interface=network=control,subnet=control,nic-type=GVNIC \
--network-interface=network=data,subnet=data,nic-type=GVNIC \
--zone=us-central1-a
API
יוצרים מכונה וירטואלית שמשתמשת בשתי רשתות המשנה של רשת VPC שיצרתם בשלבים הקודמים, על ידי שליחת בקשת POST לשיטה instances.insert עם השדות הבאים:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"name": "VM_NAME",
"machineType": "MACHINE_TYPE",
"disks": [
{
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE_FAMILY"
}
}
],
"networkInterfaces": [
{
"network": "global/networks/CONTROL_PLANE_NETWORK_NAME",
"subnetwork": "regions/REGION/subnetworks/CONTROL_PLANE_SUBNET_NAME",
"nicType": "VNIC_TYPE"
},
{
"network": "global/networks/DATAPLANE_NETWORK_NAME",
"subnetwork": "regions/REGION/subnetworks/DATA_PLANE_SUBNET_NAME",
"nicType": "VNIC_TYPE"
}
]
}
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט שבו נמצאות רשת ה-VPC של מישור הבקרה ורשת ה-VPC של מישור הנתונים.
ZONE: האזור שבו רוצים ליצור את המכונה הווירטואלית.
VM_NAME: שם ה-VM.
MACHINE_TYPE: סוג מכונה, מוגדר מראש או בהתאמה אישית, למכונה הווירטואלית.
IMAGE_PROJECT: השם של פרויקט התמונות שמכיל את תמונת הדיסק.
IMAGE_FAMILY: שם המשפחה של התמונה של מערכת ההפעלה שדיסק האתחול יאותחל איתה. אפשר גם לציין גרסה ספציפית של תמונה. איך רואים רשימה של תמונות בפרויקט התמונות של Compute Engine
CONTROL_PLANE_NETWORK_NAME: השם של רשת מישור הבקרה שיצרתם בשלבים הקודמים.
REGION: האזור שבו קיימות רשתות המשנה של מישור הבקרה ומישור הנתונים.
CONTROL_PLANE_SUBNET_NAME: השם של תת-הרשת של רשת מישור הבקרה שיצרתם בשלבים הקודמים.
VNIC_TYPE: סוג ה-vNIC לשימוש ברשתות של מישור הבקרה ומישור הנתונים. הערך חייב להיות אחד מהערכים הבאים:כדי להשתמש ב-gVNIC, מציינים
GVNIC.כדי להשתמש ב-VirtIO-Net, מציינים
VIRTIO_NET.
DATA_PLANE_NETWORK_NAME: השם של רשת מישור הנתונים שיצרתם בשלבים הקודמים.
DATA_PLANE_SUBNET_NAME: השם של תת-הרשת של רשת מישור הבקרה שיצרתם בשלבים הקודמים.
לדוגמה, כדי ליצור מכונה וירטואלית בשם dpdk-vm בתחום (zone) us-central1-a עם דיסק מתמיד שמבוסס על SSD בנפח 512GB, סוג מכונה מוגדר מראש C2 עם 60 vCPU, רישות Tier_1 ורשת של מישור נתונים ומישור הבקרה ששתיהן משתמשות ב-gVNIC, שולחים את בקשת POST הבאה:
POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances
{
"name": "dpdk-vm",
"machineType": "c2-standard-60",
"disks": [
{
"initializeParams": {
"diskSizeGb": "512GB",
"diskType": "pd-ssd",
"sourceImage": "projects/ubuntu-os-cloud/global/images/ubuntu-2004-lts"
},
"boot": true
}
],
"networkInterfaces": [
{
"network": "global/networks/control",
"subnetwork": "regions/us-central1/subnetworks/control",
"nicType": "GVNIC"
},
{
"network": "global/networks/data",
"subnetwork": "regions/us-central1/subnetworks/data",
"nicType": "GVNIC"
}
],
"networkPerformanceConfig": {
"totalEgressBandwidthTier": "TIER_1"
}
}
אפשרויות הגדרה נוספות ליצירת מכונה וירטואלית זמינות במאמר יצירה והפעלה של מכונה וירטואלית.
התקנת DPDK במכונה הווירטואלית
כדי להתקין את DPDK במכונה הווירטואלית, מבצעים את השלבים הבאים:
מתחברים למכונה הווירטואלית שיצרתם בקטע הקודם באמצעות SSH.
מגדירים את יחסי התלות להתקנת DPDK:
sudo apt-get update && sudo apt-get upgrade -yq sudo apt-get install -yq build-essential ninja-build python3-pip \ linux-headers-$(uname -r) pkg-config libnuma-dev sudo pip install pyelftools mesonמתקינים את DPDK:
wget https://fast.dpdk.org/rel/dpdk-23.07.tar.xz tar xvf dpdk-23.07.tar.xz cd dpdk-23.07כדי ליצור DPDK עם הדוגמאות:
meson setup -Dexamples=all build sudo ninja -C build install; sudo ldconfig
התקנת מנהל התקן
כדי להכין את DPDK להרצה על דרייבר, צריך להתקין את הדרייבר באחת מהשיטות הבאות:
התקנה של VFIO ללא IOMMU
כדי להתקין את מנהל ההתקן VFIO ללא IOMMU, מבצעים את השלבים הבאים:
בודקים אם VFIO מופעל:
cat /boot/config-$(uname -r) | grep NOIOMMUאם VFIO לא מופעל, צריך לפעול לפי השלבים שמפורטים במאמר בנושא התקנת UIO.
הפעלת מצב No-IOMMU ב-VFIO:
sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
התקנה של UIO
כדי להתקין את מנהל ההתקן UIO ב-DPDK, בוחרים באחת מהשיטות הבאות:
התקנה של UIO באמצעות git
כדי להתקין את מנהל ההתקן UIO ב-DPDK באמצעות git, פועלים לפי השלבים הבאים:
משכפלים את מאגר ה-Git
igb_uioלדיסק במכונה הווירטואלית:git clone https://dpdk.org/git/dpdk-kmodsמהספרייה הראשית של מאגר ה-git המשוכפל, בונים את המודול ומתקינים את מנהל ההתקן UIO ב-DPDK:
pushd dpdk-kmods/linux/igb_uio sudo make sudo depmod && sudo insmod igb_uio.ko popd
התקנת UIO באמצעות חבילות Linux
כדי להתקין את מנהל ההתקן UIO ב-DPDK באמצעות חבילות Linux, פועלים לפי השלבים הבאים:
מתקינים את חבילת
dpdk-igb-uio-dkms:sudo apt-get install -y dpdk-igb-uio-dkmsהתקנת מנהל ההתקן UIO ב-DPDK:
sudo modprobe igb_uio
הכפפה של DPDK לדרייבר ובדיקה שלו
כדי לקשר את DPDK לדרייבר שהתקנתם בקטע הקודם, פועלים לפי השלבים הבאים:
מקבלים את מספר חריץ ה-Peripheral Component Interconnect (PCI) של ממשק הרשת הנוכחי:
sudo lspci | grep -e "gVNIC" -e "Virtio network device"לדוגמה, אם המכונה הווירטואלית משתמשת ב-
ens4כממשק הרשת, מספר חריץ ה-PCI הוא00:04.0.מפסיקים את ממשק הרשת שמחובר למתאם הרשת:
sudo ip link set NETWORK_INTERFACE_NAME downמחליפים את
NETWORK_INTERFACE_NAMEבשם של ממשק הרשת שצוין ברשתות ה-VPC. כדי לראות באיזה ממשק רשת המכונה הווירטואלית משתמשת, צריך להציג את ההגדרה של ממשק הרשת:sudo ifconfigמבצעים הכפפה של DPDK לדרייבר:
sudo dpdk-devbind.py --bind=DRIVER PCI_SLOT_NUMBERמחליפים את מה שכתוב בשדות הבאים:
DRIVER: הדרייבר שאליו צריך לקשור את DPDK. מציינים אחד מהערכים הבאים:מנהל התקן UIO:
igb_uioדרייבר VFIO ללא IOMMU:
vfio-pci
PCI_SLOT_NUMBER: מספר חריץ ה-PCI של ממשק הרשת הנוכחי בפורמט00:0NUMBER.0.
יוצרים את הספרייה
/mnt/huge, ואז יוצרים כמה דפי ענק לשימוש של DPDK במאגרי מידע:sudo mkdir /mnt/huge sudo mount -t hugetlbfs -o pagesize=1G none /mnt/huge sudo bash -c 'echo 4 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages' sudo bash -c 'echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages'כדי לבדוק ש-DPDK יכול להשתמש בממשק הרשת שיצרתם בשלבים הקודמים, מריצים את אפליקציית הדוגמה
testpmdשכלולה בספריות DPDK:sudo ./build/app/dpdk-testpmdמידע נוסף על בדיקת DPDK זמין במאמר Testpmd Command-line Options.
ביטול ההגדרה כספק של DPDK
אחרי שמשתמשים ב-DPDK, אפשר לבטל את הקישור שלו לדרייבר שהתקנתם בקטע הקודם. כדי לבטל את הקישור של DPDK, מבצעים את השלבים הבאים:
מבטלים את הקישור של DPDK למנהל ההתקן:
sudo dpdk-devbind.py -u PCI_SLOT_NUMBERמחליפים את
PCI_SLOT_NUMBERבמספר חריץ ה-PCI שציינתם בשלבים הקודמים. אם רוצים לאמת את מספר חריץ ה-PCI של ממשק הרשת הנוכחי:sudo lspci | grep -e "gVNIC" -e "Virtio network device"לדוגמה, אם המכונה הווירטואלית משתמשת ב-
ens4כממשק הרשת, מספר חריץ ה-PCI הוא00:04.0.טוענים מחדש את מנהל ההתקן של הרשת ב-Compute Engine:
sudo bash -c 'echo PCI_SLOT_NUMBER > /sys/bus/pci/drivers/VNIC_DIRECTORY/bind' sudo ip link set NETWORK_INTERFACE_NAME upמחליפים את מה שכתוב בשדות הבאים:
PCI_SLOT_NUMBER: מספר חריץ ה-PCI שציינתם בשלבים הקודמים.
VNIC_DIRECTORY: הספרייה של כרטיס ה-vNIC. בהתאם לסוג כרטיס ה-NIC הווירטואלי שבו אתם משתמשים, מציינים אחד מהערכים הבאים:gVNIC:
gvnicVirtIO-Net:
virtio-pci
NETWORK_INTERFACE_NAME: השם של ממשק הרשת שציינתם בקטע הקודם.