.. _vppinazure: .. toctree:: VPP in Azure ___________________ Before starting, a few notes: * in our configuration we use only DPDK 18.02, since with the newer versions, such as DPDK 18.05, we obtained several problems during VPP installation (mostly related with MLX4 PMD Drivers). * Some of the commands are taken from `Azure’s DPDK page `_. To bring DPDK inside Azure, we perform the following procedure: Firstly, we install the DPDK dependencies: .. code-block:: console $ sudo add-apt-repository ppa:canonical-server/dpdk-azure –y $ sudo apt-get update $ sudo apt-get install -y librdmacm-dev librdmacm1 build-essential libnuma-dev libmnl-dev Then, we download DPDK 18.02: .. code-block:: console $ sudo wget https://fast.dpdk.org/rel/dpdk-18.02.2.tar.xz $ tar -xvf dpdk-18.02.2.tar.xz Finally, we build DPDK, modifying first its configuration files in order to make VPP compatible with MLX4 drivers: Inside config/common_base, modify: .. code-block:: console CONFIG_RTE_BUILD_SHARED_LIB=n CONFIG_RTE_LIBRTE_MLX4_PMD=y CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS=y CONFIG_RTE_LIBRTE_TAP_PMD=y CONFIG_RTE_LIBRTE_FAILSAFE_PMD=y and then: .. code-block:: console $ make config T=x86_64-native-linuxapp-gcc $ sed -ri 's,(MLX._PMD=)n,\1y,' build/.config $ make Finally we build DPDK: .. code-block:: console $ make install T=x86_64-native-linuxapp-gcc DESTDIR=/home/ciscotest/test EXTRA_CFLAGS='-fPIC -pie' And we reboot the instance: .. code-block:: console $ reboot instance After the reboot, we type these commands: .. code-block:: console $ echo 1024 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepages $ mkdir /mnt/huge $ sudo mount -t hugetlbfs nodev /mnt/huge $ grep Huge /proc/meminfo $ modprobe -a ib_uverbs $ cd x86_64-native-linuxapp-gcc/ $ ls $ cd lib/ $ ls $ sudo cp librte_pmd_mlx4_glue.so.18.02.0 /usr/lib **Now we focus on VPP installation:** In our configuration we use VPP 18.07. We perform this procedure in order to install VPP 18.07 with an external DPDK configuration inside Azure. Firstly, we download VPP .. code-block:: console $ git clone https://gerrit.fd.io/r/vpp $ git checkout v18.07 Then, we build VPP, using the external DPDK configuration we previously made: We modify the path inside the vpp.mk file: .. code-block:: console $ build-data/platforms/vpp.mk $ vpp_uses_external_dpdk = yes $ vpp_dpdk_inc_dir = /include/dpdk/ $ vpp_dpdk_lib_dir =/lib is whatever the path used when compiling DPDK above. These paths have to be absolute path in order for it to work. we modify build-data/platforms/vpp.mk to use .. code-block:: console vpp_uses_dpdk_mlx4_pmd = yes .. code-block:: console $ make build $ cd build-root/ $ make V=0 PLATFORM=vpp TAG=vpp install-deb $ sudo dpkg -i *.deb Finally, we modify the startup.conf file: .. code-block:: console $ cd /etc/vpp $ sudo nano startup.conf Inside the DPDK block, the following commands: .. code-block:: console ## Whitelist specific interface by specifying PCI address dev 000X:00:0X.0 dev 000X:00:0X.0 # Running failsafe vdev net_vdev_netvsc0,iface=eth1 vdev net_vdev_netvsc1,iface=eth2 *Please refer to Azure DPDK document to pick the right iface to use for failsafe vdev.* and finally: .. code-block:: console $ sudo service vpp stop $ sudo service vpp start $ sudo service vpp status $ sudo vppctl Now VPP will work inside Azure!