doc: improve FreeBSD guide layout
Fixed FreeBSD Getting Started Guide rst layout to improve rendering in PDF. Signed-off-by: John McNamara <john.mcnamara@intel.com>
This commit is contained in:
parent
5465307419
commit
728c9e541d
@ -33,76 +33,63 @@
|
||||
Compiling the DPDK Target from Source
|
||||
=====================================
|
||||
|
||||
.. note::
|
||||
|
||||
Testing has been performed using FreeBSD* 10.0-RELEASE (x86_64) and requires the
|
||||
installation of the kernel sources, which should be included during the
|
||||
installation of FreeBSD*. The DPDK also requires the use of FreeBSD*
|
||||
ports to compile and function.
|
||||
|
||||
System Requirements
|
||||
-------------------
|
||||
|
||||
The DPDK and its applications require the GNU make system (gmake)
|
||||
to build on FreeBSD*. Optionally, gcc may also be used in place of clang
|
||||
to build on FreeBSD. Optionally, gcc may also be used in place of clang
|
||||
to build the DPDK, in which case it too must be installed prior to
|
||||
compiling the DPDK. The installation of these tools is covered in this
|
||||
section.
|
||||
|
||||
Compiling the DPDK requires the FreeBSD kernel sources, which should be
|
||||
included during the installation of FreeBSD* on the development platform.
|
||||
The DPDK also requires the use of FreeBSD* ports to compile and function.
|
||||
included during the installation of FreeBSD on the development platform.
|
||||
The DPDK also requires the use of FreeBSD ports to compile and function.
|
||||
|
||||
To use the FreeBSD* ports system, it is required to update and extract the FreeBSD*
|
||||
To use the FreeBSD ports system, it is required to update and extract the FreeBSD
|
||||
ports tree by issuing the following commands:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
root@host:~ # portsnap fetch
|
||||
root@host:~ # portsnap extract
|
||||
portsnap fetch
|
||||
portsnap extract
|
||||
|
||||
If the environment requires proxies for external communication, these can be set
|
||||
using:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
root@host:~ # setenv http_proxy <my_proxy_host>:<port>
|
||||
root@host:~ # setenv ftp_proxy <my_proxy_host>:<port>
|
||||
setenv http_proxy <my_proxy_host>:<port>
|
||||
setenv ftp_proxy <my_proxy_host>:<port>
|
||||
|
||||
The FreeBSD* ports below need to be installed prior to building the DPDK.
|
||||
In general these can be installed using the following set of commands:
|
||||
The FreeBSD ports below need to be installed prior to building the DPDK.
|
||||
In general these can be installed using the following set of commands::
|
||||
|
||||
#. cd /usr/ports/<port_location>
|
||||
cd /usr/ports/<port_location>
|
||||
|
||||
#. make config-recursive
|
||||
make config-recursive
|
||||
|
||||
#. make install
|
||||
make install
|
||||
|
||||
#. make clean
|
||||
make clean
|
||||
|
||||
Each port location can be found using:
|
||||
Each port location can be found using::
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
user@host:~ # whereis <port_name>
|
||||
whereis <port_name>
|
||||
|
||||
The ports required and their locations are as follows:
|
||||
|
||||
dialog4ports
|
||||
/usr/ports/ports-mgmt/dialog4ports
|
||||
* dialog4ports: ``/usr/ports/ports-mgmt/dialog4ports``
|
||||
|
||||
GNU make(gmake)
|
||||
/usr/ports/devel/gmake
|
||||
* GNU make(gmake): ``/usr/ports/devel/gmake``
|
||||
|
||||
coreutils
|
||||
/usr/ports/sysutils/coreutils
|
||||
* coreutils: ``/usr/ports/sysutils/coreutils``
|
||||
|
||||
For compiling and using the DPDK with gcc, it too must be installed
|
||||
For compiling and using the DPDK with gcc, the compiler must be installed
|
||||
from the ports collection:
|
||||
|
||||
gcc: version 4.8 is recommended
|
||||
/usr/ports/lang/gcc48
|
||||
(Ensure that CPU_OPTS is selected (default is OFF))
|
||||
* gcc: version 4.8 is recommended ``/usr/ports/lang/gcc48``.
|
||||
Ensure that ``CPU_OPTS`` is selected (default is OFF).
|
||||
|
||||
When running the make config-recursive command, a dialog may be presented to the
|
||||
user. For the installation of the DPDK, the default options were used.
|
||||
@ -111,7 +98,7 @@ user. For the installation of the DPDK, the default options were used.
|
||||
|
||||
To avoid multiple dialogs being presented to the user during make install,
|
||||
it is advisable before running the make install command to re-run the
|
||||
make config -recursive command until no more dialogs are seen.
|
||||
make config-recursive command until no more dialogs are seen.
|
||||
|
||||
|
||||
Install the DPDK and Browse Sources
|
||||
@ -121,10 +108,12 @@ First, uncompress the archive and move to the DPDK source directory:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
user@host:~ # unzip DPDK-<version>zip
|
||||
user@host:~ # cd DPDK-<version>
|
||||
user@host:~/DPDK # ls
|
||||
app/ config/ examples/ lib/ LICENSE.GPL LICENSE.LGPL Makefile mk/ scripts/ tools/
|
||||
unzip DPDK-<version>.zip
|
||||
cd DPDK-<version>
|
||||
|
||||
ls
|
||||
app/ config/ examples/ lib/ LICENSE.GPL LICENSE.LGPL Makefile
|
||||
mk/ scripts/ tools/
|
||||
|
||||
The DPDK is composed of several directories:
|
||||
|
||||
@ -139,38 +128,36 @@ The DPDK is composed of several directories:
|
||||
Installation of the DPDK Target Environments
|
||||
--------------------------------------------
|
||||
|
||||
The format of a DPDK target is:
|
||||
The format of a DPDK target is::
|
||||
|
||||
ARCH-MACHINE-EXECENV-TOOLCHAIN
|
||||
ARCH-MACHINE-EXECENV-TOOLCHAIN
|
||||
|
||||
Where:
|
||||
|
||||
* ARCH is: x86_64
|
||||
* ``ARCH`` is: ``x86_64``
|
||||
|
||||
* MACHINE is: native
|
||||
* ``MACHINE`` is: ``native``
|
||||
|
||||
* EXECENV is: bsdapp
|
||||
* ``EXECENV`` is: ``bsdapp``
|
||||
|
||||
* TOOLCHAIN is: gcc | clang
|
||||
* ``TOOLCHAIN`` is: ``gcc`` | ``clang``
|
||||
|
||||
The configuration files for the DPDK targets can be found in the DPDK/config
|
||||
directory in the form of:
|
||||
|
||||
::
|
||||
directory in the form of::
|
||||
|
||||
defconfig_ARCH-MACHINE-EXECENV-TOOLCHAIN
|
||||
|
||||
.. note::
|
||||
|
||||
Configuration files are provided with the RTE_MACHINE optimization level set.
|
||||
Within the configuration files, the RTE_MACHINE configuration value is set
|
||||
to native, which means that the compiled software is tuned for the platform
|
||||
on which it is built. For more information on this setting, and its
|
||||
possible values, see the *DPDK Programmers Guide*.
|
||||
Configuration files are provided with the ``RTE_MACHINE`` optimization level set.
|
||||
Within the configuration files, the ``RTE_MACHINE`` configuration value is set
|
||||
to native, which means that the compiled software is tuned for the platform
|
||||
on which it is built. For more information on this setting, and its
|
||||
possible values, see the *DPDK Programmers Guide*.
|
||||
|
||||
To install and make the target, use "gmake install T=<target>".
|
||||
To make the target, use ``gmake install T=<target>``.
|
||||
|
||||
For example to compile for FreeBSD* use:
|
||||
For example to compile for FreeBSD use:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
@ -178,10 +165,10 @@ For example to compile for FreeBSD* use:
|
||||
|
||||
.. note::
|
||||
|
||||
If the compiler binary to be used does not correspond to that given in the
|
||||
TOOLCHAIN part of the target, the compiler command may need to be explicitly
|
||||
specified. For example, if compiling for gcc, where the gcc binary is called
|
||||
gcc4.8, the command would need to be "gmake install T=<target> CC=gcc4.8".
|
||||
If the compiler binary to be used does not correspond to that given in the
|
||||
TOOLCHAIN part of the target, the compiler command may need to be explicitly
|
||||
specified. For example, if compiling for gcc, where the gcc binary is called
|
||||
gcc4.8, the command would need to be ``gmake install T=<target> CC=gcc4.8``.
|
||||
|
||||
Browsing the Installed DPDK Environment Target
|
||||
----------------------------------------------
|
||||
@ -194,8 +181,9 @@ contains the kernel modules to install:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
user@host:~/DPDK # ls x86_64-native-bsdapp-gcc
|
||||
app build hostapp include kmod lib Makefile
|
||||
ls x86_64-native-bsdapp-gcc
|
||||
|
||||
app build hostapp include kmod lib Makefile
|
||||
|
||||
|
||||
.. _loading_contigmem:
|
||||
@ -216,13 +204,11 @@ module loading using:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
root@host:~ # kenv hw.contigmem.num_buffers=n
|
||||
root@host:~ # kenv hw.contigmem.buffer_size=m
|
||||
kenv hw.contigmem.num_buffers=n
|
||||
kenv hw.contigmem.buffer_size=m
|
||||
|
||||
The kernel environment variables can also be specified during boot by placing the
|
||||
following in /boot/loader.conf:
|
||||
|
||||
::
|
||||
following in ``/boot/loader.conf``::
|
||||
|
||||
hw.contigmem.num_buffers=n hw.contigmem.buffer_size=m
|
||||
|
||||
@ -230,7 +216,7 @@ The variables can be inspected using the following command:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
root@host:~ # sysctl -a hw.contigmem
|
||||
sysctl -a hw.contigmem
|
||||
|
||||
Where n is the number of blocks and m is the size in bytes of each area of
|
||||
contiguous memory. A default of two buffers of size 1073741824 bytes (1 Gigabyte)
|
||||
@ -245,27 +231,26 @@ is the DPDK target directory):
|
||||
|
||||
It is advisable to include the loading of the contigmem module during the boot
|
||||
process to avoid issues with potential memory fragmentation during later system
|
||||
up time. This can be achieved by copying the module to the /boot/kernel/
|
||||
directory and placing the following into /boot/loader.conf:
|
||||
|
||||
::
|
||||
up time. This can be achieved by copying the module to the ``/boot/kernel/``
|
||||
directory and placing the following into ``/boot/loader.conf``::
|
||||
|
||||
contigmem_load="YES"
|
||||
|
||||
.. note::
|
||||
|
||||
The contigmem_load directive should be placed after any definitions of
|
||||
hw.contigmem.num_buffers and hw.contigmem.buffer_size if the default values
|
||||
``hw.contigmem.num_buffers`` and ``hw.contigmem.buffer_size`` if the default values
|
||||
are not to be used.
|
||||
|
||||
An error such as:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
kldload: can't load ./x86_64-native-bsdapp-gcc/kmod/contigmem.ko: Exec format error
|
||||
kldload: can't load ./x86_64-native-bsdapp-gcc/kmod/contigmem.ko:
|
||||
Exec format error
|
||||
|
||||
is generally attributed to not having enough contiguous memory
|
||||
available and can be verified via dmesg or /var/log/messages:
|
||||
available and can be verified via dmesg or ``/var/log/messages``:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
@ -278,7 +263,7 @@ To avoid this error, reduce the number of buffers or the buffer size.
|
||||
Loading the DPDK nic_uio Module
|
||||
-------------------------------
|
||||
|
||||
After loading the contigmem module, the nic_uio must also be loaded into the
|
||||
After loading the contigmem module, the ``nic_uio must`` also be loaded into the
|
||||
running kernel prior to running any DPDK application. This module must
|
||||
be loaded using the kldload command as shown below (assuming that the current
|
||||
directory is the DPDK target directory).
|
||||
@ -290,28 +275,26 @@ directory is the DPDK target directory).
|
||||
.. note::
|
||||
|
||||
If the ports to be used are currently bound to a existing kernel driver
|
||||
then the hw.nic_uio.bdfs sysctl value will need to be set before loading the
|
||||
then the ``hw.nic_uio.bdfs sysctl`` value will need to be set before loading the
|
||||
module. Setting this value is described in the next section below.
|
||||
|
||||
Currently loaded modules can be seen by using the "kldstat" command and a module
|
||||
can be removed from the running kernel by using "kldunload <module_name>".
|
||||
Currently loaded modules can be seen by using the ``kldstat`` command and a module
|
||||
can be removed from the running kernel by using ``kldunload <module_name>``.
|
||||
|
||||
To load the module during boot, copy the nic_uio module to /boot/kernel
|
||||
and place the following into /boot/loader.conf:
|
||||
|
||||
::
|
||||
To load the module during boot, copy the ``nic_uio`` module to ``/boot/kernel``
|
||||
and place the following into ``/boot/loader.conf``::
|
||||
|
||||
nic_uio_load="YES"
|
||||
|
||||
.. note::
|
||||
|
||||
nic_uio_load="YES" must appear after the contigmem_load directive, if it exists.
|
||||
``nic_uio_load="YES"`` must appear after the contigmem_load directive, if it exists.
|
||||
|
||||
By default, the nic_uio module will take ownership of network ports if they are
|
||||
By default, the ``nic_uio`` module will take ownership of network ports if they are
|
||||
recognized DPDK devices and are not owned by another module. However, since
|
||||
the FreeBSD kernel includes support, either built-in, or via a separate driver
|
||||
module, for most network card devices, it is likely that the ports to be used are
|
||||
already bound to a driver other than nic_uio. The following sub-section describe
|
||||
already bound to a driver other than ``nic_uio``. The following sub-section describe
|
||||
how to query and modify the device ownership of the ports to be used by
|
||||
DPDK applications.
|
||||
|
||||
@ -321,11 +304,11 @@ Binding Network Ports to the nic_uio Module
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Device ownership can be viewed using the pciconf -l command. The example below shows
|
||||
four Intel® 82599 network ports under "if_ixgbe" module ownership.
|
||||
four Intel® 82599 network ports under ``if_ixgbe`` module ownership.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
user@host:~ # pciconf -l
|
||||
pciconf -l
|
||||
ix0@pci0:1:0:0: class=0x020000 card=0x00038086 chip=0x10fb8086 rev=0x01 hdr=0x00
|
||||
ix1@pci0:1:0:1: class=0x020000 card=0x00038086 chip=0x10fb8086 rev=0x01 hdr=0x00
|
||||
ix2@pci0:2:0:0: class=0x020000 card=0x00038086 chip=0x10fb8086 rev=0x01 hdr=0x00
|
||||
@ -333,41 +316,35 @@ four Intel® 82599 network ports under "if_ixgbe" module ownership.
|
||||
|
||||
The first column constitutes three components:
|
||||
|
||||
#. Device name: ixN
|
||||
#. Device name: ``ixN``
|
||||
|
||||
#. Unit name: pci0
|
||||
#. Unit name: ``pci0``
|
||||
|
||||
#. Selector (Bus:Device:Function): 1:0:0
|
||||
#. Selector (Bus:Device:Function): ``1:0:0``
|
||||
|
||||
Where no driver is associated with a device, the device name will be none.
|
||||
Where no driver is associated with a device, the device name will be ``none``.
|
||||
|
||||
By default, the FreeBSD* kernel will include built-in drivers for the most common
|
||||
By default, the FreeBSD kernel will include built-in drivers for the most common
|
||||
devices; a kernel rebuild would normally be required to either remove the drivers
|
||||
or configure them as loadable modules.
|
||||
|
||||
To avoid building a custom kernel, the nic_uio module can detach a network port
|
||||
from its current device driver. This is achieved by setting the hw.nic_uio.bdfs
|
||||
kernel environment variable prior to loading nic_uio, as follows:
|
||||
|
||||
::
|
||||
To avoid building a custom kernel, the ``nic_uio`` module can detach a network port
|
||||
from its current device driver. This is achieved by setting the ``hw.nic_uio.bdfs``
|
||||
kernel environment variable prior to loading ``nic_uio``, as follows::
|
||||
|
||||
hw.nic_uio.bdfs="b:d:f,b:d:f,..."
|
||||
|
||||
Where a comma separated list of selectors is set, the list must not contain any
|
||||
whitespace.
|
||||
|
||||
For example to re-bind "ix2\@pci0:2:0:0" and "ix3\@pci0:2:0:1" to the nic_uio module
|
||||
upon loading, use the following command:
|
||||
|
||||
.. code-block:: console
|
||||
For example to re-bind ``ix2@pci0:2:0:0`` and ``ix3@pci0:2:0:1`` to the ``nic_uio`` module
|
||||
upon loading, use the following command::
|
||||
|
||||
kenv hw.nic_uio.bdfs="2:0:0,2:0:1"
|
||||
|
||||
The variable can also be specified during boot by placing the following into
|
||||
"/boot/loader.conf", before the previously-described "nic_uio_load" line - as
|
||||
shown.
|
||||
|
||||
::
|
||||
``/boot/loader.conf``, before the previously-described ``nic_uio_load`` line - as
|
||||
shown::
|
||||
|
||||
hw.nic_uio.bdfs="2:0:0,2:0:1"
|
||||
nic_uio_load="YES"
|
||||
@ -376,15 +353,15 @@ Binding Network Ports Back to their Original Kernel Driver
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If the original driver for a network port has been compiled into the kernel,
|
||||
it is necessary to reboot FreeBSD* to restore the original device binding. Before
|
||||
doing so, update or remove the "hw.nic_uio.bdfs" in "/boot/loader.conf".
|
||||
it is necessary to reboot FreeBSD to restore the original device binding. Before
|
||||
doing so, update or remove the ``hw.nic_uio.bdfs`` in ``/boot/loader.conf``.
|
||||
|
||||
If rebinding to a driver that is a loadable module, the network port binding can
|
||||
be reset without rebooting. To do so, unload both the target kernel module and the
|
||||
nic_uio module, modify or clear the "hw.nic_uio.bdfs" kernel environment (kenv)
|
||||
``nic_uio`` module, modify or clear the ``hw.nic_uio.bdfs`` kernel environment (kenv)
|
||||
value, and reload the two drivers - first the original kernel driver, and then
|
||||
the nic_uio driver. [The latter does not need to be reloaded unless there are
|
||||
ports that are still to be bound to it].
|
||||
the ``nic_uio driver``. Note: the latter does not need to be reloaded unless there are
|
||||
ports that are still to be bound to it.
|
||||
|
||||
Example commands to perform these steps are shown below:
|
||||
|
||||
@ -393,9 +370,11 @@ Example commands to perform these steps are shown below:
|
||||
kldunload nic_uio
|
||||
kldunload <original_driver>
|
||||
|
||||
kenv -u hw.nic_uio.bdfs # to clear the value completely
|
||||
# To clear the value completely:
|
||||
kenv -u hw.nic_uio.bdfs
|
||||
|
||||
kenv hw.nic_uio.bdfs="b:d:f,b:d:f,..." # to update the list of ports to bind
|
||||
# To update the list of ports to bind:
|
||||
kenv hw.nic_uio.bdfs="b:d:f,b:d:f,..."
|
||||
|
||||
kldload <original_driver>
|
||||
|
||||
|
@ -40,71 +40,76 @@ Compiling a Sample Application
|
||||
------------------------------
|
||||
|
||||
Once a DPDK target environment directory has been created (such as
|
||||
x86_64-native-bsdapp-clang), it contains all libraries and header files required
|
||||
``x86_64-native-bsdapp-clang``), it contains all libraries and header files required
|
||||
to build an application.
|
||||
|
||||
When compiling an application in the FreeBSD* environment on the DPDK,
|
||||
When compiling an application in the FreeBSD environment on the DPDK,
|
||||
the following variables must be exported:
|
||||
|
||||
* RTE_SDK - Points to the DPDK installation directory.
|
||||
* ``RTE_SDK`` - Points to the DPDK installation directory.
|
||||
|
||||
* RTE_TARGET - Points to the DPDK target environment directory.
|
||||
For FreeBSD*, this is the x86_64-native-bsdapp-clang or
|
||||
x86_64-native-bsdapp-gcc directory.
|
||||
* ``RTE_TARGET`` - Points to the DPDK target environment directory.
|
||||
For FreeBSD, this is the ``x86_64-native-bsdapp-clang`` or
|
||||
``x86_64-native-bsdapp-gcc`` directory.
|
||||
|
||||
The following is an example of creating the helloworld application, which runs
|
||||
in the DPDK FreeBSD* environment. While the example demonstrates compiling
|
||||
using gcc version 4.8, compiling with clang will be similar, except that the "CC="
|
||||
parameter can probably be omitted. The "helloworld" example may be found in the
|
||||
${RTE_SDK}/examples directory.
|
||||
The following is an example of creating the ``helloworld`` application, which runs
|
||||
in the DPDK FreeBSD environment. While the example demonstrates compiling
|
||||
using gcc version 4.8, compiling with clang will be similar, except that the ``CC=``
|
||||
parameter can probably be omitted. The ``helloworld`` example may be found in the
|
||||
``${RTE_SDK}/examples`` directory.
|
||||
|
||||
The directory contains the main.c file. This file, when combined with the
|
||||
The directory contains the ``main.c`` file. This file, when combined with the
|
||||
libraries in the DPDK target environment, calls the various functions to
|
||||
initialize the DPDK environment, then launches an entry point (dispatch
|
||||
application) for each core to be utilized. By default, the binary is generated
|
||||
application) for each core to be utilized. By default, the binary is generated
|
||||
in the build directory.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
user@host:~/DPDK$ cd examples/helloworld/
|
||||
user@host:~/DPDK/examples/helloworld$ setenv RTE_SDK $HOME/DPDK
|
||||
user@host:~/DPDK/examples/helloworld$ setenv RTE_TARGET x86_64-native-bsdapp-gcc
|
||||
user@host:~/DPDK/examples/helloworld$ gmake CC=gcc48
|
||||
CC main.o
|
||||
LD helloworld
|
||||
INSTALL-APP helloworld
|
||||
INSTALL-MAP helloworld.map
|
||||
user@host:~/DPDK/examples/helloworld$ ls build/app
|
||||
helloworld helloworld.map
|
||||
setenv RTE_SDK /home/user/DPDK
|
||||
cd $(RTE_SDK)
|
||||
cd examples/helloworld/
|
||||
setenv RTE_SDK $HOME/DPDK
|
||||
setenv RTE_TARGET x86_64-native-bsdapp-gcc
|
||||
|
||||
gmake CC=gcc48
|
||||
CC main.o
|
||||
LD helloworld
|
||||
INSTALL-APP helloworld
|
||||
INSTALL-MAP helloworld.map
|
||||
|
||||
ls build/app
|
||||
helloworld helloworld.map
|
||||
|
||||
.. note::
|
||||
|
||||
In the above example, helloworld was in the directory structure of the
|
||||
DPDK. However, it could have been located outside the directory
|
||||
In the above example, ``helloworld`` was in the directory structure of the
|
||||
DPDK. However, it could have been located outside the directory
|
||||
structure to keep the DPDK structure intact. In the following case,
|
||||
the helloworld application is copied to a new directory as a new starting
|
||||
the ``helloworld`` application is copied to a new directory as a new starting
|
||||
point.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
user@host:~$ setenv RTE_SDK /home/user/DPDK
|
||||
user@host:~$ cp -r $(RTE_SDK)/examples/helloworld my_rte_app
|
||||
user@host:~$ cd my_rte_app/
|
||||
user@host:~$ setenv RTE_TARGET x86_64-native-bsdapp-gcc
|
||||
user@host:~/my_rte_app$ gmake CC=gcc48
|
||||
CC main.o
|
||||
LD helloworld
|
||||
INSTALL-APP helloworld
|
||||
INSTALL-MAP helloworld.map
|
||||
setenv RTE_SDK /home/user/DPDK
|
||||
cp -r $(RTE_SDK)/examples/helloworld my_rte_app
|
||||
cd my_rte_app/
|
||||
setenv RTE_TARGET x86_64-native-bsdapp-gcc
|
||||
|
||||
gmake CC=gcc48
|
||||
CC main.o
|
||||
LD helloworld
|
||||
INSTALL-APP helloworld
|
||||
INSTALL-MAP helloworld.map
|
||||
|
||||
.. _running_sample_app:
|
||||
|
||||
Running a Sample Application
|
||||
----------------------------
|
||||
|
||||
#. The contigmem and nic_uio modules must be set up prior to running an application.
|
||||
#. The ``contigmem`` and ``nic_uio`` modules must be set up prior to running an application.
|
||||
|
||||
#. Any ports to be used by the application must be already bound to the nic_uio module,
|
||||
#. Any ports to be used by the application must be already bound to the ``nic_uio`` module,
|
||||
as described in section :ref:`binding_network_ports`, prior to running the application.
|
||||
The application is linked with the DPDK target environment's Environment
|
||||
Abstraction Layer (EAL) library, which provides some options that are generic
|
||||
@ -114,69 +119,68 @@ The following is the list of options that can be given to the EAL:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
./rte-app -n NUM [-c COREMASK] [-b <domain:bus:devid.func>] [-r NUM] [-v] [--proc-type <primary|secondary|auto>]
|
||||
./rte-app -n NUM [-c COREMASK] [-b <domain:bus:devid.func>] \
|
||||
[-r NUM] [-v] [--proc-type <primary|secondary|auto>]
|
||||
|
||||
.. note::
|
||||
|
||||
EAL has a common interface between all operating systems and is based on the
|
||||
Linux* notation for PCI devices. For example, a FreeBSD* device selector of
|
||||
pci0:2:0:1 is referred to as 02:00.1 in EAL.
|
||||
Linux notation for PCI devices. For example, a FreeBSD device selector of
|
||||
``pci0:2:0:1`` is referred to as ``02:00.1`` in EAL.
|
||||
|
||||
The EAL options for FreeBSD* are as follows:
|
||||
The EAL options for FreeBSD are as follows:
|
||||
|
||||
* -c COREMASK
|
||||
: A hexadecimal bit mask of the cores to run on. Note that core numbering
|
||||
* ``-c COREMASK``:
|
||||
A hexadecimal bit mask of the cores to run on. Note that core numbering
|
||||
can change between platforms and should be determined beforehand.
|
||||
|
||||
* -n NUM
|
||||
: Number of memory channels per processor socket.
|
||||
* ``-n NUM``:
|
||||
Number of memory channels per processor socket.
|
||||
|
||||
* -b <domain:bus:devid.func>
|
||||
: blacklisting of ports; prevent EAL from using specified PCI device
|
||||
(multiple -b options are allowed).
|
||||
* ``-b <domain:bus:devid.func>``:
|
||||
Blacklisting of ports; prevent EAL from using specified PCI device
|
||||
(multiple ``-b`` options are allowed).
|
||||
|
||||
* --use-device
|
||||
: use the specified Ethernet device(s) only. Use comma-separate
|
||||
<[domain:]bus:devid.func> values. Cannot be used with -b option.
|
||||
* ``--use-device``:
|
||||
Use the specified Ethernet device(s) only. Use comma-separate
|
||||
``[domain:]bus:devid.func`` values. Cannot be used with ``-b`` option.
|
||||
|
||||
* -r NUM
|
||||
: Number of memory ranks.
|
||||
* ``-r NUM``:
|
||||
Number of memory ranks.
|
||||
|
||||
* -v
|
||||
: Display version information on startup.
|
||||
* ``-v``:
|
||||
Display version information on startup.
|
||||
|
||||
* --proc-type
|
||||
: The type of process instance.
|
||||
* ``--proc-type``:
|
||||
The type of process instance.
|
||||
|
||||
Other options, specific to Linux* and are not supported under FreeBSD* are as follows:
|
||||
Other options, specific to Linux and are not supported under FreeBSD are as follows:
|
||||
|
||||
* socket-mem
|
||||
: Memory to allocate from hugepages on specific sockets.
|
||||
* ``socket-mem``:
|
||||
Memory to allocate from hugepages on specific sockets.
|
||||
|
||||
* --huge-dir
|
||||
: The directory where hugetlbfs is mounted.
|
||||
* ``--huge-dir``:
|
||||
The directory where hugetlbfs is mounted.
|
||||
|
||||
* --file-prefix
|
||||
: The prefix text used for hugepage filenames.
|
||||
* ``--file-prefix``:
|
||||
The prefix text used for hugepage filenames.
|
||||
|
||||
* -m MB
|
||||
: Memory to allocate from hugepages, regardless of processor socket.
|
||||
It is recommended that --socket-mem be used instead of this option.
|
||||
* ``-m MB``:
|
||||
Memory to allocate from hugepages, regardless of processor socket.
|
||||
It is recommended that ``--socket-mem`` be used instead of this option.
|
||||
|
||||
The -c and the -n options are mandatory; the others are optional.
|
||||
The ``-c`` option is mandatory; the others are optional.
|
||||
|
||||
Copy the DPDK application binary to your target, then run the application
|
||||
as follows (assuming the platform has four memory channels, and that cores 0-3
|
||||
are present and are to be used for running the application):
|
||||
are present and are to be used for running the application)::
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
root@target:~$ ./helloworld -c f -n 4
|
||||
./helloworld -c f -n 4
|
||||
|
||||
.. note::
|
||||
|
||||
The --proc-type and --file-prefix EAL options are used for running multiple
|
||||
DPDK processes. See the “Multi-process Sample Application” chapter
|
||||
The ``--proc-type`` and ``--file-prefix`` EAL options are used for running multiple
|
||||
DPDK processes. See the "Multi-process Sample Application" chapter
|
||||
in the *DPDK Sample Applications User Guide and the DPDK
|
||||
Programmers Guide* for more details.
|
||||
|
||||
@ -187,14 +191,14 @@ Running DPDK Applications Without Root Privileges
|
||||
|
||||
Although applications using the DPDK use network ports and other hardware
|
||||
resources directly, with a number of small permission adjustments, it is possible
|
||||
to run these applications as a user other than “root”. To do so, the ownership,
|
||||
to run these applications as a user other than "root". To do so, the ownership,
|
||||
or permissions, on the following file system objects should be adjusted to ensure
|
||||
that the user account being used to run the DPDK application has access
|
||||
to them:
|
||||
|
||||
* The userspace-io device files in /dev, for example, /dev/uio0, /dev/uio1, and so on
|
||||
* The userspace-io device files in ``/dev``, for example, ``/dev/uio0``, ``/dev/uio1``, and so on
|
||||
|
||||
* The userspace contiguous memory device: /dev/contigmem
|
||||
* The userspace contiguous memory device: ``/dev/contigmem``
|
||||
|
||||
.. note::
|
||||
|
||||
|
@ -35,41 +35,41 @@ Installing DPDK from the Ports Collection
|
||||
|
||||
The easiest way to get up and running with the DPDK on FreeBSD is to
|
||||
install it from the ports collection. Details of getting and using the ports
|
||||
collection are documented in the FreeBSD Handbook at:
|
||||
|
||||
https://www.freebsd.org/doc/handbook/ports-using.html
|
||||
collection are documented in the
|
||||
`FreeBSD Handbook <http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html>`_.
|
||||
|
||||
.. note::
|
||||
|
||||
Testing has been performed using FreeBSD* 10.0-RELEASE (x86_64) and requires the
|
||||
Testing has been performed using FreeBSD 10.0-RELEASE (x86_64) and requires the
|
||||
installation of the kernel sources, which should be included during the
|
||||
installation of FreeBSD*.
|
||||
installation of FreeBSD.
|
||||
|
||||
Installing the DPDK FreeBSD Port
|
||||
--------------------------------
|
||||
|
||||
On a system with the ports collection installed in /usr/ports, the DPDK
|
||||
On a system with the ports collection installed in ``/usr/ports``, the DPDK
|
||||
can be installed using the commands:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
root@host:~ # cd /usr/ports/net/dpdk
|
||||
cd /usr/ports/net/dpdk
|
||||
|
||||
root@host:~ # make install
|
||||
make install
|
||||
|
||||
After the installation of the DPDK port, instructions will be printed on
|
||||
how to install the kernel modules required to use the DPDK. A more
|
||||
complete version of these instructions can be found in the sections
|
||||
:ref:`loading_contigmem` and :ref:`loading_nic_uio`. Normally, lines like
|
||||
those below would be added to the file "/boot/loader.conf".
|
||||
those below would be added to the file ``/boot/loader.conf``.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# reserve 2 x 1G blocks of contiguous memory using contigmem driver
|
||||
# Reserve 2 x 1G blocks of contiguous memory using contigmem driver:
|
||||
hw.contigmem.num_buffers=2
|
||||
hw.contigmem.buffer_size=1073741824
|
||||
contigmem_load="YES"
|
||||
# identify NIC devices for DPDK apps to use and load nic_uio driver
|
||||
|
||||
# Identify NIC devices for DPDK apps to use and load nic_uio driver:
|
||||
hw.nic_uio.bdfs="2:0:0,2:0:1"
|
||||
nic_uio_load="YES"
|
||||
|
||||
@ -77,41 +77,42 @@ Compiling and Running the Example Applications
|
||||
----------------------------------------------
|
||||
|
||||
When the DPDK has been installed from the ports collection it installs
|
||||
its example applications in "/usr/local/share/dpdk/examples" - also accessible via
|
||||
symlink as "/usr/local/share/examples/dpdk". These examples can be compiled and
|
||||
its example applications in ``/usr/local/share/dpdk/examples`` - also accessible via
|
||||
symlink as ``/usr/local/share/examples/dpdk``. These examples can be compiled and
|
||||
run as described in :ref:`compiling_sample_apps`. In this case, the required
|
||||
environmental variables should be set as below:
|
||||
|
||||
* RTE_SDK=/usr/local/share/dpdk
|
||||
* ``RTE_SDK=/usr/local/share/dpdk``
|
||||
|
||||
* RTE_TARGET=x86_64-native-bsdapp-clang
|
||||
* ``RTE_TARGET=x86_64-native-bsdapp-clang``
|
||||
|
||||
.. note::
|
||||
|
||||
To install a copy of the DPDK compiled using gcc, please download the
|
||||
official DPDK package from http://dpdk.org/ and install manually using
|
||||
the instructions given in the next chapter, :ref:`building_from_source`
|
||||
To install a copy of the DPDK compiled using gcc, please download the
|
||||
official DPDK package from http://dpdk.org/ and install manually using
|
||||
the instructions given in the next chapter, :ref:`building_from_source`
|
||||
|
||||
An example application can therefore be copied to a user's home directory and
|
||||
compiled and run as below:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
user@host:~$ export RTE_SDK=/usr/local/share/dpdk
|
||||
export RTE_SDK=/usr/local/share/dpdk
|
||||
|
||||
user@host:~$ export RTE_TARGET=x86_64-native-bsdapp-clang
|
||||
export RTE_TARGET=x86_64-native-bsdapp-clang
|
||||
|
||||
user@host:~$ cp -r /usr/local/share/dpdk/examples/helloworld .
|
||||
cp -r /usr/local/share/dpdk/examples/helloworld .
|
||||
|
||||
user@host:~$ cd helloworld/
|
||||
cd helloworld/
|
||||
|
||||
user@host:~/helloworld$ gmake
|
||||
gmake
|
||||
CC main.o
|
||||
LD helloworld
|
||||
INSTALL-APP helloworld
|
||||
INSTALL-MAP helloworld.map
|
||||
|
||||
user@host:~/helloworld$ sudo ./build/helloworld -c F -n 2
|
||||
sudo ./build/helloworld -c F -n 2
|
||||
|
||||
EAL: Contigmem driver has 2 buffers, each of size 1GB
|
||||
EAL: Sysctl reports 8 cpus
|
||||
EAL: Detected lcore 0
|
||||
@ -121,9 +122,10 @@ compiled and run as below:
|
||||
EAL: Support maximum 64 logical core(s) by configuration.
|
||||
EAL: Detected 4 lcore(s)
|
||||
EAL: Setting up physically contiguous memory...
|
||||
EAL: Mapped memory segment 1 @ 0x802400000: physaddr:0x40000000, len 1073741824
|
||||
EAL: Mapped memory segment 2 @ 0x842400000: physaddr:0x100000000, len 1073741824
|
||||
EAL: WARNING: clock_gettime cannot use CLOCK_MONOTONIC_RAW and HPET is not available - clock timings may be less accurate.
|
||||
EAL: Mapped memory segment 1 @ 0x802400000: len 1073741824
|
||||
EAL: Mapped memory segment 2 @ 0x842400000: len 1073741824
|
||||
EAL: WARNING: clock_gettime cannot use CLOCK_MONOTONIC_RAW and HPET
|
||||
is not available - clock timings may be less accurate.
|
||||
EAL: TSC frequency is ~3569023 KHz
|
||||
EAL: PCI scan found 24 devices
|
||||
EAL: Master core 0 is ready (tid=0x802006400)
|
||||
@ -153,10 +155,11 @@ compiled and run as below:
|
||||
|
||||
.. note::
|
||||
|
||||
To run a DPDK process as a non-root user, adjust the permissions on
|
||||
the /dev/contigmem and /dev/uio device nodes as described in section
|
||||
:ref:`running_non_root`
|
||||
To run a DPDK process as a non-root user, adjust the permissions on
|
||||
the ``/dev/contigmem`` and ``/dev/uio device`` nodes as described in section
|
||||
:ref:`running_non_root`
|
||||
|
||||
.. note::
|
||||
For an explanation of the command-line parameters that can be passed to an
|
||||
DPDK application, see section :ref:`running_sample_app`.
|
||||
|
||||
For an explanation of the command-line parameters that can be passed to an
|
||||
DPDK application, see section :ref:`running_sample_app`.
|
||||
|
@ -34,20 +34,19 @@ Introduction
|
||||
This document contains instructions for installing and configuring the
|
||||
Data Plane Development Kit (DPDK) software. It is designed to get customers
|
||||
up and running quickly and describes how to compile and run a
|
||||
DPDK application in a FreeBSD* application (bsdapp) environment, without going
|
||||
DPDK application in a FreeBSD application (bsdapp) environment, without going
|
||||
deeply into detail.
|
||||
|
||||
For a comprehensive guide to installing and using FreeBSD*, the following
|
||||
handbook is available from the FreeBSD* Documentation Project:
|
||||
|
||||
`http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html <http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html>`_
|
||||
For a comprehensive guide to installing and using FreeBSD, the following
|
||||
handbook is available from the FreeBSD Documentation Project:
|
||||
`FreeBSD Handbook <http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html>`_.
|
||||
|
||||
.. note::
|
||||
|
||||
The DPDK is now available as part of the FreeBSD ports collection.
|
||||
Installing via the ports collection infrastructure is now the recommended
|
||||
way to install the DPDK on FreeBSD, and is documented in the
|
||||
next chapter, :ref:`install_from_ports`.
|
||||
The DPDK is now available as part of the FreeBSD ports collection.
|
||||
Installing via the ports collection infrastructure is now the recommended
|
||||
way to install the DPDK on FreeBSD, and is documented in the
|
||||
next chapter, :ref:`install_from_ports`.
|
||||
|
||||
Documentation Roadmap
|
||||
---------------------
|
||||
@ -82,8 +81,3 @@ The following is a list of DPDK documents in the suggested reading order:
|
||||
* **Sample Applications User Guide**: Describes a set of sample applications.
|
||||
Each chapter describes a sample application that showcases specific functionality
|
||||
and provides instructions on how to compile, run and use the sample application.
|
||||
|
||||
.. note::
|
||||
|
||||
These documents are available for download as a separate documentation
|
||||
package at the same location as the DPDK code package.
|
||||
|
Loading…
Reference in New Issue
Block a user