From: Thomas Gleixner <tglx@linutronix.de>
To: Ming Lei <ming.lei@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
Angus Chen <angus.chen@jaguarmicro.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Jason Wang <jasowang@redhat.com>
Subject: Re: IRQ affinity problem from virtio_blk
Date: Wed, 16 Nov 2022 14:06:00 +0100 [thread overview]
Message-ID: <87a64rqcav.ffs@tglx> (raw)
In-Reply-To: <Y3TK+0m6kJjiyrao@T590>
On Wed, Nov 16 2022 at 19:35, Ming Lei wrote:
> On Wed, Nov 16, 2022 at 11:43:24AM +0100, Thomas Gleixner wrote:
>> > Let's say we have 20 queues - then just 10 devices will exhaust the
>> > vector space right?
>>
>> No.
>>
>> If you have 20 queues then the queues are spread out over the
>> CPUs. Assume 80 CPUs:
>>
>> Then each queue is associated to 80/20 = 4 CPUs and the resulting
>> affinity mask of each queue contains exactly 4 CPUs:
>>
>> q0: 0 - 3
>> q1: 4 - 7
>> ...
>> q19: 76 - 79
>>
>> So this puts exactly 80 vectors aside, one per CPU.
>>
>> As long as at least one CPU of a queue mask is online the queue is
>> enabled. If the last CPU of a queue mask goes offline then the queue is
>> shutdown which means the interrupt associated to the queue is shut down
>> too. That's all handled by the block MQ and the interrupt core. If a CPU
>> of a queue mask comes back online then the guaranteed vector is
>> allocated again.
>>
>> So it does not matter how many queues per device you have it will
>> reserve exactly ONE interrupt per CPU.
>>
>> Ergo you need 200 devices to exhaust the vector space.
>
> I am wondering why one interrupt needs to be reserved for each CPU, in
> theory one queue needs one irq, I understand, so would you mind
> explaining the story a bit?
It's only one interrupt per queue. Interrupt != vector.
The guarantee of managed interrupts always was that if there are less
queues than CPUs that CPU hotunplug cannot result in vector exhaustion.
Therefore we differentiate between managed and non-managed
interrupts. Managed have a guaranteed reservation, non-managed do not.
That's been a very deliberate design decision from the very beginning.
Thanks,
tglx
next prev parent reply other threads:[~2022-11-16 13:07 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-15 3:40 IRQ affinity problem from virtio_blk Angus Chen
2022-11-15 22:19 ` Thomas Gleixner
2022-11-15 22:44 ` Michael S. Tsirkin
2022-11-15 23:04 ` Thomas Gleixner
2022-11-15 23:24 ` Thomas Gleixner
2022-11-15 23:36 ` Michael S. Tsirkin
2022-11-16 1:02 ` Angus Chen
2022-11-16 10:55 ` Thomas Gleixner
2022-11-16 11:24 ` Angus Chen
2022-11-16 13:27 ` Thomas Gleixner
2022-11-16 10:43 ` Thomas Gleixner
2022-11-16 11:35 ` Ming Lei
2022-11-16 13:06 ` Thomas Gleixner [this message]
2022-11-16 0:46 ` Angus Chen
2022-11-16 10:54 ` Thomas Gleixner
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=87a64rqcav.ffs@tglx \
--to=tglx@linutronix.de \
--cc=angus.chen@jaguarmicro.com \
--cc=jasowang@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ming.lei@redhat.com \
--cc=mst@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.