From: Robin Murphy <robin.murphy@arm.com>
To: John Garry <john.g.garry@oracle.com>,
Jakub Kicinski <kuba@kernel.org>, Joerg Roedel <joro@8bytes.org>
Cc: will@kernel.org, iommu@lists.linux.dev,
linux-kernel@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH v4] iommu: Optimise PCI SAC address trick
Date: Thu, 15 Jun 2023 12:41:56 +0100 [thread overview]
Message-ID: <99c1e8ab-a064-c770-072f-23ef9e9abb82@arm.com> (raw)
In-Reply-To: <568df53c-41a7-94d7-6662-f8f7c72e5178@oracle.com>
On 2023-06-15 11:11, John Garry wrote:
> On 15/06/2023 10:04, Robin Murphy wrote:
>>> Since we're at rc6 time and a cautious approach was wanted to merge
>>> this change, I doubt that this will be merged for this cycle. That's
>>> quite unfortunate.
>>>
>>> Please note what I mentioned earlier about using
>>> dma_opt_mapping_size(). This API is used by some block storage
>>> drivers to avoid your same problem, by clamping max_sectors_kb at
>>> this size - see sysfs-block Doc for info there. Maybe it can be used
>>> similarly for network drivers.
>>
>> It's not the same problem - in this case the mappings are already
>> small enough to use the rcaches, and it seems more to do with the
>> total number of unusable cached IOVAs being enough to keep the 32-bit
>> space almost-but-not-quite full most of the time, defeating the
>> max32_alloc_size optimisation whenever the caches run out of the right
>> size entries.
>
> Sure, not the same problem.
>
> However when we switched storage drivers to use dma_opt_mapping_size()
> then performance is similar to iommu.forcedac=1 - that's what I found,
> anyway.
>
> This tells me that that even though IOVA allocator performance is poor
> when the 32b space fills, it was those large IOVAs which don't fit in
> the rcache which were the major contributor to hogging the CPU in the
> allocator.
The root cause is that every time the last usable 32-bit IOVA is
allocated, the *next* PCI caller to hit the rbtree for a SAC allocation
is burdened with walking the whole 32-bit subtree to determine that it's
full again and re-set max32_alloc_size. That's the overhead that
forcedac avoids.
In the storage case with larger buffers, dma_opt_mapping_size() also
means you spend less time in the rbtree, but because you're inherently
hitting it less often at all, since most allocations can now hopefully
be fulfilled by the caches. That's obviously moot when the mappings are
already small enough to be cached and the only reason for hitting the
rbtree is overflow/underflow in the depot because the working set is
sufficiently large and the allocation pattern sufficiently "bursty".
Thanks,
Robin.
next prev parent reply other threads:[~2023-06-15 11:42 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-13 13:40 [PATCH v4] iommu: Optimise PCI SAC address trick Robin Murphy
2023-04-13 14:02 ` Jakub Kicinski
2023-04-14 11:45 ` Joerg Roedel
2023-04-14 17:45 ` Robin Murphy
2023-05-23 16:06 ` Joerg Roedel
2023-05-24 14:56 ` Robin Murphy
2023-06-13 17:58 ` Jakub Kicinski
2023-06-15 7:49 ` John Garry
2023-06-15 9:04 ` Robin Murphy
2023-06-15 10:11 ` John Garry
2023-06-15 11:41 ` Robin Murphy [this message]
2023-06-15 12:15 ` John Garry
2023-04-18 9:23 ` Vasant Hegde
2023-04-18 10:19 ` John Garry
2023-04-18 17:36 ` Linus Torvalds
2023-04-18 18:50 ` John Garry
2023-04-18 10:57 ` Robin Murphy
2023-04-18 13:05 ` Vasant Hegde
2023-07-14 14:09 ` Joerg Roedel
2023-07-17 9:24 ` John Garry
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=99c1e8ab-a064-c770-072f-23ef9e9abb82@arm.com \
--to=robin.murphy@arm.com \
--cc=iommu@lists.linux.dev \
--cc=john.g.garry@oracle.com \
--cc=joro@8bytes.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox