usertools: remove dpdk-setup.sh
This old script relied on deprecated stuff, and especially make. It also applied some scary 666 permissions on files under /dev/vfio. Its deprecation had been notified in a previous release, remove it. Signed-off-by: David Marchand <david.marchand@redhat.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Thomas Monjalon <thomas@monjalon.net> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com> Acked-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
parent
3ca55dac6d
commit
b0a49787b4
@ -96,7 +96,7 @@ Bind PF UIO driver(s)
|
|||||||
Install the DPDK igb_uio driver, bind it with the PF PCI device ID and use
|
Install the DPDK igb_uio driver, bind it with the PF PCI device ID and use
|
||||||
``lspci`` to confirm the PF device is under use by ``igb_uio`` DPDK UIO driver.
|
``lspci`` to confirm the PF device is under use by ``igb_uio`` DPDK UIO driver.
|
||||||
|
|
||||||
The igb_uio driver may be bound to the PF PCI device using one of three methods:
|
The igb_uio driver may be bound to the PF PCI device using one of two methods:
|
||||||
|
|
||||||
|
|
||||||
1. PCI functions (physical or virtual, depending on the use case) can be bound to
|
1. PCI functions (physical or virtual, depending on the use case) can be bound to
|
||||||
@ -120,19 +120,9 @@ the UIO driver by repeating this command for every function.
|
|||||||
where the PCI device ID (example: 0000:06:00.0) is obtained using lspci -vd8086:0d5c
|
where the PCI device ID (example: 0000:06:00.0) is obtained using lspci -vd8086:0d5c
|
||||||
|
|
||||||
|
|
||||||
3. A third way to bind is to use ``dpdk-setup.sh`` tool
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
cd <dpdk-top-level-directory>
|
|
||||||
./usertools/dpdk-setup.sh
|
|
||||||
|
|
||||||
select 'Bind Ethernet/Crypto/Baseband device to IGB UIO module'
|
|
||||||
enter PCI device ID
|
|
||||||
select 'Display current Ethernet/Crypto/Baseband device settings' to confirm binding
|
|
||||||
|
|
||||||
In a similar way the ACC100 5G/4G FEC PF may be bound with vfio-pci as any PCIe device.
|
In a similar way the ACC100 5G/4G FEC PF may be bound with vfio-pci as any PCIe device.
|
||||||
|
|
||||||
|
|
||||||
Enable Virtual Functions
|
Enable Virtual Functions
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ Bind PF UIO driver(s)
|
|||||||
Install the DPDK igb_uio driver, bind it with the PF PCI device ID and use
|
Install the DPDK igb_uio driver, bind it with the PF PCI device ID and use
|
||||||
``lspci`` to confirm the PF device is under use by ``igb_uio`` DPDK UIO driver.
|
``lspci`` to confirm the PF device is under use by ``igb_uio`` DPDK UIO driver.
|
||||||
|
|
||||||
The igb_uio driver may be bound to the PF PCI device using one of three methods:
|
The igb_uio driver may be bound to the PF PCI device using one of two methods:
|
||||||
|
|
||||||
|
|
||||||
1. PCI functions (physical or virtual, depending on the use case) can be bound to
|
1. PCI functions (physical or virtual, depending on the use case) can be bound to
|
||||||
@ -105,20 +105,6 @@ the UIO driver by repeating this command for every function.
|
|||||||
where the PCI device ID (example: 0000:06:00.0) is obtained using lspci -vd8086:0d8f
|
where the PCI device ID (example: 0000:06:00.0) is obtained using lspci -vd8086:0d8f
|
||||||
|
|
||||||
|
|
||||||
3. A third way to bind is to use ``dpdk-setup.sh`` tool
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
cd <dpdk-top-level-directory>
|
|
||||||
./usertools/dpdk-setup.sh
|
|
||||||
|
|
||||||
select 'Bind Ethernet/Crypto/Baseband device to IGB UIO module'
|
|
||||||
or
|
|
||||||
select 'Bind Ethernet/Crypto/Baseband device to VFIO module' depending on driver required
|
|
||||||
enter PCI device ID
|
|
||||||
select 'Display current Ethernet/Crypto/Baseband device settings' to confirm binding
|
|
||||||
|
|
||||||
|
|
||||||
In the same way the FPGA 5GNR FEC PF can be bound with vfio, but vfio driver does not
|
In the same way the FPGA 5GNR FEC PF can be bound with vfio, but vfio driver does not
|
||||||
support SR-IOV configuration right out of the box, so it will need to be patched.
|
support SR-IOV configuration right out of the box, so it will need to be patched.
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ Bind PF UIO driver(s)
|
|||||||
Install the DPDK igb_uio driver, bind it with the PF PCI device ID and use
|
Install the DPDK igb_uio driver, bind it with the PF PCI device ID and use
|
||||||
``lspci`` to confirm the PF device is under use by ``igb_uio`` DPDK UIO driver.
|
``lspci`` to confirm the PF device is under use by ``igb_uio`` DPDK UIO driver.
|
||||||
|
|
||||||
The igb_uio driver may be bound to the PF PCI device using one of three methods:
|
The igb_uio driver may be bound to the PF PCI device using one of two methods:
|
||||||
|
|
||||||
|
|
||||||
1. PCI functions (physical or virtual, depending on the use case) can be bound to
|
1. PCI functions (physical or virtual, depending on the use case) can be bound to
|
||||||
@ -104,20 +104,6 @@ the UIO driver by repeating this command for every function.
|
|||||||
where the PCI device ID (example: 0000:06:00.0) is obtained using lspci -vd1172:
|
where the PCI device ID (example: 0000:06:00.0) is obtained using lspci -vd1172:
|
||||||
|
|
||||||
|
|
||||||
3. A third way to bind is to use ``dpdk-setup.sh`` tool
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
cd <dpdk-top-level-directory>
|
|
||||||
./usertools/dpdk-setup.sh
|
|
||||||
|
|
||||||
select 'Bind Ethernet/Crypto/Baseband device to IGB UIO module'
|
|
||||||
or
|
|
||||||
select 'Bind Ethernet/Crypto/Baseband device to VFIO module' depending on driver required
|
|
||||||
enter PCI device ID
|
|
||||||
select 'Display current Ethernet/Crypto/Baseband device settings' to confirm binding
|
|
||||||
|
|
||||||
|
|
||||||
In the same way the FPGA LTE FEC PF can be bound with vfio, but vfio driver does not
|
In the same way the FPGA LTE FEC PF can be bound with vfio, but vfio driver does not
|
||||||
support SR-IOV configuration right out of the box, so it will need to be patched.
|
support SR-IOV configuration right out of the box, so it will need to be patched.
|
||||||
|
|
||||||
|
@ -22,8 +22,7 @@ When you stop and restart the test application, it looks to see if the pages are
|
|||||||
If you look in the directory, you will see ``n`` number of 2M pages files. If you specified 1024, you will see 1024 page files.
|
If you look in the directory, you will see ``n`` number of 2M pages files. If you specified 1024, you will see 1024 page files.
|
||||||
These are then placed in memory segments to get contiguous memory.
|
These are then placed in memory segments to get contiguous memory.
|
||||||
|
|
||||||
If you need to change the number of pages, it is easier to first remove the pages. The usertools/dpdk-setup.sh script provides an option to do this.
|
If you need to change the number of pages, it is easier to first remove the pages.
|
||||||
See the "Quick Start Setup Script" section in the :ref:`DPDK Getting Started Guide <linux_gsg>` for more information.
|
|
||||||
|
|
||||||
|
|
||||||
If I execute "l2fwd -l 0-3 -m 64 -n 3 -- -p 3", I get the following output, indicating that there are no socket 0 hugepages to allocate the mbuf and ring structures to?
|
If I execute "l2fwd -l 0-3 -m 64 -n 3 -- -p 3", I get the following output, indicating that there are no socket 0 hugepages to allocate the mbuf and ring structures to?
|
||||||
|
@ -6,11 +6,6 @@
|
|||||||
Compiling the DPDK Target from Source
|
Compiling the DPDK Target from Source
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Parts of this process can also be done using the setup script described in
|
|
||||||
the :ref:`linux_setup_script` section of this document.
|
|
||||||
|
|
||||||
Uncompress DPDK and Browse Sources
|
Uncompress DPDK and Browse Sources
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
|
@ -7,11 +7,6 @@ Running Sample Applications
|
|||||||
The chapter describes how to compile and run applications in a DPDK environment.
|
The chapter describes how to compile and run applications in a DPDK environment.
|
||||||
It also provides a pointer to where sample applications are stored.
|
It also provides a pointer to where sample applications are stored.
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Parts of this process can also be done using the setup script described the
|
|
||||||
:ref:`linux_setup_script` section of this document.
|
|
||||||
|
|
||||||
Compiling a Sample Application
|
Compiling a Sample Application
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
|
@ -18,5 +18,4 @@ Getting Started Guide for Linux
|
|||||||
build_sample_apps
|
build_sample_apps
|
||||||
linux_eal_parameters
|
linux_eal_parameters
|
||||||
enable_func
|
enable_func
|
||||||
quick_start
|
|
||||||
nic_perf_intel_platform
|
nic_perf_intel_platform
|
||||||
|
@ -107,7 +107,6 @@ Also, to use VFIO, both kernel and BIOS must support and be configured to use IO
|
|||||||
``vfio-pci`` module doesn't support the creation of virtual functions before Linux version 5.7.
|
``vfio-pci`` module doesn't support the creation of virtual functions before Linux version 5.7.
|
||||||
|
|
||||||
For proper operation of VFIO when running DPDK applications as a non-privileged user, correct permissions should also be set up.
|
For proper operation of VFIO when running DPDK applications as a non-privileged user, correct permissions should also be set up.
|
||||||
This can be done by using the DPDK setup script (called dpdk-setup.sh and located in the usertools directory).
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
|
@ -1,304 +0,0 @@
|
|||||||
.. SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
Copyright(c) 2010-2014 Intel Corporation.
|
|
||||||
|
|
||||||
.. _linux_setup_script:
|
|
||||||
|
|
||||||
Quick Start Setup Script
|
|
||||||
========================
|
|
||||||
|
|
||||||
The dpdk-setup.sh script, found in the usertools subdirectory, allows the user to perform the following tasks:
|
|
||||||
|
|
||||||
* Build the DPDK libraries
|
|
||||||
|
|
||||||
* Insert and remove the DPDK IGB_UIO kernel module
|
|
||||||
|
|
||||||
* Insert and remove VFIO kernel modules
|
|
||||||
|
|
||||||
* Insert and remove the DPDK KNI kernel module
|
|
||||||
|
|
||||||
* Create and delete hugepages for NUMA and non-NUMA cases
|
|
||||||
|
|
||||||
* View network port status and reserve ports for DPDK application use
|
|
||||||
|
|
||||||
* Set up permissions for using VFIO as a non-privileged user
|
|
||||||
|
|
||||||
* Run the test and testpmd applications
|
|
||||||
|
|
||||||
* Look at hugepages in the meminfo
|
|
||||||
|
|
||||||
* List hugepages in ``/mnt/huge``
|
|
||||||
|
|
||||||
* Remove built DPDK libraries
|
|
||||||
|
|
||||||
Once these steps have been completed for one of the EAL targets,
|
|
||||||
the user may compile their own application that links in the EAL libraries to create the DPDK image.
|
|
||||||
|
|
||||||
Script Organization
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
The dpdk-setup.sh script is logically organized into a series of steps that a user performs in sequence.
|
|
||||||
Each step provides a number of options that guide the user to completing the desired task.
|
|
||||||
The following is a brief synopsis of each step.
|
|
||||||
|
|
||||||
**Step 1: Build DPDK Libraries**
|
|
||||||
|
|
||||||
Initially, the user must select a DPDK target to choose the correct target type and compiler options to use when building the libraries.
|
|
||||||
|
|
||||||
The user must have all libraries, modules, updates and compilers installed in the system prior to this,
|
|
||||||
as described in the earlier chapters in this Getting Started Guide.
|
|
||||||
|
|
||||||
**Step 2: Setup Environment**
|
|
||||||
|
|
||||||
The user configures the Linux* environment to support the running of DPDK applications.
|
|
||||||
Hugepages can be set up for NUMA or non-NUMA systems. Any existing hugepages will be removed.
|
|
||||||
The DPDK kernel module that is needed can also be inserted in this step,
|
|
||||||
and network ports may be bound to this module for DPDK application use.
|
|
||||||
|
|
||||||
**Step 3: Run an Application**
|
|
||||||
|
|
||||||
The user may run the test application once the other steps have been performed.
|
|
||||||
The test application allows the user to run a series of functional tests for the DPDK.
|
|
||||||
The testpmd application, which supports the receiving and sending of packets, can also be run.
|
|
||||||
|
|
||||||
**Step 4: Examining the System**
|
|
||||||
|
|
||||||
This step provides some tools for examining the status of hugepage mappings.
|
|
||||||
|
|
||||||
**Step 5: System Cleanup**
|
|
||||||
|
|
||||||
The final step has options for restoring the system to its original state.
|
|
||||||
|
|
||||||
Use Cases
|
|
||||||
---------
|
|
||||||
|
|
||||||
The following are some example of how to use the dpdk-setup.sh script.
|
|
||||||
The script should be run using the source command.
|
|
||||||
Some options in the script prompt the user for further data before proceeding.
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
The dpdk-setup.sh script should be run with root privileges.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
source usertools/dpdk-setup.sh
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
RTE_SDK exported as /home/user/rte
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Step 1: Select the DPDK environment to build
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
[1] i686-native-linux-gcc
|
|
||||||
|
|
||||||
[2] i686-native-linux-icc
|
|
||||||
|
|
||||||
[3] ppc_64-power8-linux-gcc
|
|
||||||
|
|
||||||
[4] x86_64-native-freebsd-clang
|
|
||||||
|
|
||||||
[5] x86_64-native-freebsd-gcc
|
|
||||||
|
|
||||||
[6] x86_64-native-linux-clang
|
|
||||||
|
|
||||||
[7] x86_64-native-linux-gcc
|
|
||||||
|
|
||||||
[8] x86_64-native-linux-icc
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Step 2: Setup linux environment
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
[11] Insert IGB UIO module
|
|
||||||
|
|
||||||
[12] Insert VFIO module
|
|
||||||
|
|
||||||
[13] Insert KNI module
|
|
||||||
|
|
||||||
[14] Setup hugepage mappings for non-NUMA systems
|
|
||||||
|
|
||||||
[15] Setup hugepage mappings for NUMA systems
|
|
||||||
|
|
||||||
[16] Display current Ethernet device settings
|
|
||||||
|
|
||||||
[17] Bind Ethernet device to IGB UIO module
|
|
||||||
|
|
||||||
[18] Bind Ethernet device to VFIO module
|
|
||||||
|
|
||||||
[19] Setup VFIO permissions
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Step 3: Run test application for linux environment
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
[20] Run test application ($RTE_TARGET/app/test)
|
|
||||||
|
|
||||||
[21] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Step 4: Other tools
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
[22] List hugepage info from /proc/meminfo
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Step 5: Uninstall and system cleanup
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
[23] Uninstall all targets
|
|
||||||
|
|
||||||
[24] Unbind NICs from IGB UIO driver
|
|
||||||
|
|
||||||
[25] Remove IGB UIO module
|
|
||||||
|
|
||||||
[26] Remove VFIO module
|
|
||||||
|
|
||||||
[27] Remove KNI module
|
|
||||||
|
|
||||||
[28] Remove hugepage mappings
|
|
||||||
|
|
||||||
[29] Exit Script
|
|
||||||
|
|
||||||
Option:
|
|
||||||
|
|
||||||
The following selection demonstrates the creation of the ``x86_64-native-linux-gcc`` DPDK library.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
Option: 9
|
|
||||||
|
|
||||||
================== Installing x86_64-native-linux-gcc
|
|
||||||
|
|
||||||
Configuration done
|
|
||||||
== Build lib
|
|
||||||
...
|
|
||||||
Build complete
|
|
||||||
RTE_TARGET exported as x86_64-native-linux-gcc
|
|
||||||
|
|
||||||
The following selection demonstrates the starting of the DPDK UIO driver.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
Option: 25
|
|
||||||
|
|
||||||
Unloading any existing DPDK UIO module
|
|
||||||
Loading DPDK UIO module
|
|
||||||
|
|
||||||
The following selection demonstrates the creation of hugepages in a NUMA system.
|
|
||||||
1024 2 MByte pages are assigned to each node.
|
|
||||||
The result is that the application should use -m 4096 for starting the application to access both memory areas
|
|
||||||
(this is done automatically if the -m option is not provided).
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
If prompts are displayed to remove temporary files, type 'y'.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
Option: 15
|
|
||||||
|
|
||||||
Removing currently reserved hugepages
|
|
||||||
mounting /mnt/huge and removing directory
|
|
||||||
Input the number of 2MB pages for each node
|
|
||||||
Example: to have 128MB of hugepages available per node,
|
|
||||||
enter '64' to reserve 64 * 2MB pages on each node
|
|
||||||
Number of pages for node0: 1024
|
|
||||||
Number of pages for node1: 1024
|
|
||||||
Reserving hugepages
|
|
||||||
Creating /mnt/huge and mounting as hugetlbfs
|
|
||||||
|
|
||||||
The following selection demonstrates the launch of the test application to run on a single core.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
Option: 20
|
|
||||||
|
|
||||||
Enter hex bitmask of cores to execute test app on
|
|
||||||
Example: to execute app on cores 0 to 7, enter 0xff
|
|
||||||
bitmask: 0x01
|
|
||||||
Launching app
|
|
||||||
EAL: coremask set to 1
|
|
||||||
EAL: Detected lcore 0 on socket 0
|
|
||||||
...
|
|
||||||
EAL: Main core 0 is ready (tid=1b2ad720)
|
|
||||||
RTE>>
|
|
||||||
|
|
||||||
Applications
|
|
||||||
------------
|
|
||||||
|
|
||||||
Once the user has run the dpdk-setup.sh script, built one of the EAL targets and set up hugepages (if using one of the Linux EAL targets),
|
|
||||||
the user can then move on to building and running their application or one of the examples provided.
|
|
||||||
|
|
||||||
The examples in the /examples directory provide a good starting point to gain an understanding of the operation of the DPDK.
|
|
||||||
The following command sequence shows how the helloworld sample application is built and run.
|
|
||||||
As recommended in Section 4.2.1 , "Logical Core Use by Applications",
|
|
||||||
the logical core layout of the platform should be determined when selecting a core mask to use for an application.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
cd helloworld/
|
|
||||||
make
|
|
||||||
CC main.o
|
|
||||||
LD helloworld
|
|
||||||
INSTALL-APP helloworld
|
|
||||||
INSTALL-MAP helloworld.map
|
|
||||||
|
|
||||||
sudo ./build/app/helloworld -l 0-3 -n 3
|
|
||||||
[sudo] password for rte:
|
|
||||||
|
|
||||||
EAL: coremask set to f
|
|
||||||
EAL: Detected lcore 0 as core 0 on socket 0
|
|
||||||
EAL: Detected lcore 1 as core 0 on socket 1
|
|
||||||
EAL: Detected lcore 2 as core 1 on socket 0
|
|
||||||
EAL: Detected lcore 3 as core 1 on socket 1
|
|
||||||
EAL: Setting up hugepage memory...
|
|
||||||
EAL: Ask a virtual area of 0x200000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0add800000 (size = 0x200000)
|
|
||||||
EAL: Ask a virtual area of 0x3d400000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0aa0200000 (size = 0x3d400000)
|
|
||||||
EAL: Ask a virtual area of 0x400000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9fc00000 (size = 0x400000)
|
|
||||||
EAL: Ask a virtual area of 0x400000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9f600000 (size = 0x400000)
|
|
||||||
EAL: Ask a virtual area of 0x400000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9f000000 (size = 0x400000)
|
|
||||||
EAL: Ask a virtual area of 0x800000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9e600000 (size = 0x800000)
|
|
||||||
EAL: Ask a virtual area of 0x800000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9dc00000 (size = 0x800000)
|
|
||||||
EAL: Ask a virtual area of 0x400000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9d600000 (size = 0x400000)
|
|
||||||
EAL: Ask a virtual area of 0x400000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9d000000 (size = 0x400000)
|
|
||||||
EAL: Ask a virtual area of 0x400000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9ca00000 (size = 0x400000)
|
|
||||||
EAL: Ask a virtual area of 0x200000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9c600000 (size = 0x200000)
|
|
||||||
EAL: Ask a virtual area of 0x200000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a9c200000 (size = 0x200000)
|
|
||||||
EAL: Ask a virtual area of 0x3fc00000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a5c400000 (size = 0x3fc00000)
|
|
||||||
EAL: Ask a virtual area of 0x200000 bytes
|
|
||||||
EAL: Virtual area found at 0x7f0a5c000000 (size = 0x200000)
|
|
||||||
EAL: Requesting 1024 pages of size 2MB from socket 0
|
|
||||||
EAL: Requesting 1024 pages of size 2MB from socket 1
|
|
||||||
EAL: Main core 0 is ready (tid=de25b700)
|
|
||||||
EAL: Core 1 is ready (tid=5b7fe700)
|
|
||||||
EAL: Core 3 is ready (tid=5a7fc700)
|
|
||||||
EAL: Core 2 is ready (tid=5affd700)
|
|
||||||
hello from core 1
|
|
||||||
hello from core 2
|
|
||||||
hello from core 3
|
|
||||||
hello from core 0
|
|
@ -100,8 +100,3 @@ Deprecation Notices
|
|||||||
* cmdline: ``cmdline`` structure will be made opaque to hide platform-specific
|
* cmdline: ``cmdline`` structure will be made opaque to hide platform-specific
|
||||||
content. On Linux and FreeBSD, supported prior to DPDK 20.11,
|
content. On Linux and FreeBSD, supported prior to DPDK 20.11,
|
||||||
original structure will be kept until DPDK 21.11.
|
original structure will be kept until DPDK 21.11.
|
||||||
|
|
||||||
* dpdk-setup.sh: This old script relies on deprecated stuff, and especially
|
|
||||||
``make``. Given environments are too much variables for such a simple script,
|
|
||||||
it will be removed in DPDK 20.11.
|
|
||||||
Some useful parts may be converted into specific scripts.
|
|
||||||
|
@ -457,6 +457,8 @@ Removed Items
|
|||||||
|
|
||||||
* Removed TEP termination sample application.
|
* Removed TEP termination sample application.
|
||||||
|
|
||||||
|
* Removed the deprecated ``dpdk-setup.sh`` script.
|
||||||
|
|
||||||
|
|
||||||
API Changes
|
API Changes
|
||||||
-----------
|
-----------
|
||||||
|
@ -1,609 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
# Copyright(c) 2010-2014 Intel Corporation
|
|
||||||
|
|
||||||
#
|
|
||||||
# Run with "source /path/to/dpdk-setup.sh"
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Change to DPDK directory ( <this-script's-dir>/.. ), and export it as RTE_SDK
|
|
||||||
#
|
|
||||||
cd $(dirname ${BASH_SOURCE[0]})/..
|
|
||||||
export RTE_SDK=$PWD
|
|
||||||
echo "------------------------------------------------------------------------------"
|
|
||||||
echo " RTE_SDK exported as $RTE_SDK"
|
|
||||||
echo "------------------------------------------------------------------------------"
|
|
||||||
|
|
||||||
HUGEPGSZ=`cat /proc/meminfo | grep Hugepagesize | cut -d : -f 2 | tr -d ' '`
|
|
||||||
|
|
||||||
#
|
|
||||||
# Application EAL parameters for setting memory options (amount/channels/ranks).
|
|
||||||
#
|
|
||||||
EAL_PARAMS='-n 4'
|
|
||||||
|
|
||||||
#
|
|
||||||
# Sets QUIT variable so script will finish.
|
|
||||||
#
|
|
||||||
quit()
|
|
||||||
{
|
|
||||||
QUIT=$1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Shortcut for quit.
|
|
||||||
q()
|
|
||||||
{
|
|
||||||
quit
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Sets up environmental variables for ICC.
|
|
||||||
#
|
|
||||||
setup_icc()
|
|
||||||
{
|
|
||||||
DEFAULT_PATH=/opt/intel/bin/iccvars.sh
|
|
||||||
param=$1
|
|
||||||
shpath=`which iccvars.sh 2> /dev/null`
|
|
||||||
if [ $? -eq 0 ] ; then
|
|
||||||
echo "Loading iccvars.sh from $shpath for $param"
|
|
||||||
source $shpath $param
|
|
||||||
elif [ -f $DEFAULT_PATH ] ; then
|
|
||||||
echo "Loading iccvars.sh from $DEFAULT_PATH for $param"
|
|
||||||
source $DEFAULT_PATH $param
|
|
||||||
else
|
|
||||||
echo "## ERROR: cannot find 'iccvars.sh' script to set up ICC."
|
|
||||||
echo "## To fix, please add the directory that contains"
|
|
||||||
echo "## iccvars.sh to your 'PATH' environment variable."
|
|
||||||
quit
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Sets RTE_TARGET and does a "make install".
|
|
||||||
#
|
|
||||||
setup_target()
|
|
||||||
{
|
|
||||||
option=$1
|
|
||||||
export RTE_TARGET=${TARGETS[option]}
|
|
||||||
|
|
||||||
compiler=${RTE_TARGET##*-}
|
|
||||||
if [ "$compiler" == "icc" ] ; then
|
|
||||||
platform=${RTE_TARGET%%-*}
|
|
||||||
if [ "$platform" == "x86_64" ] ; then
|
|
||||||
setup_icc intel64
|
|
||||||
else
|
|
||||||
setup_icc ia32
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ "$QUIT" == "0" ] ; then
|
|
||||||
make install T=${RTE_TARGET}
|
|
||||||
fi
|
|
||||||
echo "------------------------------------------------------------------------------"
|
|
||||||
echo " RTE_TARGET exported as $RTE_TARGET"
|
|
||||||
echo "------------------------------------------------------------------------------"
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Creates hugepage filesystem.
|
|
||||||
#
|
|
||||||
create_mnt_huge()
|
|
||||||
{
|
|
||||||
echo "Creating /mnt/huge and mounting as hugetlbfs"
|
|
||||||
sudo mkdir -p /mnt/huge
|
|
||||||
|
|
||||||
grep -s '/mnt/huge' /proc/mounts > /dev/null
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
sudo mount -t hugetlbfs nodev /mnt/huge
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Removes hugepage filesystem.
|
|
||||||
#
|
|
||||||
remove_mnt_huge()
|
|
||||||
{
|
|
||||||
echo "Unmounting /mnt/huge and removing directory"
|
|
||||||
grep -s '/mnt/huge' /proc/mounts > /dev/null
|
|
||||||
if [ $? -eq 0 ] ; then
|
|
||||||
sudo umount /mnt/huge
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d /mnt/huge ] ; then
|
|
||||||
sudo rm -R /mnt/huge
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Unloads igb_uio.ko.
|
|
||||||
#
|
|
||||||
remove_igb_uio_module()
|
|
||||||
{
|
|
||||||
echo "Unloading any existing DPDK UIO module"
|
|
||||||
/sbin/lsmod | grep -s igb_uio > /dev/null
|
|
||||||
if [ $? -eq 0 ] ; then
|
|
||||||
sudo /sbin/rmmod igb_uio
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Loads new igb_uio.ko (and uio module if needed).
|
|
||||||
#
|
|
||||||
load_igb_uio_module()
|
|
||||||
{
|
|
||||||
if [ ! -f $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko ];then
|
|
||||||
echo "## ERROR: Target does not have the DPDK UIO Kernel Module."
|
|
||||||
echo " To fix, please try to rebuild target."
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
remove_igb_uio_module
|
|
||||||
|
|
||||||
/sbin/lsmod | grep -s uio > /dev/null
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
modinfo uio > /dev/null
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
echo "Loading uio module"
|
|
||||||
sudo /sbin/modprobe uio
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# UIO may be compiled into kernel, so it may not be an error if it can't
|
|
||||||
# be loaded.
|
|
||||||
|
|
||||||
echo "Loading DPDK UIO module"
|
|
||||||
sudo /sbin/insmod $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
echo "## ERROR: Could not load kmod/igb_uio.ko."
|
|
||||||
quit
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Unloads VFIO modules.
|
|
||||||
#
|
|
||||||
remove_vfio_module()
|
|
||||||
{
|
|
||||||
echo "Unloading any existing VFIO module"
|
|
||||||
/sbin/lsmod | grep -s vfio > /dev/null
|
|
||||||
if [ $? -eq 0 ] ; then
|
|
||||||
sudo /sbin/rmmod vfio-pci
|
|
||||||
sudo /sbin/rmmod vfio_iommu_type1
|
|
||||||
sudo /sbin/rmmod vfio
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Loads new vfio-pci (and vfio module if needed).
|
|
||||||
#
|
|
||||||
load_vfio_module()
|
|
||||||
{
|
|
||||||
remove_vfio_module
|
|
||||||
|
|
||||||
VFIO_PATH="kernel/drivers/vfio/pci/vfio-pci.ko"
|
|
||||||
|
|
||||||
echo "Loading VFIO module"
|
|
||||||
/sbin/lsmod | grep -s vfio_pci > /dev/null
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
if [ -f /lib/modules/$(uname -r)/$VFIO_PATH ] ; then
|
|
||||||
sudo /sbin/modprobe vfio-pci
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# make sure regular users can read /dev/vfio
|
|
||||||
echo "chmod /dev/vfio"
|
|
||||||
sudo chmod a+x /dev/vfio
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
echo "FAIL"
|
|
||||||
quit
|
|
||||||
fi
|
|
||||||
echo "OK"
|
|
||||||
|
|
||||||
# check if /dev/vfio/vfio exists - that way we
|
|
||||||
# know we either loaded the module, or it was
|
|
||||||
# compiled into the kernel
|
|
||||||
if [ ! -e /dev/vfio/vfio ] ; then
|
|
||||||
echo "## ERROR: VFIO not found!"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Unloads the rte_kni.ko module.
|
|
||||||
#
|
|
||||||
remove_kni_module()
|
|
||||||
{
|
|
||||||
echo "Unloading any existing DPDK KNI module"
|
|
||||||
/sbin/lsmod | grep -s rte_kni > /dev/null
|
|
||||||
if [ $? -eq 0 ] ; then
|
|
||||||
sudo /sbin/rmmod rte_kni
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Loads the rte_kni.ko module.
|
|
||||||
#
|
|
||||||
load_kni_module()
|
|
||||||
{
|
|
||||||
# Check that the KNI module is already built.
|
|
||||||
if [ ! -f $RTE_SDK/$RTE_TARGET/kmod/rte_kni.ko ];then
|
|
||||||
echo "## ERROR: Target does not have the DPDK KNI Module."
|
|
||||||
echo " To fix, please try to rebuild target."
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Unload existing version if present.
|
|
||||||
remove_kni_module
|
|
||||||
|
|
||||||
# Now try load the KNI module.
|
|
||||||
echo "Loading DPDK KNI module"
|
|
||||||
sudo /sbin/insmod $RTE_SDK/$RTE_TARGET/kmod/rte_kni.ko
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
echo "## ERROR: Could not load kmod/rte_kni.ko."
|
|
||||||
quit
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Sets appropriate permissions on /dev/vfio/* files
|
|
||||||
#
|
|
||||||
set_vfio_permissions()
|
|
||||||
{
|
|
||||||
# make sure regular users can read /dev/vfio
|
|
||||||
echo "chmod /dev/vfio"
|
|
||||||
sudo chmod a+x /dev/vfio
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
echo "FAIL"
|
|
||||||
quit
|
|
||||||
fi
|
|
||||||
echo "OK"
|
|
||||||
|
|
||||||
# make sure regular user can access everything inside /dev/vfio
|
|
||||||
echo "chmod /dev/vfio/*"
|
|
||||||
sudo chmod 0666 /dev/vfio/*
|
|
||||||
if [ $? -ne 0 ] ; then
|
|
||||||
echo "FAIL"
|
|
||||||
quit
|
|
||||||
fi
|
|
||||||
echo "OK"
|
|
||||||
|
|
||||||
# since permissions are only to be set when running as
|
|
||||||
# regular user, we only check ulimit here
|
|
||||||
#
|
|
||||||
# warn if regular user is only allowed
|
|
||||||
# to memlock <64M of memory
|
|
||||||
MEMLOCK_AMNT=`ulimit -l`
|
|
||||||
|
|
||||||
if [ "$MEMLOCK_AMNT" != "unlimited" ] ; then
|
|
||||||
MEMLOCK_MB=`expr $MEMLOCK_AMNT / 1024`
|
|
||||||
echo ""
|
|
||||||
echo "Current user memlock limit: ${MEMLOCK_MB} MB"
|
|
||||||
echo ""
|
|
||||||
echo "This is the maximum amount of memory you will be"
|
|
||||||
echo "able to use with DPDK and VFIO if run as current user."
|
|
||||||
echo -n "To change this, please adjust limits.conf memlock "
|
|
||||||
echo "limit for current user."
|
|
||||||
|
|
||||||
if [ $MEMLOCK_AMNT -lt 65536 ] ; then
|
|
||||||
echo ""
|
|
||||||
echo "## WARNING: memlock limit is less than 64MB"
|
|
||||||
echo -n "## DPDK with VFIO may not be able to initialize "
|
|
||||||
echo "if run as current user."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Removes all reserved hugepages.
|
|
||||||
#
|
|
||||||
clear_huge_pages()
|
|
||||||
{
|
|
||||||
echo > .echo_tmp
|
|
||||||
for d in /sys/devices/system/node/node? ; do
|
|
||||||
echo "echo 0 > $d/hugepages/hugepages-${HUGEPGSZ}/nr_hugepages" >> .echo_tmp
|
|
||||||
done
|
|
||||||
echo "Removing currently reserved hugepages"
|
|
||||||
sudo sh .echo_tmp
|
|
||||||
rm -f .echo_tmp
|
|
||||||
|
|
||||||
remove_mnt_huge
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Creates hugepages.
|
|
||||||
#
|
|
||||||
set_non_numa_pages()
|
|
||||||
{
|
|
||||||
clear_huge_pages
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo " Input the number of ${HUGEPGSZ} hugepages"
|
|
||||||
echo " Example: to have 128MB of hugepages available in a 2MB huge page system,"
|
|
||||||
echo " enter '64' to reserve 64 * 2MB pages"
|
|
||||||
echo -n "Number of pages: "
|
|
||||||
read Pages
|
|
||||||
|
|
||||||
echo "echo $Pages > /sys/kernel/mm/hugepages/hugepages-${HUGEPGSZ}/nr_hugepages" > .echo_tmp
|
|
||||||
|
|
||||||
echo "Reserving hugepages"
|
|
||||||
sudo sh .echo_tmp
|
|
||||||
rm -f .echo_tmp
|
|
||||||
|
|
||||||
create_mnt_huge
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Creates hugepages on specific NUMA nodes.
|
|
||||||
#
|
|
||||||
set_numa_pages()
|
|
||||||
{
|
|
||||||
clear_huge_pages
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo " Input the number of ${HUGEPGSZ} hugepages for each node"
|
|
||||||
echo " Example: to have 128MB of hugepages available per node in a 2MB huge page system,"
|
|
||||||
echo " enter '64' to reserve 64 * 2MB pages on each node"
|
|
||||||
|
|
||||||
echo > .echo_tmp
|
|
||||||
for d in /sys/devices/system/node/node? ; do
|
|
||||||
node=$(basename $d)
|
|
||||||
echo -n "Number of pages for $node: "
|
|
||||||
read Pages
|
|
||||||
echo "echo $Pages > $d/hugepages/hugepages-${HUGEPGSZ}/nr_hugepages" >> .echo_tmp
|
|
||||||
done
|
|
||||||
echo "Reserving hugepages"
|
|
||||||
sudo sh .echo_tmp
|
|
||||||
rm -f .echo_tmp
|
|
||||||
|
|
||||||
create_mnt_huge
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Run unit test application.
|
|
||||||
#
|
|
||||||
run_test_app()
|
|
||||||
{
|
|
||||||
echo ""
|
|
||||||
echo " Enter hex bitmask of cores to execute test app on"
|
|
||||||
echo " Example: to execute app on cores 0 to 7, enter 0xff"
|
|
||||||
echo -n "bitmask: "
|
|
||||||
read Bitmask
|
|
||||||
echo "Launching app"
|
|
||||||
sudo ${RTE_TARGET}/app/test -c $Bitmask $EAL_PARAMS
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Run unit testpmd application.
|
|
||||||
#
|
|
||||||
run_testpmd_app()
|
|
||||||
{
|
|
||||||
echo ""
|
|
||||||
echo " Enter hex bitmask of cores to execute testpmd app on"
|
|
||||||
echo " Example: to execute app on cores 0 to 7, enter 0xff"
|
|
||||||
echo -n "bitmask: "
|
|
||||||
read Bitmask
|
|
||||||
echo "Launching app"
|
|
||||||
sudo ${RTE_TARGET}/app/testpmd -c $Bitmask $EAL_PARAMS -- -i
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Print hugepage information.
|
|
||||||
#
|
|
||||||
grep_meminfo()
|
|
||||||
{
|
|
||||||
grep -i huge /proc/meminfo
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Calls dpdk-devbind.py --status to show the devices and what they
|
|
||||||
# are all bound to, in terms of drivers.
|
|
||||||
#
|
|
||||||
show_devices()
|
|
||||||
{
|
|
||||||
if [ -d /sys/module/vfio_pci -o -d /sys/module/igb_uio ]; then
|
|
||||||
${RTE_SDK}/usertools/dpdk-devbind.py --status
|
|
||||||
else
|
|
||||||
echo "# Please load the 'igb_uio' or 'vfio-pci' kernel module before "
|
|
||||||
echo "# querying or adjusting device bindings"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Uses dpdk-devbind.py to move devices to work with vfio-pci
|
|
||||||
#
|
|
||||||
bind_devices_to_vfio()
|
|
||||||
{
|
|
||||||
if [ -d /sys/module/vfio_pci ]; then
|
|
||||||
${RTE_SDK}/usertools/dpdk-devbind.py --status
|
|
||||||
echo ""
|
|
||||||
echo -n "Enter PCI address of device to bind to VFIO driver: "
|
|
||||||
read PCI_PATH
|
|
||||||
sudo ${RTE_SDK}/usertools/dpdk-devbind.py -b vfio-pci $PCI_PATH &&
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "# Please load the 'vfio-pci' kernel module before querying or "
|
|
||||||
echo "# adjusting device bindings"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Uses dpdk-devbind.py to move devices to work with igb_uio
|
|
||||||
#
|
|
||||||
bind_devices_to_igb_uio()
|
|
||||||
{
|
|
||||||
if [ -d /sys/module/igb_uio ]; then
|
|
||||||
${RTE_SDK}/usertools/dpdk-devbind.py --status
|
|
||||||
echo ""
|
|
||||||
echo -n "Enter PCI address of device to bind to IGB UIO driver: "
|
|
||||||
read PCI_PATH
|
|
||||||
sudo ${RTE_SDK}/usertools/dpdk-devbind.py -b igb_uio $PCI_PATH && echo "OK"
|
|
||||||
else
|
|
||||||
echo "# Please load the 'igb_uio' kernel module before querying or "
|
|
||||||
echo "# adjusting device bindings"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Uses dpdk-devbind.py to move devices to work with kernel drivers again
|
|
||||||
#
|
|
||||||
unbind_devices()
|
|
||||||
{
|
|
||||||
${RTE_SDK}/usertools/dpdk-devbind.py --status
|
|
||||||
echo ""
|
|
||||||
echo -n "Enter PCI address of device to unbind: "
|
|
||||||
read PCI_PATH
|
|
||||||
echo ""
|
|
||||||
echo -n "Enter name of kernel driver to bind the device to: "
|
|
||||||
read DRV
|
|
||||||
sudo ${RTE_SDK}/usertools/dpdk-devbind.py -b $DRV $PCI_PATH && echo "OK"
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Options for building a target. Note that this step MUST be first as it sets
|
|
||||||
# up TARGETS[] starting from 1, and this is accessed in setup_target using the
|
|
||||||
# user entered option.
|
|
||||||
#
|
|
||||||
step1_func()
|
|
||||||
{
|
|
||||||
TITLE="Select the DPDK environment to build"
|
|
||||||
CONFIG_NUM=1
|
|
||||||
for cfg in config/defconfig_* ; do
|
|
||||||
cfg=${cfg/config\/defconfig_/}
|
|
||||||
TEXT[$CONFIG_NUM]="$cfg"
|
|
||||||
TARGETS[$CONFIG_NUM]=$cfg
|
|
||||||
FUNC[$CONFIG_NUM]="setup_target"
|
|
||||||
let "CONFIG_NUM+=1"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Options for setting up environment.
|
|
||||||
#
|
|
||||||
step2_func()
|
|
||||||
{
|
|
||||||
TITLE="Setup linux environment"
|
|
||||||
|
|
||||||
TEXT[1]="Insert IGB UIO module"
|
|
||||||
FUNC[1]="load_igb_uio_module"
|
|
||||||
|
|
||||||
TEXT[2]="Insert VFIO module"
|
|
||||||
FUNC[2]="load_vfio_module"
|
|
||||||
|
|
||||||
TEXT[3]="Insert KNI module"
|
|
||||||
FUNC[3]="load_kni_module"
|
|
||||||
|
|
||||||
TEXT[4]="Setup hugepage mappings for non-NUMA systems"
|
|
||||||
FUNC[4]="set_non_numa_pages"
|
|
||||||
|
|
||||||
TEXT[5]="Setup hugepage mappings for NUMA systems"
|
|
||||||
FUNC[5]="set_numa_pages"
|
|
||||||
|
|
||||||
TEXT[6]="Display current Ethernet/Baseband/Crypto device settings"
|
|
||||||
FUNC[6]="show_devices"
|
|
||||||
|
|
||||||
TEXT[7]="Bind Ethernet/Baseband/Crypto device to IGB UIO module"
|
|
||||||
FUNC[7]="bind_devices_to_igb_uio"
|
|
||||||
|
|
||||||
TEXT[8]="Bind Ethernet/Baseband/Crypto device to VFIO module"
|
|
||||||
FUNC[8]="bind_devices_to_vfio"
|
|
||||||
|
|
||||||
TEXT[9]="Setup VFIO permissions"
|
|
||||||
FUNC[9]="set_vfio_permissions"
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Options for running applications.
|
|
||||||
#
|
|
||||||
step3_func()
|
|
||||||
{
|
|
||||||
TITLE="Run test application for linux environment"
|
|
||||||
|
|
||||||
TEXT[1]="Run test application (\$RTE_TARGET/app/test)"
|
|
||||||
FUNC[1]="run_test_app"
|
|
||||||
|
|
||||||
TEXT[2]="Run testpmd application in interactive mode (\$RTE_TARGET/app/testpmd)"
|
|
||||||
FUNC[2]="run_testpmd_app"
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Other options
|
|
||||||
#
|
|
||||||
step4_func()
|
|
||||||
{
|
|
||||||
TITLE="Other tools"
|
|
||||||
|
|
||||||
TEXT[1]="List hugepage info from /proc/meminfo"
|
|
||||||
FUNC[1]="grep_meminfo"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
|
||||||
# Options for cleaning up the system
|
|
||||||
#
|
|
||||||
step5_func()
|
|
||||||
{
|
|
||||||
TITLE="Uninstall and system cleanup"
|
|
||||||
|
|
||||||
TEXT[1]="Unbind devices from IGB UIO or VFIO driver"
|
|
||||||
FUNC[1]="unbind_devices"
|
|
||||||
|
|
||||||
TEXT[2]="Remove IGB UIO module"
|
|
||||||
FUNC[2]="remove_igb_uio_module"
|
|
||||||
|
|
||||||
TEXT[3]="Remove VFIO module"
|
|
||||||
FUNC[3]="remove_vfio_module"
|
|
||||||
|
|
||||||
TEXT[4]="Remove KNI module"
|
|
||||||
FUNC[4]="remove_kni_module"
|
|
||||||
|
|
||||||
TEXT[5]="Remove hugepage mappings"
|
|
||||||
FUNC[5]="clear_huge_pages"
|
|
||||||
}
|
|
||||||
|
|
||||||
STEPS[1]="step1_func"
|
|
||||||
STEPS[2]="step2_func"
|
|
||||||
STEPS[3]="step3_func"
|
|
||||||
STEPS[4]="step4_func"
|
|
||||||
STEPS[5]="step5_func"
|
|
||||||
|
|
||||||
QUIT=0
|
|
||||||
|
|
||||||
while [ "$QUIT" == "0" ]; do
|
|
||||||
OPTION_NUM=1
|
|
||||||
|
|
||||||
for s in $(seq ${#STEPS[@]}) ; do
|
|
||||||
${STEPS[s]}
|
|
||||||
|
|
||||||
echo "----------------------------------------------------------"
|
|
||||||
echo " Step $s: ${TITLE}"
|
|
||||||
echo "----------------------------------------------------------"
|
|
||||||
|
|
||||||
for i in $(seq ${#TEXT[@]}) ; do
|
|
||||||
echo "[$OPTION_NUM] ${TEXT[i]}"
|
|
||||||
OPTIONS[$OPTION_NUM]=${FUNC[i]}
|
|
||||||
let "OPTION_NUM+=1"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Clear TEXT and FUNC arrays before next step
|
|
||||||
unset TEXT
|
|
||||||
unset FUNC
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "[$OPTION_NUM] Exit Script"
|
|
||||||
OPTIONS[$OPTION_NUM]="quit"
|
|
||||||
echo ""
|
|
||||||
echo '--------------------------------------------------'
|
|
||||||
echo 'WARNING: This tool will be removed from DPDK 20.11'
|
|
||||||
echo '--------------------------------------------------'
|
|
||||||
echo
|
|
||||||
echo -n "Option: "
|
|
||||||
read our_entry
|
|
||||||
echo ""
|
|
||||||
${OPTIONS[our_entry]} ${our_entry}
|
|
||||||
|
|
||||||
if [ "$QUIT" == "0" ] ; then
|
|
||||||
echo
|
|
||||||
echo -n "Press enter to continue ..."; read
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
Loading…
Reference in New Issue
Block a user