X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=doc%2Fguides%2Fprog_guide%2Fenv_abstraction_layer.rst;h=6e59faeea9f3168eb1bdfc90d5fcd6e7530b6d34;hb=a2aafb9aa6517160a2621e2140e36d67326190d5;hp=1d63675e2e841604fe11e600524b0fb90e3dee64;hpb=b76fafb174d2cd5247c3573bb3d49444e195e760;p=dpdk.git diff --git a/doc/guides/prog_guide/env_abstraction_layer.rst b/doc/guides/prog_guide/env_abstraction_layer.rst index 1d63675e2e..6e59faeea9 100644 --- a/doc/guides/prog_guide/env_abstraction_layer.rst +++ b/doc/guides/prog_guide/env_abstraction_layer.rst @@ -425,7 +425,8 @@ IOVA Mode Detection IOVA Mode is selected by considering what the current usable Devices on the system require and/or support. -Below is the 2-step heuristic for this choice. +On FreeBSD, RTE_IOVA_PA is always the default. On Linux, the IOVA mode is +detected based on a 2-step heuristic detailed below. For the first step, EAL asks each bus its requirement in terms of IOVA mode and decides on a preferred IOVA mode. @@ -438,17 +439,41 @@ and decides on a preferred IOVA mode. RTE_IOVA_VA), then the preferred IOVA mode is RTE_IOVA_DC (see below with the check on Physical Addresses availability), +If the buses have expressed no preference on which IOVA mode to pick, then a +default is selected using the following logic: + +- if physical addresses are not available, RTE_IOVA_VA mode is used +- if /sys/kernel/iommu_groups is not empty, RTE_IOVA_VA mode is used +- otherwise, RTE_IOVA_PA mode is used + +In the case when the buses had disagreed on their preferred IOVA mode, part of +the buses won't work because of this decision. + The second step checks if the preferred mode complies with the Physical Addresses availability since those are only available to root user in recent -kernels. +kernels. Namely, if the preferred mode is RTE_IOVA_PA but there is no access to +Physical Addresses, then EAL init fails early, since later probing of the +devices would fail anyway. + +.. note:: + + The RTE_IOVA_VA mode is preferred as the default in most cases for the + following reasons: + + - All drivers are expected to work in RTE_IOVA_VA mode, irrespective of + physical address availability. + - By default, the mempool, first asks for IOVA-contiguous memory using + ``RTE_MEMZONE_IOVA_CONTIG``. This is slow in RTE_IOVA_PA mode and it may + affect the application boot time. + - It is easy to enable large amount of IOVA-contiguous memory use-cases + with IOVA in VA mode. + + It is expected that all PCI drivers work in both RTE_IOVA_PA and + RTE_IOVA_VA modes. -- if the preferred mode is RTE_IOVA_PA but there is no access to Physical - Addresses, then EAL init fails early, since later probing of the devices - would fail anyway, -- if the preferred mode is RTE_IOVA_DC then based on the Physical Addresses - availability, the preferred mode is adjusted to RTE_IOVA_PA or RTE_IOVA_VA. - In the case when the buses had disagreed on the IOVA Mode at the first step, - part of the buses won't work because of this decision. + If a PCI driver does not support RTE_IOVA_PA mode, the + ``RTE_PCI_DRV_NEED_IOVA_AS_VA`` flag is used to dictate that this PCI + driver can only work in RTE_IOVA_VA mode. IOVA Mode Configuration ~~~~~~~~~~~~~~~~~~~~~~~ @@ -623,8 +648,8 @@ Known Issues Alternatively, applications can use the lock-free stack mempool handler. When considering this handler, note that: - - It is currently limited to the x86_64 platform, because it uses an - instruction (16-byte compare-and-swap) that is not yet available on other + - It is currently limited to the aarch64 and x86_64 platforms, because it uses + an instruction (16-byte compare-and-swap) that is not yet available on other platforms. - It has worse average-case performance than the non-preemptive rte_ring, but software caching (e.g. the mempool cache) can mitigate this by reducing the