Hi Marc,
But they are, aren't they? See what we do in irq_set_affinity:
I'm just wondering if non-managed interrupts should be included in
the load balancing calculation? Couldn't irqbalance (if active) start
moving non-managed interrupts around anyway?
+ÂÂÂÂÂÂÂ atomic_inc(per_cpu_ptr(&cpu_lpi_count, cpu));
+ÂÂÂÂÂÂÂ atomic_dec(per_cpu_ptr(&cpu_lpi_count,
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ its_dev->event_map.col_map[id]));
We don't try to "rebalance" anything based on that though, not that
I think we should.
Ah sorry, I meant whether they should not be included. In
its_irq_domain_activate(), we increment the per-cpu lpi count and also
use its_pick_target_cpu() to find the least loaded cpu. I am asking
whether we should just stick with the old policy for non-managed
interrupts here.
After checking D05, I see a very significant performance hit for SAS
controller performance - ~40% throughout lowering.
With this patch, now we have effective affinity targeted at seemingly
"random" CPUs, as opposed to all just using CPU0. This affects
performance.
The difference is that when we use managed interrupts - like for NVME
or D06 SAS controller - the irq cpu affinity mask matches the CPUs
which enqueue the requests to the queue associated with the interrupt.
So there is an efficiency is enqueuing and deqeueing on same CPU group
- all related to blk multi-queue. And this is not the case for
non-managed interrupts.
It shouldn't be hard to do, and most of the existing code could bePlease give this new patch a shot on your system (my D05 doesn't have
any managed devices):
We could consider supporting platform msi managed interrupts, but I
doubt the value.
moved to the generic level. As for the value, I'm not convinced
either. For example D05 uses the MBIGEN as an intermediate interrupt
controller, so MSIs are from the PoV of MBIGEN, and not the SAS device
attached to it. Not the best design...
JFYI, I did raise this following topic before, but that's as far as I got:
https://marc.info/?l=linux-block&m=150722088314310&w=2