עבודה עם 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, פועלים לפי השלבים הבאים:

  1. מגדירים את יחסי התלות להתקנת DPDK:

    1. אם אתם משתמשים ב-Rocky Linux, צריך להפעיל את מאגר CodeReady Builder ‏ (CRB). אם אתם משתמשים ב-Red Hat Enterprise Linux‏ (RHEL), דלגו על השלב הזה.

      sudo dnf -y config-manager --enable crb
      
    2. מתקינים את החבילות הנדרשות ואת כלי הבנייה:

      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
      
  2. מורידים את המקור של DPDK. צריך להשתמש במאגר dpdk-next-net או בגרסה 26.07 ואילך של גרסת DPDK.

    • dpdk-next-net

      git clone git://dpdk.org/next/dpdk-next-net dpdk-source
      
    • ‫DPDK 26.07 ואילך

      git clone git://dpdk.org/dpdk -b v26.07 dpdk-source
      
  3. מחילים את התיקונים הנדרשים. המקור לתמיכה ב-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
  4. בונים ומתקינים את 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 הפיזי של השרת המארח, קראו את המאמר הגדרת זמן מדויק.