1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright(c) 2017 Cavium, Inc 3 4.. _pmd_build_and_test: 5 6Compiling and testing a PMD for a NIC 7===================================== 8 9This section demonstrates how to compile and run a Poll Mode Driver (PMD) for 10the available Network Interface Cards in DPDK using TestPMD. 11 12TestPMD is one of the reference applications distributed with the DPDK. Its main 13purpose is to forward packets between Ethernet ports on a network interface and 14as such is the best way to test a PMD. 15 16Refer to the :ref:`testpmd application user guide <testpmd_ug>` for detailed 17information on how to build and run testpmd. 18 19Driver Compilation 20------------------ 21 22To compile a PMD for a platform, run make with appropriate target as shown below. 23Use "make" command in Linux and "gmake" in FreeBSD. This will also build testpmd. 24 25To check available targets: 26 27.. code-block:: console 28 29 cd <DPDK-source-directory> 30 make showconfigs 31 32Example output: 33 34.. code-block:: console 35 36 arm-armv7a-linuxapp-gcc 37 arm64-armv8a-linuxapp-gcc 38 arm64-dpaa2-linuxapp-gcc 39 arm64-thunderx-linuxapp-gcc 40 arm64-xgene1-linuxapp-gcc 41 i686-native-linuxapp-gcc 42 i686-native-linuxapp-icc 43 ppc_64-power8-linuxapp-gcc 44 x86_64-native-bsdapp-clang 45 x86_64-native-bsdapp-gcc 46 x86_64-native-linuxapp-clang 47 x86_64-native-linuxapp-gcc 48 x86_64-native-linuxapp-icc 49 x86_x32-native-linuxapp-gcc 50 51To compile a PMD for Linux x86_64 gcc target, run the following "make" command: 52 53.. code-block:: console 54 55 make install T=x86_64-native-linuxapp-gcc 56 57Use ARM (ThunderX, DPAA, X-Gene) or PowerPC target for respective platform. 58 59For more information, refer to the :ref:`Getting Started Guide for Linux <linux_gsg>` 60or :ref:`Getting Started Guide for FreeBSD <freebsd_gsg>` depending on your platform. 61 62Running testpmd in Linux 63------------------------ 64 65This section demonstrates how to setup and run ``testpmd`` in Linux. 66 67#. Mount huge pages: 68 69 .. code-block:: console 70 71 mkdir /mnt/huge 72 mount -t hugetlbfs nodev /mnt/huge 73 74#. Request huge pages: 75 76 Hugepage memory should be reserved as per application requirement. Check 77 hugepage size configured in the system and calculate the number of pages 78 required. 79 80 To reserve 1024 pages of 2MB: 81 82 .. code-block:: console 83 84 echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages 85 86 .. note:: 87 88 Check ``/proc/meminfo`` to find system hugepage size: 89 90 .. code-block:: console 91 92 grep "Hugepagesize:" /proc/meminfo 93 94 Example output: 95 96 .. code-block:: console 97 98 Hugepagesize: 2048 kB 99 100#. Load ``igb_uio`` or ``vfio-pci`` driver: 101 102 .. code-block:: console 103 104 modprobe uio 105 insmod ./x86_64-native-linuxapp-gcc/kmod/igb_uio.ko 106 107 or 108 109 .. code-block:: console 110 111 modprobe vfio-pci 112 113#. Setup VFIO permissions for regular users before binding to ``vfio-pci``: 114 115 .. code-block:: console 116 117 sudo chmod a+x /dev/vfio 118 119 sudo chmod 0666 /dev/vfio/* 120 121#. Bind the adapters to ``igb_uio`` or ``vfio-pci`` loaded in the previous step: 122 123 .. code-block:: console 124 125 ./usertools/dpdk-devbind.py --bind igb_uio DEVICE1 DEVICE2 ... 126 127 Or setup VFIO permissions for regular users and then bind to ``vfio-pci``: 128 129 .. code-block:: console 130 131 ./usertools/dpdk-devbind.py --bind vfio-pci DEVICE1 DEVICE2 ... 132 133 .. note:: 134 135 DEVICE1, DEVICE2 are specified via PCI "domain:bus:slot.func" syntax or 136 "bus:slot.func" syntax. 137 138#. Start ``testpmd`` with basic parameters: 139 140 .. code-block:: console 141 142 ./x86_64-native-linuxapp-gcc/app/testpmd -l 0-3 -n 4 -- -i 143 144 Successful execution will show initialization messages from EAL, PMD and 145 testpmd application. A prompt will be displayed at the end for user commands 146 as interactive mode (``-i``) is on. 147 148 .. code-block:: console 149 150 testpmd> 151 152 Refer to the :ref:`testpmd runtime functions <testpmd_runtime>` for a list 153 of available commands. 154