[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240806-isolcpus-io-queues-v3-8-da0eecfeaf8b@suse.de>
Date: Tue, 06 Aug 2024 14:06:40 +0200
From: Daniel Wagner <dwagner@...e.de>
To: Jens Axboe <axboe@...nel.dk>, Keith Busch <kbusch@...nel.org>,
Sagi Grimberg <sagi@...mberg.me>, Thomas Gleixner <tglx@...utronix.de>,
Christoph Hellwig <hch@....de>,
"Martin K. Petersen" <martin.petersen@...cle.com>,
John Garry <john.g.garry@...cle.com>, "Michael S. Tsirkin" <mst@...hat.com>,
Jason Wang <jasowang@...hat.com>,
Kashyap Desai <kashyap.desai@...adcom.com>,
Sumit Saxena <sumit.saxena@...adcom.com>,
Shivasharan S <shivasharan.srikanteshwara@...adcom.com>,
Chandrakanth patil <chandrakanth.patil@...adcom.com>,
Sathya Prakash Veerichetty <sathya.prakash@...adcom.com>,
Suganath Prabu Subramani <suganath-prabu.subramani@...adcom.com>,
Nilesh Javali <njavali@...vell.com>, GR-QLogic-Storage-Upstream@...vell.com,
Jonathan Corbet <corbet@....net>
Cc: Frederic Weisbecker <frederic@...nel.org>, Mel Gorman <mgorman@...e.de>,
Hannes Reinecke <hare@...e.de>,
Sridhar Balaraman <sbalaraman@...allelwireless.com>,
"brookxu.cn" <brookxu.cn@...il.com>, Ming Lei <ming.lei@...hat.com>,
linux-kernel@...r.kernel.org, linux-block@...r.kernel.org,
linux-nvme@...ts.infradead.org, linux-scsi@...r.kernel.org,
virtualization@...ts.linux.dev, megaraidlinux.pdl@...adcom.com,
mpi3mr-linuxdrv.pdl@...adcom.com, MPT-FusionLinux.pdl@...adcom.com,
storagedev@...rochip.com, linux-doc@...r.kernel.org,
Daniel Wagner <dwagner@...e.de>
Subject: [PATCH v3 08/15] sched/isolation: Add io_queue housekeeping option
Multiqueue drivers such as nvme-pci are spreading IO queues on all CPUs
for optimal performance. isolcpu users are usually more concerned about
noise on isolated CPUs. Introduce a new isolcpus mask which allows the
user to define on which CPUs IO queues should be placed.
Signed-off-by: Daniel Wagner <dwagner@...e.de>
---
include/linux/sched/isolation.h | 15 +++++++++++++++
kernel/sched/isolation.c | 7 +++++++
2 files changed, 22 insertions(+)
diff --git a/include/linux/sched/isolation.h b/include/linux/sched/isolation.h
index 2b461129d1fa..0101d0fc8c00 100644
--- a/include/linux/sched/isolation.h
+++ b/include/linux/sched/isolation.h
@@ -6,6 +6,20 @@
#include <linux/init.h>
#include <linux/tick.h>
+/**
+ * enum hk_type - housekeeping cpu mask types
+ * @HK_TYPE_TIMER: housekeeping cpu mask for timers
+ * @HK_TYPE_RCU: housekeeping cpu mask for RCU
+ * @HK_TYPE_MISC: housekeeping cpu mask for miscalleanous resources
+ * @HK_TYPE_SCHED: housekeeping cpu mask for scheduling
+ * @HK_TYPE_TICK: housekeeping cpu maks for timer tick
+ * @HK_TYPE_DOMAIN: housekeeping cpu mask for general SMP balancing
+ * and scheduling algoririthms
+ * @HK_TYPE_WQ: housekeeping cpu mask for worksqueues
+ * @HK_TYPE_MANAGED_IRQ: housekeeping cpu mask for managed IRQs
+ * @HK_TYPE_KTHREAD: housekeeping cpu mask for kthreads
+ * @HK_TYPE_IO_QUEUE: housekeeping cpu mask for I/O queues
+ */
enum hk_type {
HK_TYPE_TIMER,
HK_TYPE_RCU,
@@ -16,6 +30,7 @@ enum hk_type {
HK_TYPE_WQ,
HK_TYPE_MANAGED_IRQ,
HK_TYPE_KTHREAD,
+ HK_TYPE_IO_QUEUE,
HK_TYPE_MAX
};
diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c
index 5891e715f00d..91d7a434330c 100644
--- a/kernel/sched/isolation.c
+++ b/kernel/sched/isolation.c
@@ -18,6 +18,7 @@ enum hk_flags {
HK_FLAG_WQ = BIT(HK_TYPE_WQ),
HK_FLAG_MANAGED_IRQ = BIT(HK_TYPE_MANAGED_IRQ),
HK_FLAG_KTHREAD = BIT(HK_TYPE_KTHREAD),
+ HK_FLAG_IO_QUEUE = BIT(HK_TYPE_IO_QUEUE),
};
DEFINE_STATIC_KEY_FALSE(housekeeping_overridden);
@@ -228,6 +229,12 @@ static int __init housekeeping_isolcpus_setup(char *str)
continue;
}
+ if (!strncmp(str, "io_queue,", 9)) {
+ str += 9;
+ flags |= HK_FLAG_IO_QUEUE;
+ continue;
+ }
+
/*
* Skip unknown sub-parameter and validate that it is not
* containing an invalid character.
--
2.46.0
Powered by blists - more mailing lists