[lvm-devel] master - cache: add more comments for min meta size
Zdenek Kabelac
zkabelac at sourceware.org
Thu Oct 17 11:04:47 UTC 2019
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=af8cfa90d9c4cdcb14c1cf69715405e22ac68432
Commit: af8cfa90d9c4cdcb14c1cf69715405e22ac68432
Parent: 2a08d6d1d4945024be5e686de0df02fc66ad8d8d
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Wed Oct 16 18:46:03 2019 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Thu Oct 17 13:03:49 2019 +0200
cache: add more comments for min meta size
Enhance source code with better explanation how the minimal
metadata size is evaluated from data size and chunk size.
---
lib/metadata/cache_manip.c | 22 +++++++++++++---------
1 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/lib/metadata/cache_manip.c b/lib/metadata/cache_manip.c
index 3b51ea0..febd82a 100644
--- a/lib/metadata/cache_manip.c
+++ b/lib/metadata/cache_manip.c
@@ -178,18 +178,22 @@ void cache_check_for_warns(const struct lv_segment *seg)
}
/*
- * Returns minimum size of cache metadata volume for give data and chunk size
- * (all values in sector)
- * Default meta size is: (Overhead + mapping size + hint size)
+ * Returns the minimum size of cache metadata volume for given cache data size and
+ * and cache chunk size (all in/out values in sectors)
+ * Default metadata size is: (Overhead + mapping size + hint size)
*/
static uint64_t _cache_min_metadata_size(uint64_t data_size, uint32_t chunk_size)
{
- uint64_t min_meta_size;
-
- min_meta_size = data_size / chunk_size; /* nr_chunks */
- min_meta_size *= (DM_BYTES_PER_BLOCK + DM_MAX_HINT_WIDTH + DM_HINT_OVERHEAD_PER_BLOCK);
- min_meta_size = (min_meta_size + (SECTOR_SIZE - 1)) >> SECTOR_SHIFT; /* in sectors */
- min_meta_size += DM_TRANSACTION_OVERHEAD * (1024 >> SECTOR_SHIFT);
+ /* Used space for mapping and hints for each cached chunk in bytes
+ * (matching thin-tools cache_metadata_size.cc) */
+ const uint64_t chunk_overhead = (DM_BYTES_PER_BLOCK + DM_MAX_HINT_WIDTH + DM_HINT_OVERHEAD_PER_BLOCK);
+ const uint64_t transaction_overhead = DM_TRANSACTION_OVERHEAD * 1024; /* 4MiB */
+
+ /* Number of cache chunks we have in caching volume */
+ uint64_t nr_chunks = data_size / chunk_size;
+ /* Minimal size of metadata volume converted back to sectors */
+ uint64_t min_meta_size = (transaction_overhead + nr_chunks * chunk_overhead +
+ (SECTOR_SIZE - 1)) >> SECTOR_SHIFT;
return min_meta_size;
}
More information about the lvm-devel
mailing list