إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
Microsoft Azure Network Adapter (MANA) هو جهاز جديد لأجهزة Azure الظاهرية لتمكين معدل نقل وموثوقية أعلى. للاستفادة من MANA، يجب على المستخدمين تعديل إجراءات تهيئة DPDK الخاصة بهم. تتطلب MANA تغييرين مقارنة بالأجهزة القديمة:
- تختلف وسيطات MANA EAL لبرنامج تشغيل وضع الاستقصاء (PMD) عن الأجهزة السابقة.
- يجب أن تحرر نواة Linux التحكم في واجهات شبكة MANA قبل بدء تهيئة DPDK.
يتم توضيح إجراء الإعداد ل MANA DPDK في مثال التعليمات البرمجية.
مقدمة
تعتمد أجهزة Azure Linux الظاهرية القديمة على برامج تشغيل mlx4 أو mlx5 والأجهزة المصاحبة للشبكات المتسارعة. سيحدد مستخدمو Azure DPDK واجهات معينة لتضمينها أو استبعادها عن طريق تمرير عناوين الناقل إلى DPDK EAL. يختلف إجراء الإعداد ل MANA DPDK قليلا، لأن افتراض عنوان ناقل واحد لكل واجهة شبكة مسرعة لم يعد صحيحا. بدلا من استخدام عنوان ناقل PCI، يستخدم MANA PMD عنوان MAC لتحديد الواجهة التي يجب ربطها بها.
وسيطات MANA DPDK EAL
تقوم الدالة MANA PMD بالتحقيق في جميع الأجهزة والمنافذ على النظام عندما لا تكون هناك وسيطة --vdev ؛ الوسيطة --vdev ليست إلزامية. في بيئات الاختبار، غالبا ما يكون من المستحسن ترك واجهة واحدة (أساسية) متاحة لخدمة اتصال SSH بالجهاز الظاهري. لاستخدام DPDK مع مجموعة فرعية من VFs المتوفرة، يجب على المستخدمين تمرير كل من عنوان ناقل جهاز MANA وعنوان MAC للواجهات في الوسيطة --vdev . لمزيد من التفاصيل، يتوفر مثال للتعليمات البرمجية لإظهار تهيئة DPDK EAL على MANA.
للحصول على معلومات عامة حول طبقة تجريد بيئة DPDK (EAL):
متطلبات DPDK ل MANA
يتطلب استخدام DPDK على أجهزة MANA نواة Linux 6.2 أو أحدث أو منفذا خلفيا لبرامج تشغيل Ethernet و InfiniBand من أحدث نواة Linux. كما يتطلب إصدارات محددة من DPDK وبرامج تشغيل مساحة المستخدم.
يتطلب MANA DPDK المجموعة التالية من برامج التشغيل:
- برنامج تشغيل Linux kernel Ethernet (5.15 kernel والإحدث)
- برنامج تشغيل Linux kernel InfiniBand (6.2 kernel والإصدارات الأحدث)
- برنامج تشغيل وضع الاستقصاء DPDK MANA (DPDK 22.11 والإحدث)
- برامج تشغيل Libmana user-space (rdma-core v44 والإحدث)
صور السوق المدعومة
قائمة غير مشبعة بالصور مع تصحيحات خلفية ل DPDK مع MANA:
- Red Hat Enterprise Linux 8.9
- Red Hat Enterprise Linux 9.4
- Canonical Ubuntu Server 20.04 (5.15.0-1045-azure)
- Canonical Ubuntu Server 22.04 (5.15.0-1045-azure)
إشعار
MANA DPDK غير متوفر لنظام التشغيل Windows؛ سيعمل فقط على أجهزة Linux الظاهرية.
مثال: التحقق من وجود MANA
إشعار
تفترض هذه المقالة تثبيت حزمة pciutils التي تحتوي على الأمر lspci على النظام.
# check for pci devices with ID:
# vendor: Microsoft Corporation (1414)
# class: Ethernet Controller (0200)
# device: Microsoft Azure Network Adapter VF (00ba)
if [[ -n `lspci -d 1414:00ba:0200` ]]; then
echo "MANA device is available."
else
echo "MANA was not detected."
fi
مثال: تثبيت DPDK (Ubuntu 22.04)
إشعار
تفترض هذه المقالة تثبيت النواة المتوافقة وrdma-core على النظام.
DEBIAN_FRONTEND=noninteractive sudo apt-get install -q -y build-essential libudev-dev libnl-3-dev libnl-route-3-dev ninja-build libssl-dev libelf-dev python3-pip meson libnuma-dev
pip3 install pyelftools
# Try latest LTS DPDK, example uses DPDK tag v23.07-rc3
git clone https://github.com/DPDK/dpdk.git -b v23.07-rc3 --depth 1
pushd dpdk
meson build
cd build
ninja
sudo ninja install
popd
مثال: إعداد Testpmd واختبار netvsc
لاحظ التعليمات البرمجية المثال التالي لتشغيل DPDK مع MANA. يوصى بتكوين 'netvsc' المباشر إلى vf على Azure للحصول على أقصى أداء مع MANA.
إشعار
يتطلب DPDK تمكين صفحات ضخمة بحجم 2 ميغابايت أو 1 غيغابايت. يفترض المثال جهاز Azure الظاهري مع 2 NIC شبكة متسارعة مرفقة.
# Enable 2MB hugepages.
echo 1024 | tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages
# Assuming use of eth1 for DPDK in this demo
PRIMARY="eth1"
# $ ip -br link show master eth1
# > enP30832p0s0 UP f0:0d:3a:ec:b4:0a <... # truncated
# grab interface name for device bound to primary
SECONDARY="`ip -br link show master $PRIMARY | awk '{ print $1 }'`"
# Get mac address for MANA interface (should match primary)
MANA_MAC="`ip -br link show master $PRIMARY | awk '{ print $3 }'`"
# $ ethtool -i enP30832p0s0 | grep bus-info
# > bus-info: 7870:00:00.0
# get MANA device bus info to pass to DPDK
BUS_INFO="`ethtool -i $SECONDARY | grep bus-info | awk '{ print $2 }'`"
# Set MANA interfaces DOWN before starting DPDK
ip link set $PRIMARY down
ip link set $SECONDARY down
## Move synthetic channel to user mode and allow it to be used by NETVSC PMD in DPDK
DEV_UUID=$(basename $(readlink /sys/class/net/$PRIMARY/device))
NET_UUID="f8615163-df3e-46c5-913f-f2d2f965ed0e"
modprobe uio_hv_generic
echo $NET_UUID > /sys/bus/vmbus/drivers/uio_hv_generic/new_id
echo $DEV_UUID > /sys/bus/vmbus/drivers/hv_netvsc/unbind
echo $DEV_UUID > /sys/bus/vmbus/drivers/uio_hv_generic/bind
# MANA single queue test
dpdk-testpmd -l 1-3 --vdev="$BUS_INFO,mac=$MANA_MAC" -- --forward-mode=txonly --auto-start --txd=128 --rxd=128 --stats 2
# MANA multiple queue test (example assumes > 9 cores)
dpdk-testpmd -l 1-6 --vdev="$BUS_INFO,mac=$MANA_MAC" -- --forward-mode=txonly --auto-start --nb-cores=4 --txd=128 --rxd=128 --txq=8 --rxq=8 --stats 2
استكشاف الأخطاء وإصلاحها
فشل في تعيين الواجهة لأسفل.
يمكن أن يؤدي الفشل في تعيين الجهاز المرتبط ب MANA إلى DOWN إلى انخفاض أو انعدام معدل نقل الحزمة. يمكن أن يؤدي الفشل في تحرير الجهاز إلى ظهور رسالة خطأ EAL المتعلقة بإرسال قوائم الانتظار.
mana_start_tx_queues(): Failed to create qp queue index 0
mana_dev_start(): failed to start tx queues -19
فشل تمكين الصفحات الضخمة.
حاول تمكين الصفحات الضخمة والتأكد من أن المعلومات مرئية في meminfo.
EAL: No free 2048 kB hugepages reported on node 0
EAL: FATAL: Cannot get hugepage information.
EAL: Cannot get hugepage information.
EAL: Error - exiting with code: 1
Cause: Cannot init EAL: Permission denied
معدل نقل منخفض باستخدام --vdev="net_vdev_netvsc0,iface=eth1"
لا يوصى بتكوين تجاوز الفشل إما net_failsafe لبرامج التشغيل أو net_vdev_netvsc وضع الاستقصاء للحصول على أداء عال على Azure. قد يعطي تكوين netvsc مع DPDK الإصدار 20.11 أو أعلى نتائج أفضل. للحصول على الأداء الأمثل، تأكد من أن حزم Linux kernel وrdma-core وDPDK تفي بالمتطلبات المدرجة ل DPDK و MANA.
عدم تطابق الإصدار ل rdma-core
يمكن أن يحدث عدم التطابق في rdma-core وlinux kernel في أي وقت؛ غالبا ما تحدث عندما يقوم المستخدم ببناء مجموعة من rdma-core وDPDK وlinux kernel من المصدر. يمكن أن يؤدي هذا النوع من عدم تطابق الإصدار إلى فشل فحص الدالة الظاهرية MANA (VF).
EAL: Probe PCI driver: net_mana (1414:ba) device: 7870:00:00.0 (socket 0)
mana_arg_parse_callback(): key=mac value=00:0d:3a:76:3b:d0 index=0
mana_init_once(): MP INIT PRIMARY
mana_pci_probe_mac(): Probe device name mana_0 dev_name uverbs0 ibdev_path /sys/class/infiniband/mana_0
mana_probe_port(): device located port 2 address 00:0D:3A:76:3B:D0
mana_probe_port(): ibv_alloc_parent_domain failed port 2
mana_pci_probe_mac(): Probe on IB port 2 failed -12
EAL: Requested device 7870:00:00.0 cannot be used
EAL: Bus (pci) probe failed.
hn_vf_attach(): Couldn't find port for VF
hn_vf_add(): RNDIS reports VF but device not found, retrying
من المحتمل أن ينتج هذا عن استخدام نواة مع تصحيحات backported mana_ib مع إصدار أحدث من rdma-core. السبب الجذري هو التفاعل بين برامج تشغيل kernel RDMA ومكتبات rdma-core لمساحة المستخدم.
يحتوي Linux kernel uapi ل RDMA على قائمة بمعرفات موفر RDMA، في الإصدارات المدعومة من kernel يمكن أن تختلف قيمة المعرف هذه عن الإصدار في مكتبات rdma-core.
{! ملاحظة} أمثلة القصاصات البرمجية هي من Ubuntu 5.150-1045 linux-azure وrdma-core v46.0
// Linux kernel header
// include/uapi/rdma/ib_user_ioctl_verbs.h
enum rdma_driver_id {
RDMA_DRIVER_UNKNOWN,
RDMA_DRIVER_MLX5,
RDMA_DRIVER_MLX4,
RDMA_DRIVER_CXGB3,
RDMA_DRIVER_CXGB4,
RDMA_DRIVER_MTHCA,
RDMA_DRIVER_BNXT_RE,
RDMA_DRIVER_OCRDMA,
RDMA_DRIVER_NES,
RDMA_DRIVER_I40IW,
RDMA_DRIVER_IRDMA = RDMA_DRIVER_I40IW,
RDMA_DRIVER_VMW_PVRDMA,
RDMA_DRIVER_QEDR,
RDMA_DRIVER_HNS,
RDMA_DRIVER_USNIC,
RDMA_DRIVER_RXE,
RDMA_DRIVER_HFI1,
RDMA_DRIVER_QIB,
RDMA_DRIVER_EFA,
RDMA_DRIVER_SIW,
RDMA_DRIVER_MANA, //<- MANA added as last member of enum after backporting
};
// Example mismatched rdma-core ioctl verbs header
// on github: kernel-headers/rdma/ib_user_ioctl_verbs.h
// or in release tar.gz: include/rdma/ib_user_ioctl_verbs.h
enum rdma_driver_id {
RDMA_DRIVER_UNKNOWN,
RDMA_DRIVER_MLX5,
RDMA_DRIVER_MLX4,
RDMA_DRIVER_CXGB3,
RDMA_DRIVER_CXGB4,
RDMA_DRIVER_MTHCA,
RDMA_DRIVER_BNXT_RE,
RDMA_DRIVER_OCRDMA,
RDMA_DRIVER_NES,
RDMA_DRIVER_I40IW,
RDMA_DRIVER_IRDMA = RDMA_DRIVER_I40IW,
RDMA_DRIVER_VMW_PVRDMA,
RDMA_DRIVER_QEDR,
RDMA_DRIVER_HNS,
RDMA_DRIVER_USNIC,
RDMA_DRIVER_RXE,
RDMA_DRIVER_HFI1,
RDMA_DRIVER_QIB,
RDMA_DRIVER_EFA,
RDMA_DRIVER_SIW,
RDMA_DRIVER_ERDMA, // <- This upstream has two additional providers
RDMA_DRIVER_MANA, // <- So MANA's ID in the enum does not match
};
يؤدي عدم التطابق هذا إلى فشل تحميل التعليمات البرمجية لموفر MANA. استخدم gdb لتتبع تنفيذ dpdk-testpmd لتأكيد تحميل موفر ERDMA بدلا من موفر MANA. يجب أن تكون driver_id MANA متسقة لكل من النواة وrdma-core. يتم تحميل MANA PMD بشكل صحيح عندما تتطابق هذه المعرفات.