Re: [RFC PATCH] iommu: Default to lazy DMA mode on ARM64

From: Pranjal Shrivastava

Date: Thu Apr 02 2026 - 22:28:56 EST


Hi Nafees,

On Thu, Apr 02, 2026 at 07:59:13PM +0000, Nafees Ahmed Abdul wrote:
> ARM64 currently falls through to IOMMU_DEFAULT_DMA_STRICT, while
> X86 defaults to IOMMU_DEFAULT_DMA_LAZY. On ARM64 bare-metal
> systems with the ARM SMMU, strict mode causes synchronous TLBI
> + CMD_SYNC on every DMA unmap, resulting in significant
> throughput degradation for network-intensive workloads.
>
> Benchmarked on an ARM64 bare-metal system (AWS m8g.metal-24xl)
> running Debian 13 with kernel 6.12.74, using iperf3:
>
> STRICT (default): 14.9 Gbps
> LAZY: 39.8 Gbps
>
> This is a 2.67x throughput improvement simply by switching the
> IOMMU default domain mode.
>
> Distributions that do not explicitly override this Kconfig
> choice (e.g., Debian, SLES) silently get STRICT on ARM64,
> causing this regression on bare-metal systems. Changing the
> upstream default avoids the need for each distribution to
> independently carry this override.
>

Thanks for the patch and the benchmarks.

However, I'm not sure why should we change the compile-time default for
all ARM64 systems? Currently, users can already achieve this behavior by
using the `iommu.strict=0` boot parameter.

Since IOMMU_DEFAULT_DMA_STRICT provides a higher security guarantee
(preventing sub-page aliasing and potential "use-after-unmap" attacks),
keeping it as the default and allowing users to opt-in via the kernel cmd
line seems like the safer path, in my opinion.

Additionally, distributions like Debian can also set this via their
GRUB configurations for performance.

> Add ARM64 to the LAZY default to align with X86 behavior.
>
> Signed-off-by: Nafees Ahmed Abdul <nafeabd@xxxxxxxxxx>
> ---
> drivers/iommu/Kconfig | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
> index f86262b11..2822aba75 100644
> --- a/drivers/iommu/Kconfig
> +++ b/drivers/iommu/Kconfig
> @@ -96,7 +96,7 @@ config IOMMU_DEBUGFS
> choice
> prompt "IOMMU default domain type"
> depends on IOMMU_API
> - default IOMMU_DEFAULT_DMA_LAZY if X86 || S390
> + default IOMMU_DEFAULT_DMA_LAZY if X86 || S390 || ARM64
> default IOMMU_DEFAULT_DMA_STRICT
> help
> Choose the type of IOMMU domain used to manage DMA API usage by

Thanks,
Praan