mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Daniel Wagner <dwagner@suse.de>
To: Hannes Reinecke <hare@suse.de>
Cc: Daniel Wagner <wagi@kernel.org>, Jens Axboe <axboe@kernel.dk>,
	 Keith Busch <kbusch@kernel.org>, Christoph Hellwig <hch@lst.de>,
	Sagi Grimberg <sagi@grimberg.me>,
	 "Michael S. Tsirkin" <mst@redhat.com>,
	Aaron Tomlin <atomlin@atomlin.com>,
	 "Martin K. Petersen" <martin.petersen@oracle.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	 Costa Shulyupin <costa.shul@redhat.com>,
	Juri Lelli <juri.lelli@redhat.com>,
	 Valentin Schneider <vschneid@redhat.com>,
	Waiman Long <llong@redhat.com>, Ming Lei <ming.lei@redhat.com>,
	 Frederic Weisbecker <frederic@kernel.org>,
	Mel Gorman <mgorman@suse.de>,
	 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
	 linux-nvme@lists.infradead.org, megaraidlinux.pdl@broadcom.com,
	linux-scsi@vger.kernel.org,  storagedev@microchip.com,
	virtualization@lists.linux.dev,
	 GR-QLogic-Storage-Upstream@marvell.com
Subject: Re: [PATCH v7 08/10] blk-mq: use hk cpus only when isolcpus=io_queue is enabled
Date: Fri, 4 Jul 2025 11:21:49 +0200	[thread overview]
Message-ID: <e2e62f99-164d-4e80-be1e-9affa724efd0@flourine.local> (raw)
In-Reply-To: <9025c412-9b6f-4714-a880-e8e6084e1b4c@suse.de>

On Thu, Jul 03, 2025 at 08:58:02AM +0200, Hannes Reinecke wrote:
> > +	for (queue = 0; queue < qmap->nr_queues; queue++) {
> > +		unsigned int idx = (qmap->queue_offset + queue) % nr_masks;
> > +
> > +		for_each_cpu(cpu, &hk_masks[idx]) {
> > +			qmap->mq_map[cpu] = idx;
> > +
> > +			if (cpu_online(cpu))
> > +				cpumask_set_cpu(qmap->mq_map[cpu], active_hctx);
> 
> Why cpu_online? Up until this point it really didn't matter if the affinity
> mask was set to 'online' or 'possible' cpus, but here you
> require CPUs to be online...

This part here tracks if the a hardware context has at least one
housekeeping CPU online. It is possible to provide configuration where
we end up with hardware context which have offline housekeeping CPUs and
online isolcpus. active_hctx tracks which of the hardware contexts is
usable which is used in the next step...

> > +		}
> > +	}
> > +
> > +	/* Map isolcpus to hardware context */
> > +	queue = cpumask_first(active_hctx);
> > +	for_each_cpu_andnot(cpu, cpu_possible_mask, mask) {
> > +		qmap->mq_map[cpu] = (qmap->queue_offset + queue) % nr_masks;
> > +		queue = cpumask_next_wrap(queue, active_hctx);
> > +	}
> 
> Really? Doesn't this map _all_ cpus, and not just the isolcpus?

for_each_cpu iterates over is all CPUs which are not houskeeping CPUs
(mask is the housekeeping mask), thus these are all isol CPU. Note the
'andnot' part.

The cpumask_first/cpumask_next_wrap returns only hardware context which
have at least one housekeeping CPU which is online. Yes, it possible to
make this a bit smarter, so that we keep the grouping of the offline
CPUs intact, though I am not sure if it is worth to add complexity for a
corner case at least not yet.

> > +fallback:
> > +	/*
> > +	 * Map all CPUs to the first hctx to ensure at least one online
> > +	 * housekeeping CPU is serving it.
> > +	 */
> > +	for_each_possible_cpu(cpu)
> > +		qmap->mq_map[cpu] = 0;
> 
> I think you need to map all hctx, no?

The block layer is filtering out hctx which have no CPU assigned to it
when selecting a queue. This is really a failsafe mode, it just makes
sure the system boots.

