Message ID | 1527088640-13062-2-git-send-email-marcin.dziegielewski@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 05/23/2018 05:17 PM, Marcin Dziegielewski wrote: > In some cases, users can want set write buffer size manually, e.g. to > adjust it to specific workload. This patch provides the possibility to set > write buffer size via module parameter feature. > > Signed-off-by: Marcin Dziegielewski <marcin.dziegielewski@intel.com> > Signed-off-by: Igor Konopko <igor.j.konopko@intel.com> > --- > drivers/lightnvm/pblk-init.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c > index d65d2f9..9a7213e 100644 > --- a/drivers/lightnvm/pblk-init.c > +++ b/drivers/lightnvm/pblk-init.c > @@ -20,6 +20,11 @@ > > #include "pblk.h" > > +unsigned int write_buffer_size; > + > +module_param(write_buffer_size, uint, 0644); > +MODULE_PARM_DESC(write_buffer_size, "number of entries in a write buffer"); > + > static struct kmem_cache *pblk_ws_cache, *pblk_rec_cache, *pblk_g_rq_cache, > *pblk_w_rq_cache; > static DECLARE_RWSEM(pblk_lock); > @@ -172,10 +177,15 @@ static int pblk_rwb_init(struct pblk *pblk) > struct nvm_tgt_dev *dev = pblk->dev; > struct nvm_geo *geo = &dev->geo; > struct pblk_rb_entry *entries; > - unsigned long nr_entries; > + unsigned long nr_entries, buffer_size; > unsigned int power_size, power_seg_sz; > > - nr_entries = pblk_rb_calculate_size(pblk->pgs_in_buffer); > + if (write_buffer_size) > + buffer_size = write_buffer_size; > + else > + buffer_size = pblk->pgs_in_buffer; > + > + nr_entries = pblk_rb_calculate_size(buffer_size); Would it make sense to include a check to make sure that buffer size does not become less than pblk->pgs_in_buffer? > > entries = vzalloc(nr_entries * sizeof(struct pblk_rb_entry)); > if (!entries) >
Thanks for the review, that’s good point. Improved patch is on its way. Marcin Dzięgielewski > -----Original Message----- > From: Matias Bjørling [mailto:mb@lightnvm.io] > Sent: Thursday, May 24, 2018 10:20 AM > To: Dziegielewski, Marcin <marcin.dziegielewski@intel.com> > Cc: linux-block@vger.kernel.org; Konopko, Igor J > <igor.j.konopko@intel.com> > Subject: Re: [PATCH 1/2] lightnvm: pblk: add possibility to set write buffer > size manually > > On 05/23/2018 05:17 PM, Marcin Dziegielewski wrote: > > In some cases, users can want set write buffer size manually, e.g. to > > adjust it to specific workload. This patch provides the possibility to > > set write buffer size via module parameter feature. > > > > Signed-off-by: Marcin Dziegielewski <marcin.dziegielewski@intel.com> > > Signed-off-by: Igor Konopko <igor.j.konopko@intel.com> > > --- > > drivers/lightnvm/pblk-init.c | 14 ++++++++++++-- > > 1 file changed, 12 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/lightnvm/pblk-init.c > > b/drivers/lightnvm/pblk-init.c index d65d2f9..9a7213e 100644 > > --- a/drivers/lightnvm/pblk-init.c > > +++ b/drivers/lightnvm/pblk-init.c > > @@ -20,6 +20,11 @@ > > > > #include "pblk.h" > > > > +unsigned int write_buffer_size; > > + > > +module_param(write_buffer_size, uint, 0644); > > +MODULE_PARM_DESC(write_buffer_size, "number of entries in a write > > +buffer"); > > + > > static struct kmem_cache *pblk_ws_cache, *pblk_rec_cache, > *pblk_g_rq_cache, > > *pblk_w_rq_cache; > > static DECLARE_RWSEM(pblk_lock); > > @@ -172,10 +177,15 @@ static int pblk_rwb_init(struct pblk *pblk) > > struct nvm_tgt_dev *dev = pblk->dev; > > struct nvm_geo *geo = &dev->geo; > > struct pblk_rb_entry *entries; > > - unsigned long nr_entries; > > + unsigned long nr_entries, buffer_size; > > unsigned int power_size, power_seg_sz; > > > > - nr_entries = pblk_rb_calculate_size(pblk->pgs_in_buffer); > > + if (write_buffer_size) > > + buffer_size = write_buffer_size; > > + else > > + buffer_size = pblk->pgs_in_buffer; > > + > > + nr_entries = pblk_rb_calculate_size(buffer_size); > > Would it make sense to include a check to make sure that buffer size does > not become less than pblk->pgs_in_buffer? > > > > > entries = vzalloc(nr_entries * sizeof(struct pblk_rb_entry)); > > if (!entries) > >
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c index d65d2f9..9a7213e 100644 --- a/drivers/lightnvm/pblk-init.c +++ b/drivers/lightnvm/pblk-init.c @@ -20,6 +20,11 @@ #include "pblk.h" +unsigned int write_buffer_size; + +module_param(write_buffer_size, uint, 0644); +MODULE_PARM_DESC(write_buffer_size, "number of entries in a write buffer"); + static struct kmem_cache *pblk_ws_cache, *pblk_rec_cache, *pblk_g_rq_cache, *pblk_w_rq_cache; static DECLARE_RWSEM(pblk_lock); @@ -172,10 +177,15 @@ static int pblk_rwb_init(struct pblk *pblk) struct nvm_tgt_dev *dev = pblk->dev; struct nvm_geo *geo = &dev->geo; struct pblk_rb_entry *entries; - unsigned long nr_entries; + unsigned long nr_entries, buffer_size; unsigned int power_size, power_seg_sz; - nr_entries = pblk_rb_calculate_size(pblk->pgs_in_buffer); + if (write_buffer_size) + buffer_size = write_buffer_size; + else + buffer_size = pblk->pgs_in_buffer; + + nr_entries = pblk_rb_calculate_size(buffer_size); entries = vzalloc(nr_entries * sizeof(struct pblk_rb_entry)); if (!entries)