Arm Community
Arm Community
  • Site
  • User
  • Site
  • Search
  • User
  • Groups
    • Research Collaboration and Enablement
    • DesignStart
    • Education Hub
    • Innovation
    • Open Source Software and Platforms
  • Forums
    • AI and ML forum
    • Architectures and Processors forum
    • Arm Development Platforms forum
    • Arm Development Studio forum
    • Arm Virtual Hardware forum
    • Automotive forum
    • Compilers and Libraries forum
    • Graphics, Gaming, and VR forum
    • High Performance Computing (HPC) forum
    • Infrastructure Solutions forum
    • Internet of Things (IoT) forum
    • Keil forum
    • Morello Forum
    • Operating Systems forum
    • SoC Design and Simulation forum
    • 中文社区论区
  • Blogs
    • AI and ML blog
    • Announcements
    • Architectures and Processors blog
    • Automotive blog
    • Graphics, Gaming, and VR blog
    • High Performance Computing (HPC) blog
    • Infrastructure Solutions blog
    • Innovation blog
    • Internet of Things (IoT) blog
    • Operating Systems blog
    • Research Articles
    • SoC Design and Simulation blog
    • Tools, Software and IDEs blog
    • 中文社区博客
  • Support
    • Arm Support Services
    • Documentation
    • Downloads
    • Training
    • Arm Approved program
    • Arm Design Reviews
  • Community Help
  • More
  • Cancel
Arm Community blogs
Arm Community blogs
Tools, Software and IDEs blog Chapter 1: VPP on Arm: Installing MLNX_OFED, for using Mellanox Cards
  • Blogs
  • Mentions
  • Sub-Groups
  • Tags
  • Jump...
  • Cancel
More blogs in Arm Community blogs
  • AI and ML blog

  • Announcements

  • Architectures and Processors blog

  • Automotive blog

  • Embedded blog

  • Graphics, Gaming, and VR blog

  • High Performance Computing (HPC) blog

  • Infrastructure Solutions blog

  • Internet of Things (IoT) blog

  • Operating Systems blog

  • SoC Design and Simulation blog

  • Tools, Software and IDEs blog

Tags
  • Server Software
  • networking
  • Tutorial
  • Linux
Actions
  • RSS
  • More
  • Cancel
Related blog posts
Related forum threads

Chapter 1: VPP on Arm: Installing MLNX_OFED, for using Mellanox Cards

Sirshak Das
Sirshak Das
October 2, 2018
2 minute read time.

This is Chapter One of VPP on Arm (VPP is one of the projects from fd.io - Fast Data Input/Output collection of projects).

What is VPP?

VPP stands for Vector Packet Processing, it is the open source version of Cisco's Vector Packet Processing Software. VPP is a framework/toolkit which provides the functionality of Router/Switch in userspace. You can read more on What is VPP?

Even before we get started with VPP and running external traffic we need a NIC. The first ones I encountered were Mellanox NICs (CX-4 and CX-5).

In order to access the NIC in userspace, VPP can sometimes use DPDK (Data Plane Development Toolkit).

The Curious Case of Mellanox Cards

Anyone familiar with DPDK would know that DPDK consists of different Userspace Poll Mode Drivers (PMD). The manner in which they operate is: The control of the Interface is taken away from Kernel using Kernel Modules like igb_uio, vfio_pci (although you can still do Flow Bifurcation).

Mellanox Cards, however, operate in what is popularly known as the Bifurcated Driver Model, i.e. control of the NIC is still with the Kernel but Userspace PMD can directly access data plane.

In order to achieve this, you need a bunch of Kernel Modules and Verb libraries on top of which the PMD is built (libibverbs, libmlnx4/5). All of these are provided by Mellanox MOFED on their website; Mellanox OpenFabrics Enterprise Distribution.

Installing from Source

This is usually the price you have to pay when you are the new kid in town, although you can find binary versions for older Distributions along with the older versions of MOFED.

