As before, comments inline.

On Fri, Nov 03, 2023 at 12:01:49AM -0400, David Young wrote:
> ---
>  .../getting_started_guide/system_setup.rst    | 195 ++++++++++++++++++
>  1 file changed, 195 insertions(+)
>  create mode 100644 doc/guides/getting_started_guide/system_setup.rst
> 
> diff --git a/doc/guides/getting_started_guide/system_setup.rst 
> b/doc/guides/getting_started_guide/system_setup.rst
> new file mode 100644
> index 0000000000..fa9d249ec7
> --- /dev/null
> +++ b/doc/guides/getting_started_guide/system_setup.rst
> @@ -0,0 +1,195 @@
> +..  SPDX-License-Identifier: BSD-3-Clause
> +    Copyright(c) 2010-2025 Intel Corporation.
> +
> +.. _memory_setup:
> +
> +.. |reg| unicode:: U+000AE

Better to get this character via ".. include:: <isonum.txt>". That is what
other files do.

> +
> +Setting up a System to Run DPDK Applications
> +============================================
> +
> +This section provides step-by-step instructions for setting up your system 
> to run DPDK applications. It covers system configurations for Linux, FreeBSD, 
> and Windows. Each section details the necessary memory and device setups for 
> these operating systems.
> +
> +Navigate to the section that corresponds to your operating system to begin 
> the setup process.
> +
> +.. contents:: Table of Contents
> +   :local:
> +
> +System Setup for Linux
> +----------------------
> +
> +Memory Setup: Reserving Hugepages
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +For Linux, DPDK requires hugepages be reserved for its use on the system. To 
> check if hugepages are are on your system, you can run the following command::

"are are" probably should be "are reserved".

> +
> +        grep HugePages_Total /proc/meminfo
> +
> +If hugepages are not reserved, you will need to reserve them by following 
> these steps:
> +
> +1. Determine the number of hugepages you want to allocate. For example, to 
> allocate 1024 hugepages of 2MB each, you can use the following command::
> +
> +        echo 1024 | sudo tee 
> /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
> +
> +2. To make the hugepages configuration persistent across reboots, add the 
> following line to your `/etc/sysctl.conf` file, adjusting the number of 
> hugepages as needed::
> +
> +        vm.nr_hugepages = 1024
> +
> +3. Most distributions make hugepages available via `/dev/hugepages`, so this 
> step may not be necessary. If you need to manually mount the hugepages 
> filesystem, add the following line to your `/etc/fstab` file::

Starting a bullet point with a sentence saying "this step may not be
necessary" seems a little strange - at least to me. Can we reword this perhaps?

> +
> +        nodev /mnt/huge hugetlbfs defaults 0 0
> +
> +   Then, create the mount directory and mount the filesystem::
> +
> +        mkdir -p /mnt/huge
> +        mount -a
> +

We need a section somewhere in the docs about other page sizes - both 1G on
x86, and the various sizes on Arm and other archs. Appendix would be a good
place for it, with a reference here. For the large page sizes we need to
talk about boot-time reservation.

> +Device Setup: VFIO
> +^^^^^^^^^^^^^^^^^^
> +
> +VFIO is a robust and secure driver that relies on IOMMU protection.
> +To make use of VFIO on Linux, the ``vfio-pci`` module must be loaded:
> +
> +.. code-block:: console
> +
> +    sudo modprobe vfio-pci
> +
> +VFIO kernel is usually present by default in all distributions,
> +however please consult your distribution's documentation to make sure that 
> is the case.
> +
> +To make use of full VFIO functionality,
> +both kernel and BIOS must support and be configured
> +to use IO virtualization (such as Intel\ |reg| VT-d).
> +
> +.. note::
> +
> +   In most cases, specifying "iommu=on" as kernel parameter should be enough 
> to
> +   configure the Linux kernel to use IOMMU.
> +
> +For proper operation of VFIO when running DPDK applications as a 
> non-privileged user,
> +correct permissions should also be set up.
> +For more information, refer to :ref:`running_dpdk_apps_without_root`.
> +
> +Refer to :ref:`vfio_no_iommu_mode` when there is no IOMMU available on the 
> system.
> +
> +Binding and Unbinding Network Ports to/from VFIO-PCI Module
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +To bind or unbind network ports to/from the `vfio-pci` module on Linux, 
> follow these steps:
> +
> +Replace ``<module_id>`` with the appropriate module identifier.

