All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <ming.lei@redhat.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Jens Axboe <axboe@kernel.dk>,
	Christoph Hellwig <hch@infradead.org>,
	linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
	Laurence Oberman <loberman@redhat.com>
Subject: Re: [PATCH V3 4/4] genirq/affinity: irq vector spread among online CPUs as far as possible
Date: Wed, 4 Apr 2018 23:08:05 +0800	[thread overview]
Message-ID: <20180404150759.GA24824@ming.t460p> (raw)
In-Reply-To: <alpine.DEB.2.21.1804041017530.2056@nanos.tec.linutronix.de>

On Wed, Apr 04, 2018 at 10:25:16AM +0200, Thomas Gleixner wrote:
> On Wed, 4 Apr 2018, Ming Lei wrote:
> > On Tue, Apr 03, 2018 at 03:32:21PM +0200, Thomas Gleixner wrote:
> > > On Thu, 8 Mar 2018, Ming Lei wrote:
> > > > 1) before 84676c1f21 ("genirq/affinity: assign vectors to all possible CPUs")
> > > > 	irq 39, cpu list 0
> > > > 	irq 40, cpu list 1
> > > > 	irq 41, cpu list 2
> > > > 	irq 42, cpu list 3
> > > > 
> > > > 2) after 84676c1f21 ("genirq/affinity: assign vectors to all possible CPUs")
> > > > 	irq 39, cpu list 0-2
> > > > 	irq 40, cpu list 3-4,6
> > > > 	irq 41, cpu list 5
> > > > 	irq 42, cpu list 7
> > > > 
> > > > 3) after applying this patch against V4.15+:
> > > > 	irq 39, cpu list 0,4
> > > > 	irq 40, cpu list 1,6
> > > > 	irq 41, cpu list 2,5
> > > > 	irq 42, cpu list 3,7
> > > 
> > > That's more or less window dressing. If the device is already in use when
> > > the offline CPUs get hot plugged, then the interrupts still stay on cpu 0-3
> > > because the effective affinity of interrupts on X86 (and other
> > > architectures) is always a single CPU.
> > > 
> > > So this only might move interrupts to the hotplugged CPUs when the device
> > > is initialized after CPU hotplug and the actual vector allocation moves an
> > > interrupt out to the higher numbered CPUs if they have less vectors
> > > allocated than the lower numbered ones.
> > 
> > It works for blk-mq devices, such as NVMe.
> > 
> > Now NVMe driver creates num_possible_cpus() hw queues, and each
> > hw queue is assigned one msix irq vector.
> > 
> > Storage is Client/Server model, that means the interrupt is only
> > delivered to CPU after one IO request is submitted to hw queue and
> > it is completed by this hw queue.
> > 
> > When CPUs is hotplugged, and there will be IO submitted from these
> > CPUs, then finally IOs complete and irq events are generated from
> > hw queues, and notify these submission CPU by IRQ finally.
> 
> I'm aware how that hw-queue stuff works. But that only works if the
> spreading algorithm makes the interrupts affine to offline/not-present CPUs
> when the block device is initialized.
> 
> In the example above:
> 
> > > > 	irq 39, cpu list 0,4
> > > > 	irq 40, cpu list 1,6
> > > > 	irq 41, cpu list 2,5
> > > > 	irq 42, cpu list 3,7
> 
> and assumed that at driver init time only CPU 0-3 are online then the
> hotplug of CPU 4-7 will not result in any interrupt delivered to CPU 4-7.

Indeed, and I just tested this case, and found that no interrupts are
delivered to CPU 4-7.

In theory, the affinity has been assigned to these irq vectors, and
programmed to interrupt controller, I understand it should work.

Could you explain it a bit why interrupts aren't delivered to CPU 4-7?


Thanks,
Ming

  parent reply	other threads:[~2018-04-04 15:08 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-08 10:53 [PATCH V3 0/4] genirq/affinity: irq vector spread among online CPUs as far as possible Ming Lei
2018-03-08 10:53 ` [PATCH V3 1/4] genirq/affinity: rename *node_to_possible_cpumask as *node_to_cpumask Ming Lei
2018-04-06 21:52   ` [tip:irq/core] genirq/affinity: Rename " tip-bot for Ming Lei
2018-03-08 10:53 ` [PATCH V3 2/4] genirq/affinity: move actual irq vector spread into one helper Ming Lei
2018-04-06 21:53   ` [tip:irq/core] genirq/affinity: Move actual irq vector spreading into a helper function tip-bot for Ming Lei
2018-03-08 10:53 ` [PATCH V3 3/4] genirq/affinity: support to do irq vectors spread starting from any vector Ming Lei
2018-04-06 21:53   ` [tip:irq/core] genirq/affinity: Allow irq spreading from a given starting point tip-bot for Ming Lei
2018-03-08 10:53 ` [PATCH V3 4/4] genirq/affinity: irq vector spread among online CPUs as far as possible Ming Lei
2018-04-03 13:32   ` Thomas Gleixner
2018-04-03 16:00     ` Ming Lei
2018-04-04  8:25       ` Thomas Gleixner
2018-04-04 12:45         ` Thomas Gleixner
2018-04-04 15:20           ` Ming Lei
2018-04-05 10:12             ` Thomas Gleixner
2018-04-04 15:08         ` Ming Lei [this message]
2018-04-04 19:38           ` Thomas Gleixner
2018-04-06  9:13             ` Ming Lei
2018-04-06  9:46               ` Thomas Gleixner
2018-04-06 21:49                 ` Thomas Gleixner
2018-04-08  3:19                   ` Ming Lei
2018-04-06 21:54   ` [tip:irq/core] genirq/affinity: Spread irq vectors among present " tip-bot for Ming Lei
2018-03-08 13:18 ` [PATCH V3 0/4] genirq/affinity: irq vector spread among online " Artem Bityutskiy
2018-03-08 13:25   ` Artem Bityutskiy
2018-03-08 13:34   ` Ming Lei
2018-03-08 23:20     ` Thomas Gleixner
2018-03-09  1:24       ` Ming Lei
2018-03-09  7:00         ` Artem Bityutskiy
2018-03-09  7:33           ` Ming Lei
2018-03-09 10:08         ` Thomas Gleixner
2018-03-09 12:08           ` Ming Lei
2018-03-09 15:08             ` Thomas Gleixner
2018-03-13  3:11               ` Dou Liyang
2018-03-13  7:38                 ` Artem Bityutskiy
2018-03-13  7:38                   ` Artem Bityutskiy
2018-03-13  8:35                   ` Ming Lei
2018-03-13  8:39                     ` Artem Bityutskiy
2018-03-13  8:39                       ` Artem Bityutskiy
2018-03-13  9:35                       ` Rafael J. Wysocki
2018-03-14  3:29                         ` Dou Liyang
2018-03-14  4:11                           ` Dou Liyang
2018-03-14  9:07                             ` Artem Bityutskiy
2018-03-14  9:47                               ` Dou Liyang
2018-03-13  9:25                 ` Rafael J. Wysocki
2018-03-14  3:30                   ` Dou Liyang
2018-03-30  3:15               ` Ming Lei
2018-04-03 12:55                 ` Thomas Gleixner
2018-03-26  8:39   ` Thorsten Leemhuis
2018-03-28  6:15     ` Artem Bityutskiy

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=20180404150759.GA24824@ming.t460p \
    --to=ming.lei@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=hch@infradead.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=loberman@redhat.com \
    --cc=tglx@linutronix.de \
    /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.