All of lore.kernel.org
 help / color / mirror / Atom feed
From: Avri Altman <Avri.Altman@wdc.com>
To: Can Guo <cang@codeaurora.org>
Cc: "James E . J . Bottomley" <jejb@linux.vnet.ibm.com>,
	"Martin K . Petersen" <martin.petersen@oracle.com>,
	"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	Bart Van Assche <bvanassche@acm.org>,
	yongmyung lee <ymhungry.lee@samsung.com>,
	Daejun Park <daejun7.park@samsung.com>,
	"alim.akhtar@samsung.com" <alim.akhtar@samsung.com>,
	"asutoshd@codeaurora.org" <asutoshd@codeaurora.org>,
	Zang Leigang <zangleigang@hisilicon.com>,
	Avi Shchislowski <Avi.Shchislowski@wdc.com>,
	Bean Huo <beanhuo@micron.com>,
	"stanley.chu@mediatek.com" <stanley.chu@mediatek.com>
Subject: RE: [PATCH v6 04/10] scsi: ufshpb: Make eviction depends on region's reads
Date: Thu, 25 Mar 2021 05:56:40 +0000	[thread overview]
Message-ID: <DM6PR04MB6575CC008E355F965A1886E7FC629@DM6PR04MB6575.namprd04.prod.outlook.com> (raw)
In-Reply-To: <b06c0bcc3ea51ab7d6b8e5fb46ed6bdb@codeaurora.org>

