了解如何使用 Azure 网络适配器(MANA)提高 Azure 中 Linux virtual machines(VM)的性能和可用性。
有关 Windows 支持,请参阅 Windows VM 与 Azure 网络适配器。
有关 MANA 的详细信息,请参阅 Azure 网络适配器概述。
支持的 Azure 市场 镜像
Azure 市场 中的多个 Linux 映像内置了对 MANA 中以太网驱动程序的支持:
操作系统支持详细信息列在 Azure 加速网络概述。
注意事项
较新的 MANA 功能正在积极开发中,Linux 分发供应商与 Microsoft 合作,通过上游更改更新其内核。 更新节奏因分发供应商而异。 你的系统分发版本和内核版本越新,就越可能包含最新的更新。
检查 MANA 支持的状态
由于 MANA 功能集需要主机硬件和 VM 软件组件,因此必须执行以下检查以确保 MANA 在 VM 上正常工作。
Azure portal检查
确保在至少一个 NIC 上启用了加速网络:
- 在 VM 的Azure portal页上,从左侧菜单中选择Networking。
- 在“网络设置”页面中,在“网络接口”中选择你的 NIC。
- 在“NIC 概述”窗格的“概要”下,查看“加速网络”是设置为“已启用”还是“已禁用”。
硬件检查
启用加速网络后,可以将基础 MANA NIC 识别为虚拟机中的 PCI 设备:
$ lspci
7870:00:00.0 Ethernet controller: Microsoft Corporation Device 00ba
如果看到另一个以太网控制器设备,说明不使用 MANA。 在 后续步骤 中,还应确认 MANA 接口已正确初始化和绑定。
内核版本检查
验证你的 VM 是否已安装 MANA 以太网驱动程序:
$ grep /mana*.ko /lib/modules/$(uname -r)/modules.builtin || find /lib/modules/$(uname -r)/kernel -name mana*.ko*
kernel/drivers/net/ethernet/microsoft/mana/mana.ko
更新内核
MANA 的以太网驱动程序首先在内核版本 5.15 及更高版本中引入上游。 内核 6.2 版本包含对 InfiniBand/RDMA 和 DPDK 等功能的 Linux 支持。 更低的或分支内核版本(5.15 和 6.1)需要向后移植支持。 操作系统支持详细信息列在 Azure 加速网络概述。
若要更新 VM 的 Linux 内核,请查看你的特定发行版的相关文档。
验证流量流经 MANA
为启用了加速网络的 VM 每配置一个虚拟 NIC (vNIC),都将在 VM 中生成两个网络接口。 以下示例演示了单 NIC 配置中的 eth0 和 enP30832p0s0:
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:22:48:71:c2:8c brd ff:ff:ff:ff:ff:ff
alias Network Device
3: enP30832p0s0: <BROADCAST,MULTICAST,CHILD,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP mode DEFAULT group default qlen 1000
link/ether 00:22:48:71:c2:8c brd ff:ff:ff:ff:ff:ff
altname enP30832s1296119428
eth0 接口是由网络虚拟服务客户端 (NetVSC) 驱动程序提供服务的主要端口,也是 vNIC 的可路由接口。 关联的 enP* 接口表示 MANA 虚拟函数 (VF),在本例中,它绑定到 eth0 接口。 你可以从可路由的 ethN 接口获取 MANA VF 的数据包和字节计数:
$ ethtool -S eth0 | grep -E "^[ \t]+vf"
vf_rx_packets: 226418
vf_rx_bytes: 99557501
vf_tx_packets: 300422
vf_tx_bytes: 76231291
vf_tx_dropped: 0
如果与 VF 关联的值为 0 或未递增,则不会使用虚拟函数。