All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mikulas Patocka <mpatocka@redhat.com>
To: Mike Snitzer <snitzer@redhat.com>
Cc: dm-devel@redhat.com, Frank Mayhar <fmayhar@google.com>
Subject: Re: [PATCH 7/7] dm: optimize clone_rq() when track_peak_rq_based_ios is disabled
Date: Thu, 12 Sep 2013 19:00:19 -0400 (EDT)	[thread overview]
Message-ID: <alpine.LRH.2.02.1309121857440.31794@file01.intranet.prod.int.rdu2.redhat.com> (raw)
In-Reply-To: <1379024698-10487-8-git-send-email-snitzer@redhat.com>



On Thu, 12 Sep 2013, Mike Snitzer wrote:

> Make use of static keys to eliminate the relevant branch in clone_rq()
> when dm_mod's 'track_peak_rq_based_ios' paramter is set to 0 (disabled).
> 
> Even if 'track_peak_rq_based_ios' is set to 0 it will not take effect
> until the next request-based table reload.  Once it is disabled the
> 'peak_rq_based_ios' parameter will be reset to 0.

This patch changes it so that the value track_peak_rq_based_ios is sampled 
only when reloading a table. I think it will be confusing to the user if 
he changes the value, but the change doesn't take effect until something 
reloads some table.

Mikulas

> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
> ---
>  drivers/md/dm.c | 33 +++++++++++++++++++++++++++++++--
>  1 file changed, 31 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/md/dm.c b/drivers/md/dm.c
> index de83930..d9e38a7 100644
> --- a/drivers/md/dm.c
> +++ b/drivers/md/dm.c
> @@ -19,6 +19,7 @@
>  #include <linux/idr.h>
>  #include <linux/hdreg.h>
>  #include <linux/delay.h>
> +#include <linux/static_key.h>
>  
>  #include <trace/events/block.h>
>  
> @@ -242,10 +243,14 @@ static unsigned reserved_rq_based_ios_latch;
>   * Optionally track the maximum numbers of IOs in a cloned request.
>   */
>  static unsigned track_peak_rq_based_ios;
> +static unsigned track_peak_rq_based_ios_latch;
>  static unsigned peak_rq_based_ios;
>  
> +static struct static_key_deferred track_peak_rq_based_ios_enabled; /* defaults to false */
> +
>  /*
> - * This mutex protects reserved_bio_based_ios_latch and reserved_rq_based_ios_latch.
> + * This mutex protects reserved_bio_based_ios_latch, reserved_rq_based_ios_latch
> + * and track_peak_rq_based_ios_latch.
>   */
>  static DEFINE_MUTEX(dm_mempools_lock);
>  
> @@ -305,6 +310,26 @@ unsigned dm_get_reserved_rq_based_ios(void)
>  }
>  EXPORT_SYMBOL_GPL(dm_get_reserved_rq_based_ios);
>  
> +static void __track_peak_rq_based_ios_refresh(void)
> +{
> +	bool enabled = static_key_false(&track_peak_rq_based_ios_enabled.key);
> +
> +	BUG_ON(!mutex_is_locked(&dm_mempools_lock));
> +
> +	track_peak_rq_based_ios_latch = ACCESS_ONCE(track_peak_rq_based_ios);
> +
> +	if (track_peak_rq_based_ios_latch) {
> +		if (enabled)
> +			return; /* already enabled */
> +		static_key_slow_inc(&track_peak_rq_based_ios_enabled.key);
> +	} else {
> +		if (!enabled)
> +			return; /* already disabled */
> +		static_key_slow_dec(&track_peak_rq_based_ios_enabled.key);
> +		ACCESS_ONCE(peak_rq_based_ios) = 0;
> +	}
> +}
> +
>  static int __init local_init(void)
>  {
>  	int r = -ENOMEM;
> @@ -1725,7 +1750,7 @@ static struct request *clone_rq(struct request *rq, struct mapped_device *md,
>  		return NULL;
>  	}
>  
> -	if (unlikely(ACCESS_ONCE(track_peak_rq_based_ios))) {
> +	if (static_key_false(&track_peak_rq_based_ios_enabled.key)) {
>  		struct bio *bio;
>  		unsigned num_bios = 0;
>  
> @@ -2984,6 +3009,10 @@ struct dm_md_mempools *dm_alloc_md_mempools(unsigned type, unsigned integrity, u
>  		if (reserved_rq_based_ios != reserved_rq_based_ios_latch)
>  			__reserved_request_based_ios_refresh();
>  		pool_size = reserved_rq_based_ios_latch;
> +
> +		/* Check if track_peak_rq_based_ios changed. */
> +		if (track_peak_rq_based_ios != track_peak_rq_based_ios_latch)
> +			__track_peak_rq_based_ios_refresh();
>  		mutex_unlock(&dm_mempools_lock);
>  
>  		front_pad = offsetof(struct dm_rq_clone_bio_info, clone);
> -- 
> 1.8.1.4
> 

  reply	other threads:[~2013-09-12 23:00 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-09 17:48 [PATCH] dm: Make MIN_IOS, et al, tunable via sysctl Frank Mayhar
2013-08-13 16:41 ` Frank Mayhar
2013-08-16 22:58 ` Frank Mayhar
2013-08-17 12:30 ` [dm-devel] " Alasdair G Kergon
2013-08-19 13:40   ` Mike Snitzer
2013-08-19 15:04     ` Frank Mayhar
2013-08-19 14:00 ` Mike Snitzer
2013-08-19 14:00   ` Mike Snitzer
2013-08-19 17:54   ` [dm-devel] " Frank Mayhar
2013-08-19 18:15     ` Mike Snitzer
2013-08-20 21:44     ` [dm-devel] " Mikulas Patocka
2013-08-20 21:52       ` Frank Mayhar
2013-08-20 21:41   ` Mikulas Patocka
2013-08-20 21:22 ` [dm-devel] [PATCH] " Mikulas Patocka
2013-08-20 21:28   ` Frank Mayhar
2013-08-20 21:47     ` Mikulas Patocka
2013-08-20 21:57       ` Frank Mayhar
2013-08-20 22:24         ` Mike Snitzer
2013-08-20 22:52           ` Mikulas Patocka
2013-08-20 23:14           ` Frank Mayhar
2013-08-22 17:26             ` Frank Mayhar
2013-08-26 14:28             ` Mikulas Patocka
2013-09-12 22:24               ` [PATCH 0/7] dm: allow mempool and bioset reserves to be tuned Mike Snitzer
2013-09-12 22:24                 ` [PATCH 1/7] dm: lower bio-based mempool reservation Mike Snitzer
2013-09-12 22:40                   ` Mikulas Patocka
2013-09-12 22:24                 ` [PATCH 2/7] dm: add reserved_rq_based_ios module parameter Mike Snitzer
2013-09-12 22:45                   ` Mikulas Patocka
2013-09-12 23:15                     ` Mike Snitzer
2013-09-12 23:27                       ` Mikulas Patocka
2013-09-12 23:32                         ` Mike Snitzer
2013-09-12 22:24                 ` [PATCH 3/7] dm: add reserved_bio_based_ios " Mike Snitzer
2013-09-12 22:47                   ` Mikulas Patocka
2013-09-12 23:11                     ` Mike Snitzer
2013-09-12 23:17                       ` Mikulas Patocka
2013-09-18 15:17                         ` Frank Mayhar
2013-09-12 22:24                 ` [PATCH 4/7] dm io: use dm_get_reserved_bio_based_ios to size reserves Mike Snitzer
2013-09-12 22:48                   ` Mikulas Patocka
2013-09-12 22:24                 ` [PATCH 5/7] dm mpath: use dm_get_reserved_rq_based_ios to size mempool Mike Snitzer
2013-09-12 22:48                   ` Mikulas Patocka
2013-09-12 22:24                 ` [PATCH 6/7] dm: track the maximum number of bios in a cloned request Mike Snitzer
2013-09-12 22:55                   ` Mikulas Patocka
2013-09-12 23:09                     ` Mike Snitzer
2013-09-12 22:24                 ` [PATCH 7/7] dm: optimize clone_rq() when track_peak_rq_based_ios is disabled Mike Snitzer
2013-09-12 23:00                   ` Mikulas Patocka [this message]
2013-09-12 23:06                     ` Mike Snitzer
2013-09-12 23:30                       ` Mikulas Patocka
2013-09-12 23:53                         ` Mike Snitzer
2013-09-13  4:46                           ` Jun'ichi Nomura
2013-09-13 13:04                             ` Mike Snitzer
2013-09-13 14:34                             ` Mikulas Patocka
2013-09-13 18:59                 ` [PATCH v2 0/3] dm: allow mempool and bioset reserves to be tuned Mike Snitzer
2013-09-13 18:59                   ` [PATCH v2 1/3] dm: lower bio-based mempool reservation Mike Snitzer
2013-09-13 18:59                   ` [PATCH v2 2/3] dm: add reserved_rq_based_ios module parameter Mike Snitzer
2013-09-13 18:59                   ` [PATCH v2 3/3] dm: add reserved_bio_based_ios " Mike Snitzer
2013-09-13 19:22                   ` [PATCH v2 0/3] dm: allow mempool and bioset reserves to be tuned Mike Snitzer
2013-09-13 20:30                     ` Mike Snitzer
2013-09-13 21:08                       ` [PATCH v3 " Mike Snitzer
2013-09-13 21:08                         ` [PATCH v3 1/3] dm: lower bio-based mempool reservation Mike Snitzer
2013-09-13 21:08                         ` [PATCH v3 2/3] dm: add reserved_rq_based_ios module parameter Mike Snitzer
2013-09-13 21:08                         ` [PATCH v3 3/3] dm: add reserved_bio_based_ios " Mike Snitzer
2013-09-18 15:10                         ` [PATCH v3 0/3] dm: allow mempool and bioset reserves to be tuned Frank Mayhar

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=alpine.LRH.2.02.1309121857440.31794@file01.intranet.prod.int.rdu2.redhat.com \
    --to=mpatocka@redhat.com \
    --cc=dm-devel@redhat.com \
    --cc=fmayhar@google.com \
    --cc=snitzer@redhat.com \
    /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.