* [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline
@ 2020-04-22 9:54 Ming Lei
2020-04-22 10:06 ` John Garry
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Ming Lei @ 2020-04-22 9:54 UTC (permalink / raw)
To: James Bottomley, linux-scsi, Martin K . Petersen
Cc: Ming Lei, Bart Van Assche, Christoph Hellwig, John Garry
The following three fields of scsi_host_template are referenced in
scsi IO submission path, so put them together into one cacheline:
- cmd_size
- queuecommand
- commit_rqs
Cc: Bart Van Assche <bvanassche@acm.org>
Cc: Christoph Hellwig <hch@lst.de>
Cc: John Garry <john.garry@huawei.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
V2:
- move the 3 fields at the beginning of scsi_host_template
- comment why we do this way
include/scsi/scsi_host.h | 72 ++++++++++++++++++++++------------------
1 file changed, 39 insertions(+), 33 deletions(-)
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 822e8cda8d9b..eae5b9f52dfe 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -30,40 +30,15 @@ struct scsi_transport_template;
#define MODE_TARGET 0x02
struct scsi_host_template {
- struct module *module;
- const char *name;
-
/*
- * The info function will return whatever useful information the
- * developer sees fit. If not provided, then the name field will
- * be used instead.
- *
- * Status: OPTIONAL
+ * Put fields referenced in IO submission path together in
+ * same cacheline
*/
- const char *(* info)(struct Scsi_Host *);
/*
- * Ioctl interface
- *
- * Status: OPTIONAL
- */
- int (*ioctl)(struct scsi_device *dev, unsigned int cmd,
- void __user *arg);
-
-
-#ifdef CONFIG_COMPAT
- /*
- * Compat handler. Handle 32bit ABI.
- * When unknown ioctl is passed return -ENOIOCTLCMD.
- *
- * Status: OPTIONAL
+ * Additional per-command data allocated for the driver.
*/
- int (*compat_ioctl)(struct scsi_device *dev, unsigned int cmd,
- void __user *arg);
-#endif
-
- int (*init_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
- int (*exit_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
+ unsigned int cmd_size;
/*
* The queuecommand function is used to queue up a scsi
@@ -111,6 +86,41 @@ struct scsi_host_template {
*/
void (*commit_rqs)(struct Scsi_Host *, u16);
+ struct module *module;
+ const char *name;
+
+ /*
+ * The info function will return whatever useful information the
+ * developer sees fit. If not provided, then the name field will
+ * be used instead.
+ *
+ * Status: OPTIONAL
+ */
+ const char *(* info)(struct Scsi_Host *);
+
+ /*
+ * Ioctl interface
+ *
+ * Status: OPTIONAL
+ */
+ int (*ioctl)(struct scsi_device *dev, unsigned int cmd,
+ void __user *arg);
+
+
+#ifdef CONFIG_COMPAT
+ /*
+ * Compat handler. Handle 32bit ABI.
+ * When unknown ioctl is passed return -ENOIOCTLCMD.
+ *
+ * Status: OPTIONAL
+ */
+ int (*compat_ioctl)(struct scsi_device *dev, unsigned int cmd,
+ void __user *arg);
+#endif
+
+ int (*init_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
+ int (*exit_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
+
/*
* This is an error handling strategy routine. You don't need to
* define one of these if you don't want to - there is a default
@@ -468,10 +478,6 @@ struct scsi_host_template {
*/
u64 vendor_id;
- /*
- * Additional per-command data allocated for the driver.
- */
- unsigned int cmd_size;
struct scsi_host_cmd_pool *cmd_pool;
/* Delay for runtime autosuspend */
--
2.25.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline
2020-04-22 9:54 [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline Ming Lei
@ 2020-04-22 10:06 ` John Garry
2020-04-22 14:36 ` Bart Van Assche
` (3 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: John Garry @ 2020-04-22 10:06 UTC (permalink / raw)
To: Ming Lei, James Bottomley, linux-scsi, Martin K . Petersen
Cc: Bart Van Assche, Christoph Hellwig
On 22/04/2020 10:54, Ming Lei wrote:
> The following three fields of scsi_host_template are referenced in
> scsi IO submission path, so put them together into one cacheline:
>
> - cmd_size
> - queuecommand
> - commit_rqs
>
> Cc: Bart Van Assche <bvanassche@acm.org>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: John Garry <john.garry@huawei.com>
> Signed-off-by: Ming Lei <ming.lei@redhat.com>
FWIW,
Reviewed-by: John Garry <john.garry@huawei.com>
> ---
> V2:
> - move the 3 fields at the beginning of scsi_host_template
> - comment why we do this way
>
> include/scsi/scsi_host.h | 72 ++++++++++++++++++++++------------------
> 1 file changed, 39 insertions(+), 33 deletions(-)
>
> diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
> index 822e8cda8d9b..eae5b9f52dfe 100644
> --- a/include/scsi/scsi_host.h
> +++ b/include/scsi/scsi_host.h
> @@ -30,40 +30,15 @@ struct scsi_transport_template;
> #define MODE_TARGET 0x02
>
> struct scsi_host_template {
> - struct module *module;
> - const char *name;
> -
> /*
> - * The info function will return whatever useful information the
> - * developer sees fit. If not provided, then the name field will
> - * be used instead.
> - *
> - * Status: OPTIONAL
> + * Put fields referenced in IO submission path together in
> + * same cacheline
> */
> - const char *(* info)(struct Scsi_Host *);
>
> /*
> - * Ioctl interface
> - *
> - * Status: OPTIONAL
> - */
> - int (*ioctl)(struct scsi_device *dev, unsigned int cmd,
> - void __user *arg);
> -
> -
> -#ifdef CONFIG_COMPAT
> - /*
> - * Compat handler. Handle 32bit ABI.
> - * When unknown ioctl is passed return -ENOIOCTLCMD.
> - *
> - * Status: OPTIONAL
> + * Additional per-command data allocated for the driver.
> */
> - int (*compat_ioctl)(struct scsi_device *dev, unsigned int cmd,
> - void __user *arg);
> -#endif
> -
> - int (*init_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
> - int (*exit_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
> + unsigned int cmd_size;
>
> /*
> * The queuecommand function is used to queue up a scsi
> @@ -111,6 +86,41 @@ struct scsi_host_template {
> */
> void (*commit_rqs)(struct Scsi_Host *, u16);
>
> + struct module *module;
> + const char *name;
> +
> + /*
> + * The info function will return whatever useful information the
> + * developer sees fit. If not provided, then the name field will
> + * be used instead.
> + *
> + * Status: OPTIONAL
> + */
> + const char *(* info)(struct Scsi_Host *);
> +
> + /*
> + * Ioctl interface
> + *
> + * Status: OPTIONAL
> + */
> + int (*ioctl)(struct scsi_device *dev, unsigned int cmd,
> + void __user *arg);
> +
> +
> +#ifdef CONFIG_COMPAT
> + /*
> + * Compat handler. Handle 32bit ABI.
> + * When unknown ioctl is passed return -ENOIOCTLCMD.
> + *
> + * Status: OPTIONAL
> + */
> + int (*compat_ioctl)(struct scsi_device *dev, unsigned int cmd,
> + void __user *arg);
> +#endif
> +
> + int (*init_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
> + int (*exit_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
> +
> /*
> * This is an error handling strategy routine. You don't need to
> * define one of these if you don't want to - there is a default
> @@ -468,10 +478,6 @@ struct scsi_host_template {
> */
> u64 vendor_id;
>
> - /*
> - * Additional per-command data allocated for the driver.
> - */
> - unsigned int cmd_size;
> struct scsi_host_cmd_pool *cmd_pool;
>
> /* Delay for runtime autosuspend */
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline
2020-04-22 9:54 [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline Ming Lei
2020-04-22 10:06 ` John Garry
@ 2020-04-22 14:36 ` Bart Van Assche
2020-04-22 14:41 ` James Bottomley
` (2 subsequent siblings)
4 siblings, 0 replies; 9+ messages in thread
From: Bart Van Assche @ 2020-04-22 14:36 UTC (permalink / raw)
To: Ming Lei, James Bottomley, linux-scsi, Martin K . Petersen
Cc: Christoph Hellwig, John Garry
On 4/22/20 2:54 AM, Ming Lei wrote:
> The following three fields of scsi_host_template are referenced in
> scsi IO submission path, so put them together into one cacheline:
>
> - cmd_size
> - queuecommand
> - commit_rqs
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline
2020-04-22 9:54 [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline Ming Lei
2020-04-22 10:06 ` John Garry
2020-04-22 14:36 ` Bart Van Assche
@ 2020-04-22 14:41 ` James Bottomley
2020-04-23 1:48 ` Ming Lei
2020-04-23 6:02 ` Christoph Hellwig
2020-05-01 22:27 ` Douglas Gilbert
4 siblings, 1 reply; 9+ messages in thread
From: James Bottomley @ 2020-04-22 14:41 UTC (permalink / raw)
To: Ming Lei, linux-scsi, Martin K . Petersen
Cc: Bart Van Assche, Christoph Hellwig, John Garry
On Wed, 2020-04-22 at 17:54 +0800, Ming Lei wrote:
> The following three fields of scsi_host_template are referenced in
> scsi IO submission path, so put them together into one cacheline:
>
> - cmd_size
> - queuecommand
> - commit_rqs
Are there benchmarks to show this actually makes a difference, if so,
how much?
James
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline
2020-04-22 14:41 ` James Bottomley
@ 2020-04-23 1:48 ` Ming Lei
0 siblings, 0 replies; 9+ messages in thread
From: Ming Lei @ 2020-04-23 1:48 UTC (permalink / raw)
To: James Bottomley
Cc: linux-scsi, Martin K . Petersen, Bart Van Assche,
Christoph Hellwig, John Garry
On Wed, Apr 22, 2020 at 07:41:30AM -0700, James Bottomley wrote:
> On Wed, 2020-04-22 at 17:54 +0800, Ming Lei wrote:
> > The following three fields of scsi_host_template are referenced in
> > scsi IO submission path, so put them together into one cacheline:
> >
> > - cmd_size
> > - queuecommand
> > - commit_rqs
>
> Are there benchmarks to show this actually makes a difference, if so,
> how much?
Originally I observed 40% IOPS boost on scsi_debug by moving the three
fields into scsi_host, but I lost that test environment now.
When I run fio on scsi_debug in another machine, IOPS gets ~10% boost
with this patch.
Thanks,
Ming
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline
2020-04-22 9:54 [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline Ming Lei
` (2 preceding siblings ...)
2020-04-22 14:41 ` James Bottomley
@ 2020-04-23 6:02 ` Christoph Hellwig
2020-04-24 18:14 ` Martin K. Petersen
2020-05-01 22:27 ` Douglas Gilbert
4 siblings, 1 reply; 9+ messages in thread
From: Christoph Hellwig @ 2020-04-23 6:02 UTC (permalink / raw)
To: Ming Lei
Cc: James Bottomley, linux-scsi, Martin K . Petersen,
Bart Van Assche, Christoph Hellwig, John Garry
Looks good, although you might want to throw in a blurb on the
actually measured benefits:
Reviewed-by: Christoph Hellwig <hch@lst.de>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline
2020-04-23 6:02 ` Christoph Hellwig
@ 2020-04-24 18:14 ` Martin K. Petersen
0 siblings, 0 replies; 9+ messages in thread
From: Martin K. Petersen @ 2020-04-24 18:14 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Ming Lei, James Bottomley, linux-scsi, Martin K . Petersen,
Bart Van Assche, John Garry
> Looks good, although you might want to throw in a blurb on the
> actually measured benefits:
Yes, please!
--
Martin K. Petersen Oracle Linux Engineering
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline
2020-04-22 9:54 [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline Ming Lei
` (3 preceding siblings ...)
2020-04-23 6:02 ` Christoph Hellwig
@ 2020-05-01 22:27 ` Douglas Gilbert
2020-05-04 1:09 ` Ming Lei
4 siblings, 1 reply; 9+ messages in thread
From: Douglas Gilbert @ 2020-05-01 22:27 UTC (permalink / raw)
To: Ming Lei, James Bottomley, linux-scsi, Martin K . Petersen
Cc: Bart Van Assche, Christoph Hellwig, John Garry
On 2020-04-22 5:54 a.m., Ming Lei wrote:
> The following three fields of scsi_host_template are referenced in
> scsi IO submission path, so put them together into one cacheline:
>
> - cmd_size
> - queuecommand
> - commit_rqs
>
> Cc: Bart Van Assche <bvanassche@acm.org>
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: John Garry <john.garry@huawei.com>
> Signed-off-by: Ming Lei <ming.lei@redhat.com>
> ---
> V2:
> - move the 3 fields at the beginning of scsi_host_template
> - comment why we do this way
>
> include/scsi/scsi_host.h | 72 ++++++++++++++++++++++------------------
> 1 file changed, 39 insertions(+), 33 deletions(-)
Hi,
I would like to test this patch. However it doesn't apply on Martin's
tree (all 3 chunks fail). Could you post a clean version?
Doug Gilbert
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline
2020-05-01 22:27 ` Douglas Gilbert
@ 2020-05-04 1:09 ` Ming Lei
0 siblings, 0 replies; 9+ messages in thread
From: Ming Lei @ 2020-05-04 1:09 UTC (permalink / raw)
To: Douglas Gilbert
Cc: James Bottomley, linux-scsi, Martin K . Petersen,
Bart Van Assche, Christoph Hellwig, John Garry
On Fri, May 01, 2020 at 06:27:07PM -0400, Douglas Gilbert wrote:
> On 2020-04-22 5:54 a.m., Ming Lei wrote:
> > The following three fields of scsi_host_template are referenced in
> > scsi IO submission path, so put them together into one cacheline:
> >
> > - cmd_size
> > - queuecommand
> > - commit_rqs
> >
> > Cc: Bart Van Assche <bvanassche@acm.org>
> > Cc: Christoph Hellwig <hch@lst.de>
> > Cc: John Garry <john.garry@huawei.com>
> > Signed-off-by: Ming Lei <ming.lei@redhat.com>
> > ---
> > V2:
> > - move the 3 fields at the beginning of scsi_host_template
> > - comment why we do this way
> >
> > include/scsi/scsi_host.h | 72 ++++++++++++++++++++++------------------
> > 1 file changed, 39 insertions(+), 33 deletions(-)
>
> Hi,
> I would like to test this patch. However it doesn't apply on Martin's
> tree (all 3 chunks fail). Could you post a clean version?
>
> Doug Gilbert
>
Hi Doug,
Please try the following one:
From 356220ede9f06a20d90fa387cc84eb63eea2335d Mon Sep 17 00:00:00 2001
From: Ming Lei <ming.lei@redhat.com>
Date: Tue, 21 Apr 2020 17:27:30 +0800
Subject: [PATCH] scsi: put hot fields of scsi_host_template into one cacheline
The following three fields of scsi_host_template are referenced in
scsi IO submission path, so put them together into one cacheline:
- cmd_size
- queuecommand
- commit_rqs
Cc: Bart Van Assche <bvanassche@acm.org>
Cc: Christoph Hellwig <hch@lst.de>
Cc: John Garry <john.garry@huawei.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
include/scsi/scsi_host.h | 72 ++++++++++++++++++++++------------------
1 file changed, 39 insertions(+), 33 deletions(-)
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 46ef8cccc982..6fa2697638b4 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -30,40 +30,15 @@ struct scsi_transport_template;
#define MODE_TARGET 0x02
struct scsi_host_template {
- struct module *module;
- const char *name;
-
/*
- * The info function will return whatever useful information the
- * developer sees fit. If not provided, then the name field will
- * be used instead.
- *
- * Status: OPTIONAL
+ * Put fields referenced in IO submission path together in
+ * same cacheline
*/
- const char *(* info)(struct Scsi_Host *);
/*
- * Ioctl interface
- *
- * Status: OPTIONAL
- */
- int (*ioctl)(struct scsi_device *dev, unsigned int cmd,
- void __user *arg);
-
-
-#ifdef CONFIG_COMPAT
- /*
- * Compat handler. Handle 32bit ABI.
- * When unknown ioctl is passed return -ENOIOCTLCMD.
- *
- * Status: OPTIONAL
+ * Additional per-command data allocated for the driver.
*/
- int (*compat_ioctl)(struct scsi_device *dev, unsigned int cmd,
- void __user *arg);
-#endif
-
- int (*init_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
- int (*exit_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
+ unsigned int cmd_size;
/*
* The queuecommand function is used to queue up a scsi
@@ -111,6 +86,41 @@ struct scsi_host_template {
*/
void (*commit_rqs)(struct Scsi_Host *, u16);
+ struct module *module;
+ const char *name;
+
+ /*
+ * The info function will return whatever useful information the
+ * developer sees fit. If not provided, then the name field will
+ * be used instead.
+ *
+ * Status: OPTIONAL
+ */
+ const char *(*info)(struct Scsi_Host *);
+
+ /*
+ * Ioctl interface
+ *
+ * Status: OPTIONAL
+ */
+ int (*ioctl)(struct scsi_device *dev, unsigned int cmd,
+ void __user *arg);
+
+
+#ifdef CONFIG_COMPAT
+ /*
+ * Compat handler. Handle 32bit ABI.
+ * When unknown ioctl is passed return -ENOIOCTLCMD.
+ *
+ * Status: OPTIONAL
+ */
+ int (*compat_ioctl)(struct scsi_device *dev, unsigned int cmd,
+ void __user *arg);
+#endif
+
+ int (*init_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
+ int (*exit_cmd_priv)(struct Scsi_Host *shost, struct scsi_cmnd *cmd);
+
/*
* This is an error handling strategy routine. You don't need to
* define one of these if you don't want to - there is a default
@@ -475,10 +485,6 @@ struct scsi_host_template {
*/
u64 vendor_id;
- /*
- * Additional per-command data allocated for the driver.
- */
- unsigned int cmd_size;
struct scsi_host_cmd_pool *cmd_pool;
/* Delay for runtime autosuspend */
--
2.25.2
--
Ming
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-05-04 1:09 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-22 9:54 [PATCH V2] scsi: put hot fields of scsi_host_template into one cacheline Ming Lei
2020-04-22 10:06 ` John Garry
2020-04-22 14:36 ` Bart Van Assche
2020-04-22 14:41 ` James Bottomley
2020-04-23 1:48 ` Ming Lei
2020-04-23 6:02 ` Christoph Hellwig
2020-04-24 18:14 ` Martin K. Petersen
2020-05-01 22:27 ` Douglas Gilbert
2020-05-04 1:09 ` Ming Lei
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.