11ab07743SBernard Iremonger.. BSD LICENSE 2b932ebcbSQian Xu Copyright(c) 2010-2015 Intel Corporation. All rights reserved. 31ab07743SBernard Iremonger All rights reserved. 41ab07743SBernard Iremonger 51ab07743SBernard Iremonger Redistribution and use in source and binary forms, with or without 61ab07743SBernard Iremonger modification, are permitted provided that the following conditions 71ab07743SBernard Iremonger are met: 81ab07743SBernard Iremonger 91ab07743SBernard Iremonger * Redistributions of source code must retain the above copyright 101ab07743SBernard Iremonger notice, this list of conditions and the following disclaimer. 111ab07743SBernard Iremonger * Redistributions in binary form must reproduce the above copyright 121ab07743SBernard Iremonger notice, this list of conditions and the following disclaimer in 131ab07743SBernard Iremonger the documentation and/or other materials provided with the 141ab07743SBernard Iremonger distribution. 151ab07743SBernard Iremonger * Neither the name of Intel Corporation nor the names of its 161ab07743SBernard Iremonger contributors may be used to endorse or promote products derived 171ab07743SBernard Iremonger from this software without specific prior written permission. 181ab07743SBernard Iremonger 191ab07743SBernard Iremonger THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 201ab07743SBernard Iremonger "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 211ab07743SBernard Iremonger LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 221ab07743SBernard Iremonger A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 231ab07743SBernard Iremonger OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 241ab07743SBernard Iremonger SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 251ab07743SBernard Iremonger LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 261ab07743SBernard Iremonger DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 271ab07743SBernard Iremonger THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 281ab07743SBernard Iremonger (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 291ab07743SBernard Iremonger OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 301ab07743SBernard Iremonger 313b60ce8cSJohn McNamara.. _linux_gsg_compiling_dpdk: 323b60ce8cSJohn McNamara 332e486e26SSiobhan ButlerCompiling the DPDK Target from Source 342e486e26SSiobhan Butler===================================== 351ab07743SBernard Iremonger 361ab07743SBernard Iremonger.. note:: 371ab07743SBernard Iremonger 3829c67340SJohn McNamara Parts of this process can also be done using the setup script described in 3929c67340SJohn McNamara the :ref:`linux_setup_script` section of this document. 401ab07743SBernard Iremonger 412e486e26SSiobhan ButlerInstall the DPDK and Browse Sources 422e486e26SSiobhan Butler----------------------------------- 431ab07743SBernard Iremonger 442e486e26SSiobhan ButlerFirst, uncompress the archive and move to the uncompressed DPDK source directory: 451ab07743SBernard Iremonger 461ab07743SBernard Iremonger.. code-block:: console 471ab07743SBernard Iremonger 4829c67340SJohn McNamara unzip DPDK-<version>.zip 4929c67340SJohn McNamara cd DPDK-<version> 5029c67340SJohn McNamara 5129c67340SJohn McNamara ls 5229c67340SJohn McNamara app/ config/ examples/ lib/ LICENSE.GPL LICENSE.LGPL Makefile 5329c67340SJohn McNamara mk/ scripts/ tools/ 541ab07743SBernard Iremonger 552e486e26SSiobhan ButlerThe DPDK is composed of several directories: 561ab07743SBernard Iremonger 572e486e26SSiobhan Butler* lib: Source code of DPDK libraries 581ab07743SBernard Iremonger 59980ed498SBruce Richardson* drivers: Source code of DPDK poll-mode drivers 60980ed498SBruce Richardson 612e486e26SSiobhan Butler* app: Source code of DPDK applications (automatic tests) 621ab07743SBernard Iremonger 632e486e26SSiobhan Butler* examples: Source code of DPDK application examples 641ab07743SBernard Iremonger 651ab07743SBernard Iremonger* config, tools, scripts, mk: Framework-related makefiles, scripts and configuration 661ab07743SBernard Iremonger 672e486e26SSiobhan ButlerInstallation of DPDK Target Environments 682e486e26SSiobhan Butler---------------------------------------- 691ab07743SBernard Iremonger 7029c67340SJohn McNamaraThe format of a DPDK target is:: 711ab07743SBernard Iremonger 721ab07743SBernard Iremonger ARCH-MACHINE-EXECENV-TOOLCHAIN 731ab07743SBernard Iremonger 741ab07743SBernard Iremongerwhere: 751ab07743SBernard Iremonger 7629c67340SJohn McNamara* ``ARCH`` can be: ``i686``, ``x86_64``, ``ppc_64`` 771ab07743SBernard Iremonger 78*c711ccb3SDavid Marchand* ``MACHINE`` can be: ``native``, ``power8`` 791ab07743SBernard Iremonger 8029c67340SJohn McNamara* ``EXECENV`` can be: ``linuxapp``, ``bsdapp`` 811ab07743SBernard Iremonger 8229c67340SJohn McNamara* ``TOOLCHAIN`` can be: ``gcc``, ``icc`` 831ab07743SBernard Iremonger 841ab07743SBernard IremongerThe targets to be installed depend on the 32-bit and/or 64-bit packages and compilers installed on the host. 851ab07743SBernard IremongerAvailable targets can be found in the DPDK/config directory. 861ab07743SBernard IremongerThe defconfig\_ prefix should not be used. 871ab07743SBernard Iremonger 881ab07743SBernard Iremonger.. note:: 891ab07743SBernard Iremonger 9029c67340SJohn McNamara Configuration files are provided with the ``RTE_MACHINE`` optimization level set. 9129c67340SJohn McNamara Within the configuration files, the ``RTE_MACHINE`` configuration value is set to native, 921ab07743SBernard Iremonger which means that the compiled software is tuned for the platform on which it is built. 932e486e26SSiobhan Butler For more information on this setting, and its possible values, see the *DPDK Programmers Guide*. 941ab07743SBernard Iremonger 951ab07743SBernard IremongerWhen using the Intel® C++ Compiler (icc), one of the following commands should be invoked for 64-bit or 32-bit use respectively. 9629c67340SJohn McNamaraNotice that the shell scripts update the ``$PATH`` variable and therefore should not be performed in the same session. 971ab07743SBernard IremongerAlso, verify the compiler's installation directory since the path may be different: 981ab07743SBernard Iremonger 991ab07743SBernard Iremonger.. code-block:: console 1001ab07743SBernard Iremonger 1011ab07743SBernard Iremonger source /opt/intel/bin/iccvars.sh intel64 1021ab07743SBernard Iremonger source /opt/intel/bin/iccvars.sh ia32 1031ab07743SBernard Iremonger 10429c67340SJohn McNamaraTo install and make targets, use the ``make install T=<target>`` command in the top-level DPDK directory. 1051ab07743SBernard Iremonger 1061ab07743SBernard IremongerFor example, to compile a 64-bit target using icc, run: 1071ab07743SBernard Iremonger 1081ab07743SBernard Iremonger.. code-block:: console 1091ab07743SBernard Iremonger 1101ab07743SBernard Iremonger make install T=x86_64-native-linuxapp-icc 1111ab07743SBernard Iremonger 1121ab07743SBernard IremongerTo compile a 32-bit build using gcc, the make command should be: 1131ab07743SBernard Iremonger 1141ab07743SBernard Iremonger.. code-block:: console 1151ab07743SBernard Iremonger 1161ab07743SBernard Iremonger make install T=i686-native-linuxapp-gcc 1171ab07743SBernard Iremonger 1181ab07743SBernard IremongerTo prepare a target without building it, for example, if the configuration changes need to be made before compilation, 11929c67340SJohn McNamarause the ``make config T=<target>`` command: 1201ab07743SBernard Iremonger 1211ab07743SBernard Iremonger.. code-block:: console 1221ab07743SBernard Iremonger 1231ab07743SBernard Iremonger make config T=x86_64-native-linuxapp-gcc 1241ab07743SBernard Iremonger 1251ab07743SBernard Iremonger.. warning:: 1261ab07743SBernard Iremonger 12729c67340SJohn McNamara Any kernel modules to be used, e.g. ``igb_uio``, ``kni``, must be compiled with the 128974438fbSBruce Richardson same kernel as the one running on the target. 1292e486e26SSiobhan Butler If the DPDK is not being built on the target machine, 13029c67340SJohn McNamara the ``RTE_KERNELDIR`` environment variable should be used to point the compilation at a copy of the kernel version to be used on the target machine. 1311ab07743SBernard Iremonger 1321ab07743SBernard IremongerOnce the target environment is created, the user may move to the target environment directory and continue to make code changes and re-compile. 1332e486e26SSiobhan ButlerThe user may also make modifications to the compile-time DPDK configuration by editing the .config file in the build directory. 1341ab07743SBernard Iremonger(This is a build-local copy of the defconfig file from the top- level config directory). 1351ab07743SBernard Iremonger 1361ab07743SBernard Iremonger.. code-block:: console 1371ab07743SBernard Iremonger 1381ab07743SBernard Iremonger cd x86_64-native-linuxapp-gcc 1391ab07743SBernard Iremonger vi .config 1401ab07743SBernard Iremonger make 1411ab07743SBernard Iremonger 1421ab07743SBernard IremongerIn addition, the make clean command can be used to remove any existing compiled files for a subsequent full, clean rebuild of the code. 1431ab07743SBernard Iremonger 1442e486e26SSiobhan ButlerBrowsing the Installed DPDK Environment Target 1452e486e26SSiobhan Butler---------------------------------------------- 1461ab07743SBernard Iremonger 147980ed498SBruce RichardsonOnce a target is created it contains all libraries, including poll-mode drivers, and header files for the DPDK environment that are required to build customer applications. 1481ab07743SBernard IremongerIn addition, the test and testpmd applications are built under the build/app directory, which may be used for testing. 149980ed498SBruce RichardsonA kmod directory is also present that contains kernel modules which may be loaded if needed. 1501ab07743SBernard Iremonger 1511ab07743SBernard Iremonger.. code-block:: console 1521ab07743SBernard Iremonger 15329c67340SJohn McNamara ls x86_64-native-linuxapp-gcc 15429c67340SJohn McNamara 1553d61c5ccSThomas Monjalon app build include kmod lib Makefile 1561ab07743SBernard Iremonger 157974438fbSBruce RichardsonLoading Modules to Enable Userspace IO for DPDK 158974438fbSBruce Richardson----------------------------------------------- 1591ab07743SBernard Iremonger 160974438fbSBruce RichardsonTo run any DPDK application, a suitable uio module can be loaded into the running kernel. 16129c67340SJohn McNamaraIn many cases, the standard ``uio_pci_generic`` module included in the Linux kernel 162974438fbSBruce Richardsoncan provide the uio capability. This module can be loaded using the command 1631ab07743SBernard Iremonger 1641ab07743SBernard Iremonger.. code-block:: console 1651ab07743SBernard Iremonger 166974438fbSBruce Richardson sudo modprobe uio_pci_generic 1671ab07743SBernard Iremonger 16829c67340SJohn McNamaraAs an alternative to the ``uio_pci_generic``, the DPDK also includes the igb_uio 1695af3be00SBruce Richardsonmodule which can be found in the kmod subdirectory referred to above. It can 1705af3be00SBruce Richardsonbe loaded as shown below: 1715af3be00SBruce Richardson 1725af3be00SBruce Richardson.. code-block:: console 1735af3be00SBruce Richardson 1745af3be00SBruce Richardson sudo modprobe uio 1755af3be00SBruce Richardson sudo insmod kmod/igb_uio.ko 1765af3be00SBruce Richardson 1775af3be00SBruce Richardson.. note:: 1785af3be00SBruce Richardson 1795af3be00SBruce Richardson For some devices which lack support for legacy interrupts, e.g. virtual function 18029c67340SJohn McNamara (VF) devices, the ``igb_uio`` module may be needed in place of ``uio_pci_generic``. 181974438fbSBruce Richardson 182974438fbSBruce RichardsonSince DPDK release 1.7 onward provides VFIO support, use of UIO is optional 183974438fbSBruce Richardsonfor platforms that support using VFIO. 1841ab07743SBernard Iremonger 1851ab07743SBernard IremongerLoading VFIO Module 1861ab07743SBernard Iremonger------------------- 1871ab07743SBernard Iremonger 18829c67340SJohn McNamaraTo run an DPDK application and make use of VFIO, the ``vfio-pci`` module must be loaded: 1891ab07743SBernard Iremonger 1901ab07743SBernard Iremonger.. code-block:: console 1911ab07743SBernard Iremonger 1921ab07743SBernard Iremonger sudo modprobe vfio-pci 1931ab07743SBernard Iremonger 1941ab07743SBernard IremongerNote that in order to use VFIO, your kernel must support it. 1951ab07743SBernard IremongerVFIO kernel modules have been included in the Linux kernel since version 3.6.0 and are usually present by default, 1961ab07743SBernard Iremongerhowever please consult your distributions documentation to make sure that is the case. 1971ab07743SBernard Iremonger 1981ab07743SBernard IremongerAlso, to use VFIO, both kernel and BIOS must support and be configured to use IO virtualization (such as Intel® VT-d). 1991ab07743SBernard Iremonger 2002e486e26SSiobhan ButlerFor proper operation of VFIO when running DPDK applications as a non-privileged user, correct permissions should also be set up. 201a5d7a3f7SThomas MonjalonThis can be done by using the DPDK setup script (called dpdk-setup.sh and located in the tools directory). 2021ab07743SBernard Iremonger 20329c67340SJohn McNamara.. _linux_gsg_binding_kernel: 20429c67340SJohn McNamara 205974438fbSBruce RichardsonBinding and Unbinding Network Ports to/from the Kernel Modules 20629c67340SJohn McNamara-------------------------------------------------------------- 2071ab07743SBernard Iremonger 2082e486e26SSiobhan ButlerAs of release 1.4, DPDK applications no longer automatically unbind all supported network ports from the kernel driver in use. 209974438fbSBruce RichardsonInstead, all ports that are to be used by an DPDK application must be bound to the 21029c67340SJohn McNamara``uio_pci_generic``, ``igb_uio`` or ``vfio-pci`` module before the application is run. 2112e486e26SSiobhan ButlerAny network ports under Linux* control will be ignored by the DPDK poll-mode drivers and cannot be used by the application. 2121ab07743SBernard Iremonger 2131ab07743SBernard Iremonger.. warning:: 2141ab07743SBernard Iremonger 2152e486e26SSiobhan Butler The DPDK will, by default, no longer automatically unbind network ports from the kernel driver at startup. 216974438fbSBruce Richardson Any ports to be used by an DPDK application must be unbound from Linux* control and 21729c67340SJohn McNamara bound to the ``uio_pci_generic``, ``igb_uio`` or ``vfio-pci`` module before the application is run. 2181ab07743SBernard Iremonger 21929c67340SJohn McNamaraTo bind ports to the ``uio_pci_generic``, ``igb_uio`` or ``vfio-pci`` module for DPDK use, 220974438fbSBruce Richardsonand then subsequently return ports to Linux* control, 2211ab07743SBernard Iremongera utility script called dpdk_nic _bind.py is provided in the tools subdirectory. 2221ab07743SBernard IremongerThis utility can be used to provide a view of the current state of the network ports on the system, 223974438fbSBruce Richardsonand to bind and unbind those ports from the different kernel modules, including the uio and vfio modules. 2241ab07743SBernard IremongerThe following are some examples of how the script can be used. 22529c67340SJohn McNamaraA full description of the script and its parameters can be obtained by calling the script with the ``--help`` or ``--usage`` options. 226974438fbSBruce RichardsonNote that the uio or vfio kernel modules to be used, should be loaded into the kernel before 227a5d7a3f7SThomas Monjalonrunning the ``dpdk-devbind.py`` script. 2281ab07743SBernard Iremonger 2291ab07743SBernard Iremonger.. warning:: 2301ab07743SBernard Iremonger 2311ab07743SBernard Iremonger Due to the way VFIO works, there are certain limitations to which devices can be used with VFIO. 2321ab07743SBernard Iremonger Mainly it comes down to how IOMMU groups work. 2331ab07743SBernard Iremonger Any Virtual Function device can be used with VFIO on its own, but physical devices will require either all ports bound to VFIO, 2341ab07743SBernard Iremonger or some of them bound to VFIO while others not being bound to anything at all. 2351ab07743SBernard Iremonger 2361ab07743SBernard Iremonger If your device is behind a PCI-to-PCI bridge, the bridge will then be part of the IOMMU group in which your device is in. 2371ab07743SBernard Iremonger Therefore, the bridge driver should also be unbound from the bridge PCI device for VFIO to work with devices behind the bridge. 2381ab07743SBernard Iremonger 2391ab07743SBernard Iremonger.. warning:: 2401ab07743SBernard Iremonger 241a5d7a3f7SThomas Monjalon While any user can run the dpdk-devbind.py script to view the status of the network ports, 2421ab07743SBernard Iremonger binding or unbinding network ports requires root privileges. 2431ab07743SBernard Iremonger 2441ab07743SBernard IremongerTo see the status of all network ports on the system: 2451ab07743SBernard Iremonger 2461ab07743SBernard Iremonger.. code-block:: console 2471ab07743SBernard Iremonger 248a5d7a3f7SThomas Monjalon ./tools/dpdk-devbind.py --status 2491ab07743SBernard Iremonger 250974438fbSBruce Richardson Network devices using DPDK-compatible driver 251974438fbSBruce Richardson ============================================ 25229c67340SJohn McNamara 0000:82:00.0 '82599EB 10-GbE NIC' drv=uio_pci_generic unused=ixgbe 25329c67340SJohn McNamara 0000:82:00.1 '82599EB 10-GbE NIC' drv=uio_pci_generic unused=ixgbe 2541ab07743SBernard Iremonger 2551ab07743SBernard Iremonger Network devices using kernel driver 2561ab07743SBernard Iremonger =================================== 25729c67340SJohn McNamara 0000:04:00.0 'I350 1-GbE NIC' if=em0 drv=igb unused=uio_pci_generic *Active* 25829c67340SJohn McNamara 0000:04:00.1 'I350 1-GbE NIC' if=eth1 drv=igb unused=uio_pci_generic 25929c67340SJohn McNamara 0000:04:00.2 'I350 1-GbE NIC' if=eth2 drv=igb unused=uio_pci_generic 26029c67340SJohn McNamara 0000:04:00.3 'I350 1-GbE NIC' if=eth3 drv=igb unused=uio_pci_generic 2611ab07743SBernard Iremonger 2621ab07743SBernard Iremonger Other network devices 2631ab07743SBernard Iremonger ===================== 2641ab07743SBernard Iremonger <none> 2651ab07743SBernard Iremonger 26629c67340SJohn McNamaraTo bind device ``eth1``,``04:00.1``, to the ``uio_pci_generic`` driver: 2671ab07743SBernard Iremonger 2681ab07743SBernard Iremonger.. code-block:: console 2691ab07743SBernard Iremonger 270a5d7a3f7SThomas Monjalon ./tools/dpdk-devbind.py --bind=uio_pci_generic 04:00.1 2711ab07743SBernard Iremonger 2721ab07743SBernard Iremongeror, alternatively, 2731ab07743SBernard Iremonger 2741ab07743SBernard Iremonger.. code-block:: console 2751ab07743SBernard Iremonger 276a5d7a3f7SThomas Monjalon ./tools/dpdk-devbind.py --bind=uio_pci_generic eth1 2771ab07743SBernard Iremonger 27829c67340SJohn McNamaraTo restore device ``82:00.0`` to its original kernel binding: 2791ab07743SBernard Iremonger 2801ab07743SBernard Iremonger.. code-block:: console 2811ab07743SBernard Iremonger 282a5d7a3f7SThomas Monjalon ./tools/dpdk-devbind.py --bind=ixgbe 82:00.0 283