> > +	/* Map housekeeping CPUs to a hctx */
> > +	for (queue = 0; queue < qmap->nr_queues; queue++) {
> > +		for_each_cpu(cpu, dev->bus->irq_get_affinity(dev, offset + queue)) {
> > +			qmap->mq_map[cpu] = qmap->queue_offset + queue;
> > +
> > +			cpumask_set_cpu(cpu, mask);
> > +			if (cpu_online(cpu))
> > +				cpumask_set_cpu(qmap->mq_map[cpu], active_hctx);
> 
> Now that is really curious. You pick up the interrupt affinity from the
> 'bus', which, I assume, is the PCI bus. And this would imply that the
> bus can (or already is) programmed for this interrupt affinity.

Yes, this is the case. irq_create_affinity_masks which use
group_cpu_evenly/group_mask_cpu_evenly for the number of requested IRQs.
The number of IRQs can be higher than the number of requested queues
here. It's necessary to use the affinity mask created by
irq_create_affinity_mask as input.

> Which would imply that this is a usable interrupt affinity from the
> hardware perspective, irrespective on whether the cpu is online or
> not. So why the check to cpu_online()? Can't we simply take the existing affinity
> and rely on the hardware to do the right thing?

Again, this is tracking if a htcx has online housekeeping CPU.

  reply	other threads:[~2025-07-04  9:21 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-02 16:33 [PATCH v7 00/10] blk: honor isolcpus configuration Daniel Wagner
2025-07-02 16:33 ` [PATCH v7 01/10] lib/group_cpus: Add group_masks_cpus_evenly() Daniel Wagner
2025-07-03  6:18   ` Hannes Reinecke
2025-09-03 12:36     ` Daniel Wagner
2025-07-11  8:28   ` John Garry
2025-09-03 12:42     ` Daniel Wagner
2025-07-02 16:33 ` [PATCH v7 02/10] genirq/affinity: Add cpumask to struct irq_affinity Daniel Wagner
2025-07-03  6:19   ` Hannes Reinecke
2025-07-02 16:33 ` [PATCH v7 03/10] blk-mq: add blk_mq_{online|possible}_queue_affinity Daniel Wagner
2025-07-03  6:29   ` Hannes Reinecke
2025-07-02 16:33 ` [PATCH v7 04/10] nvme-pci: use block layer helpers to constrain queue affinity Daniel Wagner
2025-07-03  6:29   ` Hannes Reinecke
2025-07-02 16:33 ` [PATCH v7 05/10] scsi: Use " Daniel Wagner
2025-07-03  6:43   ` Hannes Reinecke
2025-07-04  9:37     ` Daniel Wagner
2025-07-04 10:28       ` Hannes Reinecke
2025-07-04 12:30         ` Daniel Wagner
2025-09-05  7:41     ` Daniel Wagner
2025-07-02 16:33 ` [PATCH v7 06/10] virtio: blk/scsi: use " Daniel Wagner
2025-07-03  6:43   ` Hannes Reinecke
2025-07-02 16:33 ` [PATCH v7 07/10] isolation: Introduce io_queue isolcpus type Daniel Wagner
2025-07-08  1:26   ` Aaron Tomlin
2025-07-02 16:33 ` [PATCH v7 08/10] blk-mq: use hk cpus only when isolcpus=io_queue is enabled Daniel Wagner
2025-07-03  6:58   ` Hannes Reinecke
2025-07-04  9:21     ` Daniel Wagner [this message]
2025-07-03  9:01   ` Christoph Hellwig
2025-07-04  9:00     ` Daniel Wagner
2025-07-07  5:42       ` Christoph Hellwig
2025-07-03 14:47   ` kernel test robot
2025-07-02 16:33 ` [PATCH v7 09/10] blk-mq: prevent offlining hk CPUs with associated online isolated CPUs Daniel Wagner
2025-07-03  6:58   ` Hannes Reinecke
2025-07-07  7:44   ` Ming Lei
2025-07-08  1:31     ` Aaron Tomlin
2025-07-08  1:23   ` Aaron Tomlin
2025-07-02 16:34 ` [PATCH v7 10/10] docs: add io_queue flag to isolcpus Daniel Wagner
2025-07-03  6:59   ` Hannes Reinecke
2025-07-08  1:26   ` Aaron Tomlin

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=e2e62f99-164d-4e80-be1e-9affa724efd0@flourine.local \
    --to=dwagner@suse.de \
    --cc=GR-QLogic-Storage-Upstream@marvell.com \
    --cc=atomlin@atomlin.com \
    --cc=axboe@kernel.dk \
    --cc=costa.shul@redhat.com \
    --cc=frederic@kernel.org \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=juri.lelli@redhat.com \
    --cc=kbusch@kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=llong@redhat.com \
    --cc=martin.petersen@oracle.com \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=megaraidlinux.pdl@broadcom.com \
    --cc=mgorman@suse.de \
    --cc=ming.lei@redhat.com \
    --cc=mst@redhat.com \
    --cc=sagi@grimberg.me \
    --cc=storagedev@microchip.com \
    --cc=tglx@linutronix.de \
    --cc=virtualization@lists.linux.dev \
    --cc=vschneid@redhat.com \
    --cc=wagi@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

all inboxes | Powered by JetHome®