** Changed in: linux (Ubuntu Disco) Status: In Progress => Fix Committed
-- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux in Ubuntu. https://bugs.launchpad.net/bugs/1806488 Title: Support non-strict iommu mode on arm64 Status in linux package in Ubuntu: Fix Committed Status in linux source package in Bionic: In Progress Status in linux source package in Cosmic: In Progress Status in linux source package in Disco: Fix Committed Bug description: [Impact] The Intel IOMMU driver provides an option for strict mode. When disabled, batching of IOTLB flush operations is permitted, allowing the user to trade-off isolation for improved performance. Ubuntu's kernel currently lacks a parity for this feature for ARM. There's a significant performance gain to be had by removing the need to flush the IOMMU TLB on every unmap on arm64. I'm seeing a 25% performance gain w/ fio reads on a single NVMe device. This mode of operation is available for x86 via the "intel_iommu=strict" parameter. Upstream now exposes an equivalent feature for ARM platforms via the "iommu.strict=[0|1]" parameter, while retaining the default strict-enabled mode. [Test Case] $ cat fio.rc [global] rw=read direct=1 ioengine=libaio iodepth=2048 numjobs=10 bs=4k group_reporting=1 group_reporting=1 cpumask=0xff runtime=100 loops = 10000 [job1] filename=/dev/nvme0n1 [Fix] 44f6876a00e83 iommu/arm-smmu: Support non-strict mode b2dfeba654cb0 iommu/io-pgtable-arm-v7s: Add support for non-strict mode 9662b99a19abc iommu/arm-smmu-v3: Add support for non-strict mode b6b65ca20bc93 iommu/io-pgtable-arm: Add support for non-strict mode 68a6efe86f6a1 iommu: Add "iommu.strict" command line option 2da274cdf998a iommu/dma: Add support for non-strict mode 07fdef34d2be6 iommu/arm-smmu-v3: Implement flush_iotlb_all hook 85c7a0f1ef624 iommu/io-pgtable-arm: Fix race handling in split_blk_unmap() [Regression Risk] Most of these patches are specific to ARM, and have been regression tested on both arm64 (HiSilicon D06) and armhf (QEMU virt) using "stress-ng --vm $(nproc)" 2 patches do touch arch-indep code however: > 68a6efe86f6a1 iommu: Add "iommu.strict" command line option Adds a new command line option and sets an attribute that iommu drivers can optionally react to. Doesn't change default behavior. > 2da274cdf998a iommu/dma: Add support for non-strict mode This driver is only built for arm64 and ppc64el (determined by looking at the build logs). Most of this patch only changes behavior in the non-default (and new) iommu.strict=0 case. The exception, which is called out in the commit message, is this hunk: - WARN_ON(iommu_unmap(domain, dma_addr, size) != size); + WARN_ON(iommu_unmap_fast(domain, dma_addr, size) != size); + if (!cookie->fq_domain) + iommu_tlb_sync(domain); In the default case, where fq_domain will be NULl, we are now factoring iommu_unmap() into: iommu_unmap_fast() iommu_tlb_sync() Looking at the source to iommu_unmap() confirms that this is functionally equivalent. To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1806488/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp