aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/pblk-init.c
diff options
context:
space:
mode:
authorIgor Konopko <igor.j.konopko@intel.com>2019-05-04 14:37:48 -0400
committerJens Axboe <axboe@kernel.dk>2019-05-06 12:19:16 -0400
commit847a3a2788c57454ab715e07777431cc5fc76f48 (patch)
tree548099a55f3ed3b21925851f1ed91dbb40deb69d /drivers/lightnvm/pblk-init.c
parent8935ebfc5d462891e9dccec1f5cf438fb7bb96b4 (diff)
lightnvm: pblk: reduce L2P memory footprint
Currently L2P map size is calculated based on the total number of available sectors, which is redundant, since it contains mapping for overprovisioning as well (11% by default). Change this size to the real capacity and thus reduce the memory footprint significantly - with default op value it is approx. 110MB of DRAM less for every 1TB of media. Signed-off-by: Igor Konopko <igor.j.konopko@intel.com> Reviewed-by: Hans Holmberg <hans.holmberg@cnexlabs.com> Reviewed-by: Javier González <javier@javigon.com> Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r--drivers/lightnvm/pblk-init.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
index 8b643d0bffae..81e8ed4d31ea 100644
--- a/drivers/lightnvm/pblk-init.c
+++ b/drivers/lightnvm/pblk-init.c
@@ -105,7 +105,7 @@ static size_t pblk_trans_map_size(struct pblk *pblk)
105 if (pblk->addrf_len < 32) 105 if (pblk->addrf_len < 32)
106 entry_size = 4; 106 entry_size = 4;
107 107
108 return entry_size * pblk->rl.nr_secs; 108 return entry_size * pblk->capacity;
109} 109}
110 110
111#ifdef CONFIG_NVM_PBLK_DEBUG 111#ifdef CONFIG_NVM_PBLK_DEBUG
@@ -170,7 +170,7 @@ static int pblk_l2p_init(struct pblk *pblk, bool factory_init)
170 170
171 pblk_ppa_set_empty(&ppa); 171 pblk_ppa_set_empty(&ppa);
172 172
173 for (i = 0; i < pblk->rl.nr_secs; i++) 173 for (i = 0; i < pblk->capacity; i++)
174 pblk_trans_map_set(pblk, i, ppa); 174 pblk_trans_map_set(pblk, i, ppa);
175 175
176 ret = pblk_l2p_recover(pblk, factory_init); 176 ret = pblk_l2p_recover(pblk, factory_init);
@@ -701,7 +701,6 @@ static int pblk_set_provision(struct pblk *pblk, int nr_free_chks)
701 * on user capacity consider only provisioned blocks 701 * on user capacity consider only provisioned blocks
702 */ 702 */
703 pblk->rl.total_blocks = nr_free_chks; 703 pblk->rl.total_blocks = nr_free_chks;
704 pblk->rl.nr_secs = nr_free_chks * geo->clba;
705 704
706 /* Consider sectors used for metadata */ 705 /* Consider sectors used for metadata */
707 sec_meta = (lm->smeta_sec + lm->emeta_sec[0]) * l_mg->nr_free_lines; 706 sec_meta = (lm->smeta_sec + lm->emeta_sec[0]) * l_mg->nr_free_lines;
@@ -1284,7 +1283,7 @@ static void *pblk_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk,
1284 1283
1285 pblk_info(pblk, "luns:%u, lines:%d, secs:%llu, buf entries:%u\n", 1284 pblk_info(pblk, "luns:%u, lines:%d, secs:%llu, buf entries:%u\n",
1286 geo->all_luns, pblk->l_mg.nr_lines, 1285 geo->all_luns, pblk->l_mg.nr_lines,
1287 (unsigned long long)pblk->rl.nr_secs, 1286 (unsigned long long)pblk->capacity,
1288 pblk->rwb.nr_entries); 1287 pblk->rwb.nr_entries);
1289 1288
1290 wake_up_process(pblk->writer_ts); 1289 wake_up_process(pblk->writer_ts);