> 
> On 2021-03-22 16:10, Avri Altman wrote:
> > In host mode, eviction is considered an extreme measure.
> > verify that the entering region has enough reads, and the exiting
> > region has much less reads.
> >
> > Signed-off-by: Avri Altman <avri.altman@wdc.com>
> > ---
> >  drivers/scsi/ufs/ufshpb.c | 18 +++++++++++++++++-
> >  1 file changed, 17 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/scsi/ufs/ufshpb.c b/drivers/scsi/ufs/ufshpb.c
> > index a1519cbb4ce0..5e757220d66a 100644
> > --- a/drivers/scsi/ufs/ufshpb.c
> > +++ b/drivers/scsi/ufs/ufshpb.c
> > @@ -17,6 +17,7 @@
> >  #include "../sd.h"
> >
> >  #define ACTIVATION_THRESHOLD 8 /* 8 IOs */
> > +#define EVICTION_THRESHOLD (ACTIVATION_THRESHOLD << 5) /* 256 IOs
> */
> >
> >  /* memory management */
> >  static struct kmem_cache *ufshpb_mctx_cache;
> > @@ -1047,6 +1048,13 @@ static struct ufshpb_region
> > *ufshpb_victim_lru_info(struct ufshpb_lu *hpb)
> >               if (ufshpb_check_srgns_issue_state(hpb, rgn))
> >                       continue;
> >
> > +             /*
> > +              * in host control mode, verify that the exiting region
> > +              * has less reads
> > +              */
> > +             if (hpb->is_hcm && rgn->reads > (EVICTION_THRESHOLD >> 1))
> > +                     continue;
> > +
> >               victim_rgn = rgn;
> >               break;
> >       }
> > @@ -1219,7 +1227,7 @@ static int ufshpb_issue_map_req(struct ufshpb_lu
> > *hpb,
> >
> >  static int ufshpb_add_region(struct ufshpb_lu *hpb, struct
> > ufshpb_region *rgn)
> >  {
> > -     struct ufshpb_region *victim_rgn;
> > +     struct ufshpb_region *victim_rgn = NULL;
> >       struct victim_select_info *lru_info = &hpb->lru_info;
> >       unsigned long flags;
> >       int ret = 0;
> > @@ -1246,7 +1254,15 @@ static int ufshpb_add_region(struct ufshpb_lu
> > *hpb, struct ufshpb_region *rgn)
> >                        * It is okay to evict the least recently used region,
> >                        * because the device could detect this region
> >                        * by not issuing HPB_READ
> > +                      *
> > +                      * in host control mode, verify that the entering
> > +                      * region has enough reads
> >                        */
> > +                     if (hpb->is_hcm && rgn->reads < EVICTION_THRESHOLD) {
> > +                             ret = -EACCES;
> > +                             goto out;
> > +                     }
> > +
> 
> I cannot understand the logic behind this. A rgn which host chooses to
> activate,
> is in INACTIVE state now, if its rgn->reads < 256, then don't activate
> it.
> Could you please elaborate?
I am re-citing the commit log:
"In host mode, eviction is considered an extreme measure.
verify that the entering region has enough reads, and the exiting
region has much less reads."

Here comes to play the reads counter as a comparative index.
Max-active-regions has crossed, and to activate a region, you need to evict another region.
But the activation threshold is relatively low, how do you know that you will benefit more,
From the new region, than from the one you choose to evict?

Not to arbitrarily evict the "first" (LRU) region, like in device mode, we are looking for a solid
Reason for the new region to enter, and for the existing region to leave.
Otherwise, you will find yourself entering and existing the same region over and over,
Just threshing the active-list creating an unnecessary overhead by keep sending map requests.
For example, say the entering region has 4 reads, but the LRU region has 200, and its reads keeps coming.
Is it the "correct" decision to evict a 200-reads region for a 4-reads region?
If you indeed evict this 200-reads region, you will evict another to put it right back,
Over and over.

On the other hand, we are not hanging-on to "cold" regions, and inactivate them if there are no recent
Reads to that region - see the patch with the "Cold" timeout.

I agree that this can be elaborate to a more sophisticated policies - which we tried.
For now, let's go with the simplest one - use thresholds for both the entering and exiting regions.

Thanks,
Avri
> 
> Thanks,
> Can Guo.
> 
> >                       victim_rgn = ufshpb_victim_lru_info(hpb);
> >                       if (!victim_rgn) {
> >                               dev_warn(&hpb->sdev_ufs_lu->sdev_dev,

  reply	other threads:[~2021-03-25  5:59 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-22  8:10 [PATCH v6 00/10] Add Host control mode to HPB Avri Altman
2021-03-22  8:10 ` [PATCH v6 01/10] scsi: ufshpb: Cache HPB Control mode on init Avri Altman
2021-03-22  8:10 ` [PATCH v6 02/10] scsi: ufshpb: Add host control mode support to rsp_upiu Avri Altman
2021-03-24  3:31   ` Zang Leigang
2021-03-24  3:59     ` Can Guo
2021-03-24 12:44       ` Avri Altman
2021-03-22  8:10 ` [PATCH v6 03/10] scsi: ufshpb: Add region's reads counter Avri Altman
2021-03-24  9:25   ` Can Guo
2021-03-24 11:28     ` Avri Altman
2021-03-27  8:02       ` Avri Altman
2021-03-22  8:10 ` [PATCH v6 04/10] scsi: ufshpb: Make eviction depends on region's reads Avri Altman
2021-03-25  5:34   ` Can Guo
2021-03-25  5:56     ` Avri Altman [this message]
2021-03-22  8:10 ` [PATCH v6 05/10] scsi: ufshpb: Region inactivation in host mode Avri Altman
2021-03-22  8:10 ` [PATCH v6 06/10] scsi: ufshpb: Add hpb dev reset response Avri Altman
2021-03-22  8:10 ` [PATCH v6 07/10] scsi: ufshpb: Add "Cold" regions timer Avri Altman
2021-03-22  8:10 ` [PATCH v6 08/10] scsi: ufshpb: Limit the number of inflight map requests Avri Altman
2021-03-22  8:10 ` [PATCH v6 09/10] scsi: ufshpb: Add support for host control mode Avri Altman
2021-03-22  8:10 ` [PATCH v6 10/10] scsi: ufshpb: Make host mode parameters configurable Avri Altman

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=DM6PR04MB6575CC008E355F965A1886E7FC629@DM6PR04MB6575.namprd04.prod.outlook.com \
    --to=avri.altman@wdc.com \
    --cc=Avi.Shchislowski@wdc.com \
    --cc=alim.akhtar@samsung.com \
    --cc=asutoshd@codeaurora.org \
    --cc=beanhuo@micron.com \
    --cc=bvanassche@acm.org \
    --cc=cang@codeaurora.org \
    --cc=daejun7.park@samsung.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jejb@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=stanley.chu@mediatek.com \
    --cc=ymhungry.lee@samsung.com \
    --cc=zangleigang@hisilicon.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.