Linux VMs with the Microsoft Azure Network Adapter
Learn how to use the Microsoft Azure Network Adapter (MANA) to improve the performance and availability of Linux virtual machines (VMs) in Azure.
For Windows support, see Windows VMs with the Microsoft Azure Network Adapter.
For more info about MANA, see Microsoft Azure Network Adapter overview.
Important
MANA is currently in preview. For legal terms that apply to Azure features that are in beta, in preview, or otherwise not yet released into general availability, see the Supplemental Terms of Use for Microsoft Azure Previews.
Supported Azure Marketplace images
Several Linux images from Azure Marketplace have built-in support for the Ethernet driver in MANA:
- Ubuntu 20.04 LTS
- Ubuntu 22.04 LTS
- Red Hat Enterprise Linux 8.8
- Red Hat Enterprise Linux 9.2
- SUSE Linux Enterprise Server 15 SP4
- Debian 12 "Bookworm"
- Oracle Linux 9.0
Note
None of the current Linux distributions in Azure Marketplace are on a 6.2 or later kernel, which is required for RDMA/InfiniBand and Data Plane Development Kit (DPDK). If you use an existing Linux image from Azure Marketplace, you need to update the kernel.
Check the status of MANA support
Because the MANA feature set requires both host hardware and VM software components, you must perform the following checks to ensure that MANA is working properly on your VM.
Azure portal check
Ensure that Accelerated Networking is enabled on at least one of your NICs:
- On the Azure portal page for the VM, select Networking from the left menu.
- On the Networking settings page, for Network Interface, select your NIC.
- On the NIC Overview pane, under Essentials, note whether Accelerated Networking is set to Enabled or Disabled.
Hardware check
When you enable Accelerated Networking, you can identify the underlying MANA NIC as a PCI device in the virtual machine:
$ lspci
7870:00:00.0 Ethernet controller: Microsoft Corporation Device 00ba
Kernel version check
Verify that your VM has a MANA Ethernet driver installed:
$ 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
Update the kernel
Ethernet drivers for MANA are included in kernel version 5.15 and later. Kernel version 6.2 includes Linux support for features such as InfiniBand/RDMA and DPDK. Earlier or forked kernel versions (5.15 and 6.1) require backported support.
To update your VM's Linux kernel, check the documentation for your specific distribution.
Verify that traffic is flowing through MANA
Each virtual NIC (vNIC) that you configure for the VM, with Accelerated Networking enabled, results in two network interfaces in the VM. The following example shows eth0
and enP30832p0s0
in a single-NIC configuration:
$ 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
The eth0
interface is the primary port serviced by the Network Virtual Service Client (NetVSC) driver and the routable interface for the vNIC. The associated enP*
interface represents the MANA Virtual Function (VF) and is bound to the eth0
interface in this case. You can get the packet and byte count of the MANA VF from the routable ethN
interface:
$ 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