[UBUNTU 24.04] IOMMU DMA mode changed in kernel config causes massive throughput degradation for PCI-related network workloads
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Ubuntu on IBM z Systems |
New
|
High
|
Skipper Bug Screeners | ||
linux (Ubuntu) |
New
|
Undecided
|
Unassigned |
Bug Description
Symptom:
Comparing Ubuntu 24.04 (kernelversion: 6.8.0-31-generic) against Ubuntu 22.04, all of our PCI-related network measurements on LPAR show massive throughput degradations (up to -72%). This shows for almost all workloads and numbers of connections, detereorating with the number of connections increasing. Especially drastic is the drop for a high number of parallel connections (50 and 250) and for small and medium-size transactional workloads. However, also for streaming-type workloads the degradation is clearly visible (up to 48% degradation).
Problem:
With kernel config setting CONFIG_
Behavior can also be changed with a kernel commandline parameter (iommu.strict) for easy verification.
The issue is known and was quickly fixed upstream in December 2023, after being present for little less than two weeks.
Upstream fix: https:/
Repro:
rr1c-200x1000-250 with rr1c-200x1000-
<?xml version="1.0"?>
<profile name="TCP_RR">
<group nprocs="250">
</group>
</profile>
0) Install uperf on both systems, client and server.
1) Start uperf at server: uperf -s
2) Start uperf at client: uperf -vai 5 -m uperf-profile.xml
3) Switch from strict to lazy mode using kernel commandline parameter iommu.strict=0.
4) Repeat steps 1) and 2).
Example:
For the following example, we chose the workload named above (rr1c-200x1000-
iommu.strict=1 (strict): 233464.914 TPS
iommu.strict=0 (lazy): 835123.193 TPS
tags: | added: architecture-s39064 bugnameltc-207082 severity-high targetmilestone-inin--- |
Changed in ubuntu: | |
assignee: | nobody → Skipper Bug Screeners (skipper-screen-team) |
affects: | ubuntu → linux (Ubuntu) |
I just had a look at the Ubuntu kernel noble master-next tree and can find commit: IOMMU_DEFAULT_ DMA_STRICT IOMMU_DEFAULT_ DMA_STRICT option needs to be disabled. IOMMU_DEFAULT_ DMA_STRICT= y IOMMU_DEFAULT_ DMA_STRICT= y
"Revert "s390: update defconfigs"" under the hash b2b97a62f055
and I can see that it got reverted with that:
$ git show b2b97a62f055 | grep CONFIG_
CONFIG_
-CONFIG_
-CONFIG_
But git also tells me that it is in since kernel v6.8 and with that since the first ubuntu 6.8 kernel we had: Ubuntu-6.8.0-6 -- so should also be in Ubuntu-6.8.0-31. IOMMU_DEFAULT_ DMA_STRICT /boot/config- 6.8.0-31- generic IOMMU_DEFAULT_ DMA_STRICT= y IOMMU_DEFAULT_ DMA_STRICT /boot/config- 6.8.0-31- generic IOMMU_DEFAULT_ DMA_STRICT= y
But it does not seem to be reflected in the kernel options of the Ubuntu kernel:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble
$ uname -a
Linux hwe0008 6.8.0-31-generic #31-Ubuntu SMP Sat Apr 20 00:14:26 UTC 2024 s390x s390x s390x GNU/Linux
$ grep CONFIG_
CONFIG_
also not in the current, updated kernel:
Linux hwe0008 6.8.0-36-generic #36-Ubuntu SMP Mon Jun 10 09:59:13 UTC 2024 s390x s390x s390x GNU/Linux
$ grep CONFIG_
CONFIG_
For some reason the change in the upstream commit was not taken over into the Ubuntu kernel configs ...