From: Alexander Duyck <alexander.h.duyck@linux.intel.com> To: linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org Cc: len.brown@intel.com, bvanassche@acm.org, linux-pm@vger.kernel.org, alexander.h.duyck@linux.intel.com, rafael@kernel.org, jiangshanlai@gmail.com, linux-nvdimm@lists.01.org, pavel@ucw.cz, zwisler@kernel.org, tj@kernel.org, akpm@linux-foundation.org Subject: [driver-core PATCH v6 9/9] libnvdimm: Schedule device registration on node local to the device Date: Thu, 08 Nov 2018 10:07:26 -0800 [thread overview] Message-ID: <154170044652.12967.17419321472770956712.stgit@ahduyck-desk1.jf.intel.com> (raw) In-Reply-To: <154170028986.12967.2108024712555179678.stgit@ahduyck-desk1.jf.intel.com> Force the device registration for nvdimm devices to be closer to the actual device. This is achieved by using either the NUMA node ID of the region, or of the parent. By doing this we can have everything above the region based on the region, and everything below the region based on the nvdimm bus. By guaranteeing NUMA locality I see an improvement of as high as 25% for per-node init of a system with 12TB of persistent memory. Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com> --- drivers/nvdimm/bus.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c index f1fb39921236..b1e193541874 100644 --- a/drivers/nvdimm/bus.c +++ b/drivers/nvdimm/bus.c @@ -23,6 +23,7 @@ #include <linux/ndctl.h> #include <linux/sched.h> #include <linux/slab.h> +#include <linux/cpu.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/mm.h> @@ -513,11 +514,15 @@ void __nd_device_register(struct device *dev) set_dev_node(dev, to_nd_region(dev)->numa_node); dev->bus = &nvdimm_bus_type; - if (dev->parent) + if (dev->parent) { get_device(dev->parent); + if (dev_to_node(dev) == NUMA_NO_NODE) + set_dev_node(dev, dev_to_node(dev->parent)); + } get_device(dev); - async_schedule_domain(nd_async_device_register, dev, - &nd_async_domain); + + async_schedule_dev_domain(nd_async_device_register, dev, + &nd_async_domain); } void nd_device_register(struct device *dev) _______________________________________________ Linux-nvdimm mailing list Linux-nvdimm@lists.01.org https://lists.01.org/mailman/listinfo/linux-nvdimm
WARNING: multiple messages have this Message-ID (diff)
From: Alexander Duyck <alexander.h.duyck@linux.intel.com> To: linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org Cc: linux-nvdimm@lists.01.org, tj@kernel.org, akpm@linux-foundation.org, linux-pm@vger.kernel.org, jiangshanlai@gmail.com, rafael@kernel.org, len.brown@intel.com, pavel@ucw.cz, zwisler@kernel.org, dan.j.williams@intel.com, dave.jiang@intel.com, bvanassche@acm.org, alexander.h.duyck@linux.intel.com Subject: [driver-core PATCH v6 9/9] libnvdimm: Schedule device registration on node local to the device Date: Thu, 08 Nov 2018 10:07:26 -0800 [thread overview] Message-ID: <154170044652.12967.17419321472770956712.stgit@ahduyck-desk1.jf.intel.com> (raw) In-Reply-To: <154170028986.12967.2108024712555179678.stgit@ahduyck-desk1.jf.intel.com> Force the device registration for nvdimm devices to be closer to the actual device. This is achieved by using either the NUMA node ID of the region, or of the parent. By doing this we can have everything above the region based on the region, and everything below the region based on the nvdimm bus. By guaranteeing NUMA locality I see an improvement of as high as 25% for per-node init of a system with 12TB of persistent memory. Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com> --- drivers/nvdimm/bus.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c index f1fb39921236..b1e193541874 100644 --- a/drivers/nvdimm/bus.c +++ b/drivers/nvdimm/bus.c @@ -23,6 +23,7 @@ #include <linux/ndctl.h> #include <linux/sched.h> #include <linux/slab.h> +#include <linux/cpu.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/mm.h> @@ -513,11 +514,15 @@ void __nd_device_register(struct device *dev) set_dev_node(dev, to_nd_region(dev)->numa_node); dev->bus = &nvdimm_bus_type; - if (dev->parent) + if (dev->parent) { get_device(dev->parent); + if (dev_to_node(dev) == NUMA_NO_NODE) + set_dev_node(dev, dev_to_node(dev->parent)); + } get_device(dev); - async_schedule_domain(nd_async_device_register, dev, - &nd_async_domain); + + async_schedule_dev_domain(nd_async_device_register, dev, + &nd_async_domain); } void nd_device_register(struct device *dev)
next prev parent reply other threads:[~2018-11-08 18:07 UTC|newest] Thread overview: 107+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-11-08 18:06 [driver-core PATCH v6 0/9] Add NUMA aware async_schedule calls Alexander Duyck 2018-11-08 18:06 ` Alexander Duyck 2018-11-08 18:06 ` [driver-core PATCH v6 1/9] workqueue: Provide queue_work_node to queue work near a given NUMA node Alexander Duyck 2018-11-08 18:06 ` Alexander Duyck 2018-11-27 1:01 ` Dan Williams 2018-11-27 1:01 ` Dan Williams 2018-11-08 18:06 ` [driver-core PATCH v6 2/9] async: Add support for queueing on specific " Alexander Duyck 2018-11-08 18:06 ` Alexander Duyck 2018-11-08 23:36 ` Bart Van Assche 2018-11-08 23:36 ` Bart Van Assche 2018-11-08 23:36 ` Bart Van Assche 2018-11-11 19:32 ` Greg KH 2018-11-11 19:32 ` Greg KH 2018-11-11 19:32 ` Greg KH 2018-11-11 19:53 ` Dan Williams 2018-11-11 19:53 ` Dan Williams 2018-11-11 19:53 ` Dan Williams 2018-11-11 20:35 ` Greg KH 2018-11-11 20:35 ` Greg KH 2018-11-11 20:35 ` Greg KH 2018-11-11 22:17 ` Dan Williams 2018-11-11 22:17 ` Dan Williams 2018-11-11 22:17 ` Dan Williams 2018-11-11 23:27 ` Alexander Duyck 2018-11-11 23:27 ` Alexander Duyck 2018-11-11 23:27 ` Alexander Duyck 2018-11-11 19:59 ` Pavel Machek 2018-11-11 20:33 ` Greg KH 2018-11-11 20:33 ` Greg KH 2018-11-11 21:24 ` Bart Van Assche 2018-11-11 21:24 ` Bart Van Assche 2018-11-13 22:10 ` Pavel Machek 2018-11-27 1:10 ` Dan Williams 2018-11-27 1:10 ` Dan Williams 2018-11-27 1:10 ` Dan Williams 2018-11-08 18:06 ` [driver-core PATCH v6 3/9] device core: Consolidate locking and unlocking of parent and device Alexander Duyck 2018-11-08 18:06 ` Alexander Duyck 2018-11-08 18:06 ` Alexander Duyck 2018-11-08 22:43 ` jane.chu 2018-11-08 22:43 ` jane.chu-QHcLZuEGTsvQT0dZR+AlfA 2018-11-08 22:43 ` jane.chu 2018-11-08 22:48 ` Alexander Duyck 2018-11-08 22:48 ` Alexander Duyck 2018-11-27 1:44 ` Dan Williams 2018-11-27 1:44 ` Dan Williams 2018-11-08 18:07 ` [driver-core PATCH v6 4/9] driver core: Move async_synchronize_full call Alexander Duyck 2018-11-08 18:07 ` Alexander Duyck 2018-11-27 2:11 ` Dan Williams 2018-11-27 2:11 ` Dan Williams 2018-11-27 17:38 ` Alexander Duyck 2018-11-27 17:38 ` Alexander Duyck 2018-11-27 20:35 ` Dan Williams 2018-11-27 20:35 ` Dan Williams 2018-11-27 21:36 ` Alexander Duyck 2018-11-27 21:36 ` Alexander Duyck 2018-11-27 22:26 ` Dan Williams 2018-11-27 22:26 ` Dan Williams 2018-11-27 22:26 ` Dan Williams 2018-11-08 18:07 ` [driver-core PATCH v6 5/9] driver core: Establish clear order of operations for deferred probe and remove Alexander Duyck 2018-11-08 18:07 ` Alexander Duyck 2018-11-08 18:07 ` Alexander Duyck 2018-11-08 23:47 ` Bart Van Assche 2018-11-08 23:47 ` Bart Van Assche 2018-11-08 23:47 ` Bart Van Assche 2018-11-08 18:07 ` [driver-core PATCH v6 6/9] driver core: Probe devices asynchronously instead of the driver Alexander Duyck 2018-11-08 18:07 ` Alexander Duyck 2018-11-08 18:07 ` Alexander Duyck 2018-11-08 23:59 ` Bart Van Assche 2018-11-08 23:59 ` Bart Van Assche 2018-11-27 2:48 ` Dan Williams 2018-11-27 2:48 ` Dan Williams 2018-11-27 2:48 ` Dan Williams 2018-11-27 17:57 ` Alexander Duyck 2018-11-27 17:57 ` Alexander Duyck 2018-11-27 18:32 ` Dan Williams 2018-11-27 18:32 ` Dan Williams 2018-11-08 18:07 ` [driver-core PATCH v6 7/9] driver core: Attach devices on CPU local to device node Alexander Duyck 2018-11-08 18:07 ` Alexander Duyck 2018-11-27 4:50 ` Dan Williams 2018-11-27 4:50 ` Dan Williams 2018-11-27 4:50 ` Dan Williams 2018-11-08 18:07 ` [driver-core PATCH v6 8/9] PM core: Use new async_schedule_dev command Alexander Duyck 2018-11-08 18:07 ` Alexander Duyck 2018-11-08 18:07 ` Alexander Duyck 2018-11-27 4:52 ` Dan Williams 2018-11-27 4:52 ` Dan Williams 2018-11-27 4:52 ` Dan Williams 2018-11-08 18:07 ` Alexander Duyck [this message] 2018-11-08 18:07 ` [driver-core PATCH v6 9/9] libnvdimm: Schedule device registration on node local to the device Alexander Duyck 2018-11-27 2:21 ` Dan Williams 2018-11-27 2:21 ` Dan Williams 2018-11-27 2:21 ` Dan Williams 2018-11-27 18:04 ` Alexander Duyck 2018-11-27 19:34 ` Dan Williams 2018-11-27 19:34 ` Dan Williams 2018-11-27 20:33 ` Bart Van Assche 2018-11-27 20:33 ` Bart Van Assche 2018-11-27 20:33 ` Bart Van Assche 2018-11-27 20:50 ` Dan Williams 2018-11-27 20:50 ` Dan Williams 2018-11-27 20:50 ` Dan Williams 2018-11-27 21:22 ` Bart Van Assche 2018-11-27 21:22 ` Bart Van Assche 2018-11-27 21:22 ` Bart Van Assche 2018-11-27 22:34 ` Dan Williams 2018-11-27 22:34 ` Dan Williams 2018-11-27 22:34 ` Dan Williams
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=154170044652.12967.17419321472770956712.stgit@ahduyck-desk1.jf.intel.com \ --to=alexander.h.duyck@linux.intel.com \ --cc=akpm@linux-foundation.org \ --cc=bvanassche@acm.org \ --cc=gregkh@linuxfoundation.org \ --cc=jiangshanlai@gmail.com \ --cc=len.brown@intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvdimm@lists.01.org \ --cc=linux-pm@vger.kernel.org \ --cc=pavel@ucw.cz \ --cc=rafael@kernel.org \ --cc=tj@kernel.org \ --cc=zwisler@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: linkBe 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.