In order to see all the possible versions for download, scroll down and see the downloads tab on the Mellanox product website.

For the purpose of this blog post, I have chosen MOFED version 4.4-2.0.7.0 with OS Distribution (Ubuntu 18.04 - bionic).

At the time of writing the post, I see two architectures (x86_64, ppc64). It doesn't matter which architecture we choose, as we plan to download the source, compile and install it on Arm (aarch64).

Download Source

$ wget http://www.mellanox.com/downloads/ofed/MLNX_OFED-4.4-2.0.7.0/MLNX_OFED_SRC-debian-4.4-2.0.7.0.tgz

Untar and Install

$ tar xzvf MLNX_OFED_SRC-debian-4.4-2.0.7.0.tgz
$ cd MLNX_OFED_SRC-4.4-2.0.7.0/
$ sudo ./install.pl --dpdk --upstream-libs

The installation is likely going to fail with errors suggesting missing dependencies. Please resolve it accordingly.  

Restart Drivers

Once the installation is done please restart the drivers:

$ sudo service openibd restart

Verify

You should see the openibd service running along with the Kernel Modules loaded:

$ sudo service openibd status
● openibd.service - openibd - configure Mellanox devices
   Loaded: loaded (/lib/systemd/system/openibd.service; enabled; vendor preset: enabled)
   Active: active (exited) since Mon 2018-09-24 14:39:34 CDT; 22h ago
     Docs: file:/etc/infiniband/openib.conf
  Process: 956 ExecStart=/etc/init.d/openibd start bootid=1cf2538f8bae4917a21a7cbf7fcf8a8a (code=exited, status=0/SUCCESS)
 Main PID: 956 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 7065)
   CGroup: /system.slice/openibd.service

$ lsmod | grep mlx
mlx5_fpga_tools        24576  0
mlx4_en               180224  0
mlx4_ib               258048  0
mlx4_core             430080  2 mlx4_en,mlx4_ib
mlx5_ib               335872  0
ib_core               364544  10 ib_cm,rdma_cm,ib_umad,ib_uverbs,ib_ipoib,iw_cm,mlx5_ib,ib_ucm,rdma_ucm,mlx4_ib
mlx5_core            1064960  2 mlx5_fpga_tools,mlx5_ib
mlxfw                  24576  1 mlx5_core
devlink                53248  4 mlx4_en,mlx5_core,mlx4_core,mlx4_ib
mlx_compat             16384  15 ib_cm,rdma_cm,ib_umad,ib_core,mlx5_fpga_tools,ib_uverbs,mlx4_en,ib_ipoib,mlx5_core,iw_cm,mlx5_ib,mlx4_core,ib_ucm,rdma_ucm,mlx4_ib
ptp                    28672  3 i40e,mlx4_en,mlx5_core

Summary and peek into the future

This post described source compilation and installation. Ideally it's a architecture independent method. You go with this method only if you don't find the MOFED libraries in binary form, or you want to compile MOFED with a specific compiler (gcc-8 in my case).

Watch out for my next chapter, which I will link to below once live.

Chapter 2: VPP on ARM: Simple IPv4 forwarding Test case using Mellanox NICs(PFs and VFs) 

Anonymous
Tools, Software and IDEs blog
  • What is new in LLVM 16?

    Pablo Barrio
    Pablo Barrio
    Arm contributions from Arm to the new release include the usual architecture and CPU additions and new features such as, function multi-versioning and strict floating point support.
    • May 1, 2023
  • Product update: Arm Development Studio 2023.0 now available

    Ronan Synnott
    Ronan Synnott
    Arm Development Studio 2023.0 now available with support for Arm Neoverse V2 processor.
    • April 27, 2023
  • What is new in LLVM 15?

    Pablo Barrio
    Pablo Barrio
    LLVM 15.0.0 was released on September 6, followed by a series of minor bug-fixing releases. Arm contributed support for new Arm extensions and CPUs.
    • February 27, 2023