On initial reading I thought module_id was referring to kernel module, i.e.
vfio-pci. However, it instead is refering to the PCI device id or BDF
address. Let's clarify this by using a better term. I'd suggest "<pci_id>".
Also give an example:

Replace <pci_id> with the appropriate device identifier, e.g. 01:00.0,
a8:00.0.

> +
> +**Unbind from current module**:
> +   If a device is bound to a kernel driver, unbind it:
> +
> +   .. code-block:: bash
> +
> +      sudo dpdk-devbind.py -u <module_id>
> +

Actually, this step is not necessary. The devbind script is smart enough to
know that to bind to a new driver, it needs to unbind the device first, so
for binding to vfio-pci, it does unbind+bind with the one command.

> +**Bind to vfio-pci module**:
> +   Bind the device to the `vfio-pci` module:
> +
> +   .. code-block:: bash
> +
> +      sudo dpdk-devbind.py -b vfio-pci <module_id>
> +
> +System Setup for FreeBSD
> +------------------------
> +
> +.. _loading_contigmem_module:
> +
> +Memory Setup: Loading the DPDK contigmem Module
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +To run a DPDK application on FreeBSD, physically contiguous memory is 
> required. In the absence of non-transparent superpages, the included sources 
> for the `contigmem` kernel module provides the ability to present contiguous 
> blocks of memory for the DPDK to use. 
> +The ``contigmem`` module must be loaded into the running kernel before any 
> DPDK is run.

"any DPDK" -> "any DPDK application"

> +Once DPDK is installed on the system, the module can be found in the 
> ``/boot/modules``
> +directory.
> +
> +The amount of physically contiguous memory along with the number of 
> physically
> +contiguous blocks to be reserved by the module can be set at runtime prior 
> to module
> +loading using::
> +
> +    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``::
> +
> +    hw.contigmem.num_buffers=n
> +    hw.contigmem.buffer_size=m
> +
> +The variables can be inspected using the following command::
> +
> +    sysctl -a hw.contigmem
> +
> +The module can then be loaded using ``kldload``::
> +
> +    cd /boot/modules
> +    kldload contigmem
> +
> +Device Setup: Loading the DPDK nic_uio Module
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +After :ref:`loading_contigmem_module` on FreeBSD, the ``nic_uio`` module 
> must also be loaded into the running kernel prior to running any DPDK 
> application, e.g. using::
> +
> +    cd /boot/modules
> +    kldload nic_uio
> +
> +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``.
> +
> +To re-bind the ports to the `nic_uio` module upon loading, use the following 
> command::
> +
> +    kenv 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.
> +
> +The variable can also be specified during boot by placing the following into
> +``/boot/loader.conf``, before the previously-described ``nic_uio_load`` 
> line::

Not previously-described!

> +
> +    hw.nic_uio.bdfs="2:0:0,2:0:1"
> +    nic_uio_load="YES"
> +
> +Binding and Unbinding Network Ports to/from nic_uio Module
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +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``.
> +
> +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``) value, and reload the two drivers - first the original kernel 
> driver,
> +and then the ``nic_uio`` driver.
> +
> +Example commands to perform these steps are shown below::
> +
> +    kldunload nic_uio
> +    kldunload <original_driver>
> +    kenv -u hw.nic_uio.bdfs
> +    kldload <original_driver>
> +    kldload nic_uio  # optional
> +
> +System Setup for Windows
> +------------------------
> +
> +Memory Setup: Installing Windows Modules
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +Before running DPDK applications on Windows, certain kernel-mode drivers 
> must be installed. Note that these drivers are not signed, so you'll need to 
> disable signature enforcement. However, be cautious as this can weaken your 
> OS security and is generally not recommended in production environments.
> +
> +Device Setup: Install Drivers
> +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> +
> +To run DPDK applications on Windows, you'll need to install specific 
> kernel-mode drivers:
> +
> +- **virt2phys**: This driver is essential for providing access to physical 
> addresses and is mandatory for allocating physically-contiguous memory, which 
> is required by hardware PMDs. Once loaded successfully, this driver will 
> appear in the Device Manager as ``Virtual to physical address translator 
> device`` under the Kernel bypass category. If DPDK cannot communicate with 
> the driver, a warning will be printed during initialization.
> +
> +- **NetUIO**: This driver provides access to device hardware resources and 
> is mandatory for all hardware PMDs, except for the mlx5 PMD. Devices 
> supported by NetUIO are listed in ``netuio.inf``. You can extend this list to 
> try running DPDK with new devices.
> \ No newline at end of file
> -- 
> 2.41.0.windows.1
> 

Reply via email to