Commit 363babed authored by Mateusz Kozlowski's avatar Mateusz Kozlowski Committed by Tomasz Zawadzki
Browse files

lib/ftl: Calculate cache throttling parameters in a single function



Moving the compaction target settings together with the throttle
interval in a common function.

Change-Id: Icf90f9f32a300805d3bffe53d16d59817b9e6f69
Signed-off-by: default avatarMateusz Kozlowski <mateusz.kozlowski@solidigm.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22981


Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
Community-CI: Mellanox Build Bot
parent 6b8415a4
Loading
Loading
Loading
Loading
+20 −9
Original line number Diff line number Diff line
@@ -89,6 +89,25 @@ get_chunk_idx(struct ftl_nv_cache_chunk *chunk)
	return (chunk->offset - first_chunk->offset) / chunk->nv_cache->chunk_blocks;
}

static void
ftl_nv_cache_init_update_limits(struct spdk_ftl_dev *dev)
{
	struct ftl_nv_cache *nvc = &dev->nv_cache;
	uint64_t usable_chunks = nvc->chunk_count;

	/* Start compaction when full chunks exceed given % of entire active chunks */
	nvc->chunk_compaction_threshold = usable_chunks *
					  dev->conf.nv_cache.chunk_compaction_threshold /
					  100;

	nvc->throttle.interval_tsc = FTL_NV_CACHE_THROTTLE_INTERVAL_MS *
				     (spdk_get_ticks_hz() / 1000);

	nvc->chunk_free_target = spdk_divide_round_up(usable_chunks *
				 dev->conf.nv_cache.chunk_free_target,
				 100);
}

int
ftl_nv_cache_init(struct spdk_ftl_dev *dev)
{
@@ -156,9 +175,6 @@ ftl_nv_cache_init(struct spdk_ftl_dev *dev)
	}
	assert(offset <= nvc_data_offset(nv_cache) + nvc_data_blocks(nv_cache));

	/* Start compaction when full chunks exceed given % of entire chunks */
	nv_cache->chunk_compaction_threshold = nv_cache->chunk_count *
					       dev->conf.nv_cache.chunk_compaction_threshold / 100;
	TAILQ_INIT(&nv_cache->compactor_list);
	for (i = 0; i < FTL_NV_CACHE_NUM_COMPACTORS; i++) {
		compactor = compactor_alloc(dev);
@@ -201,12 +217,7 @@ ftl_nv_cache_init(struct spdk_ftl_dev *dev)
		return -ENOMEM;
	}

	nv_cache->throttle.interval_tsc = FTL_NV_CACHE_THROTTLE_INTERVAL_MS *
					  (spdk_get_ticks_hz() / 1000);
	nv_cache->chunk_free_target = spdk_divide_round_up(nv_cache->chunk_count *
				      dev->conf.nv_cache.chunk_free_target,
				      100);

	ftl_nv_cache_init_update_limits(dev);
	ftl_property_register(dev, "cache_device", NULL, 0, NULL, NULL, ftl_property_dump_cache_dev, NULL,
			      NULL, true);
	return 0;