עבודה עם DPDK
בדף הזה מוסבר איך להשתמש ב-Data Plane Development Kit (DPDK) במכונות U4C של Compute Engine.
מידע על DPDK במופעי U4C
Data Plane Development Kit (DPDK) הוא מסגרת לאפליקציות שדורשות ביצועים גבוהים, עיבוד מהיר של חבילות, זמן אחזור קצר וביצועים עקביים. DPDK עוקף את מקבץ הרשת (network stack) של ליבת Linux ופועל ישירות במרחב הפעולה של המשתמש.
מכונות U4C תומכות ב-DPDK באמצעות מנהל התקן למצב סקר (PMD) של כרטיס רשת וירטואלי של Google (gVNIC).
אחרי שמתקינים את DPDK, אפשר להגדיר את תכונות הדרייבר באמצעות ממשקי ה-API הרגילים של ethdev ו-rte_flow.
השימוש ב-DPDK עם פתרון ULL כולל תמיכה בניתוב זרימה. אתם יכולים לעקוף את הגיבוב (hashing) של ברירת המחדל של Receive Side Scaling (RSS) על ידי ניתוב של זרמי תנועה ספציפיים ישירות אל תור קבלה (RX) ייעודי. פתרון ה-ULL תומך בניתוב תעבורת נתונים של 3-tuple (פרוטוקול, כתובת IP של היעד ויציאת היעד) לתעבורת נתונים של ULL unicast ו-multicast.
בנוסף, ה-PMD של gVNIC תומך בחותמות זמן של חומרה RX ב-mbufs ובקריאות שעון דרך rte_eth_read_clock.
מגבלות
יש מגבלות על השימוש ב-DPDK במופעי U4C:
- אין תמיכה במופעי Bare Metal בגרסת ה-DPDK הראשית או במאגר
dpdk-next-net. צריך להחיל את התיקונים הנדרשים לפי השלבים שמפורטים בקטע התקנת DPDK במכונה של U4C. - כשמגדירים זמן מדויק למופע U4C שמשתמש ב-DPDK בממשקי הרשת ULL שלו (
nic1ו-nic2), צריך להגדיר אתchronyכך שישתמש ב-nic0כמקור לסנכרון הזמן.
לפני שמתחילים
כדי לעבוד עם DPDK במכונות U4C של Compute Engine, צריך לעמוד בדרישות הבאות.
יצירת מכונה של U4C
אם עדיין לא עשיתם את זה, צרו מכונה פיזית של U4C. יצירת מכונות ULL של Compute Engine
התחברות למכונה באמצעות SSH
אם עוד לא עשיתם זאת, מתחברים למופע באמצעות SSH.
התקנת DPDK במכונה של U4C
כדי להתקין את DPDK במכונת U4C, פועלים לפי השלבים הבאים:
מגדירים את יחסי התלות להתקנת DPDK:
אם אתם משתמשים ב-Rocky Linux, צריך להפעיל את מאגר CodeReady Builder (CRB). אם אתם משתמשים ב-Red Hat Enterprise Linux (RHEL), דלגו על השלב הזה.
sudo dnf -y config-manager --enable crbמתקינים את החבילות הנדרשות ואת כלי הבנייה:
sudo dnf install -y git gcc gcc-c++ make ninja-build python3-pip \ kernel-devel-$(uname -r) pkgconf-pkg-config numactl-devel sudo pip install pyelftools meson
מורידים את המקור של DPDK. צריך להשתמש במאגר
dpdk-next-netאו בגרסה 26.07 ואילך של גרסת DPDK.dpdk-next-netgit clone git://dpdk.org/next/dpdk-next-net dpdk-sourceDPDK 26.07 ואילך
git clone git://dpdk.org/dpdk -b v26.07 dpdk-source
מחילים את התיקונים הנדרשים. המקור לתמיכה ב-bare metal מתארח בענף
dpdk-bmבמאגרcompute-virtual-ethernet-dpdkשל Google. התיקונים תואמים ל-ABI של המאגרdpdk-next-net.אפשר להחיל את התיקונים באמצעות העתקה מילולית או באמצעות שיטת cherry-pick. מבצעים אחת מהפעולות הבאות בהתאם לתהליך העבודה המועדף:
העתקה מילה במילה
git clone https://github.com/google/compute-virtual-ethernet-dpdk -b dpdk-bm dpdk-bm cp -r dpdk-bm/drivers/net/gve/* dpdk-source/drivers/net/gve/ cd dpdk-source
בחירה סלקטיבית
cd dpdk-source git remote add gve-bm https://github.com/google/compute-virtual-ethernet-dpdk git fetch gve-bm git cherry-pick gve-bm/main..gve-bm/dpdk-bm
בונים ומתקינים את DPDK:
meson setup build sudo ninja -C build install; sudo ldconfig
איגוד DPDK לדרייבר
צריך לקשר את ממשקי הרשת של המופע לדרייבר של ליבת מערכת שמתאים ל-DPDK, כמו שמתואר במאמר קישור DPDK לדרייבר ובדיקתו.
במכונות Bare Metal מסוג U4C, חשוב לשים לב לנקודות הבאות:
- במכונות Bare Metal לא צריך את מנהלי ההתקנים של UIO או VFIO ללא IOMMU, שמשמשים במכונות וירטואליות. אפשר לקשר ישירות למנהל ההתקן הרגיל של
vfio-pci. - אפשר לקשר רק את ממשקי הרשת של ULL (
nic1ו-nic2) למנהל ההתקן של DPDK. nic0חייב להישאר מקושר למנהל ההתקן הרגיל של הליבה כדי לשמור על הקישוריות לרשת ולתמוך בסנכרון הזמן.
מידע נוסף זמין במאמר Binding and Unbinding Network Ports to/from the Kernel Modules במסמכי התיעוד של DPDK.
המאמרים הבאים
- כדי לסנכרן את השעון של המכונה עם השעון של ה-NIC הפיזי של השרת המארח, קראו את המאמר הגדרת זמן מדויק.