[lvm-devel] master - thin: warn about too big chunks size

Zdenek Kabelac zkabelac at sourceware.org
Tue Aug 1 10:01:07 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=8256170e6a2dbed15b790e75f5d1026e3de69a16
Commit:        8256170e6a2dbed15b790e75f5d1026e3de69a16
Parent:        3654f478e1beab950f9ee91bc2fd759d22552e1c
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Fri Jul 21 20:58:33 2017 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Tue Aug 1 11:52:27 2017 +0200

thin: warn about too big chunks size

lvm2 warned about zeroing and too big chunksize (>=512KiB), but
only during lvconvert, so lvcreate was creating thin-pools
without any warning about possible slowness of thin provisioning
because of zeroing.
---
 WHATS_NEW                 |    1 +
 lib/metadata/thin_manip.c |   13 ++++++++++++-
 tools/lvconvert.c         |    5 -----
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index 20da268..41ddda7 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.174 - 
 =================================
+  Add warning when creating thin-pool with zeroing and chunk size >= 512KiB.
   Introduce exit code 4 EINIT_FAILED to replace -1 when initialisation fails.
   Add synchronization points with udev during reshape of raid LVs.
 
diff --git a/lib/metadata/thin_manip.c b/lib/metadata/thin_manip.c
index 88dc51a..bd2d2c3 100644
--- a/lib/metadata/thin_manip.c
+++ b/lib/metadata/thin_manip.c
@@ -752,8 +752,19 @@ int update_thin_pool_params(struct cmd_context *cmd,
 	    !set_pool_discards(discards, DEFAULT_THIN_POOL_DISCARDS))
 		return_0;
 
-	if (*zero_new_blocks == THIN_ZERO_UNSELECTED)
+	if (*zero_new_blocks == THIN_ZERO_UNSELECTED) {
 		*zero_new_blocks = (DEFAULT_THIN_POOL_ZERO) ? THIN_ZERO_YES : THIN_ZERO_NO;
+		log_verbose("%s pool zeroing on default.", (*zero_new_blocks == THIN_ZERO_YES) ?
+			    "Enabling" : "Disabling");
+	}
+
+	if ((*zero_new_blocks == THIN_ZERO_YES) &&
+	    (*chunk_size >= DEFAULT_THIN_POOL_CHUNK_SIZE_PERFORMANCE * 2)) {
+		log_warn("WARNING: Pool zeroing and %s large chunk size slows down thin provisioning.",
+			 display_size(cmd, *chunk_size));
+		log_warn("WARNING: Consider disabling zeroing (-Zn) or using smaller chunk size (<%s).",
+			 display_size(cmd, DEFAULT_THIN_POOL_CHUNK_SIZE_PERFORMANCE * 2));
+	}
 
 	log_verbose("Preferred pool metadata size %s.",
 		    display_size(cmd, (uint64_t)*pool_metadata_extents * extent_size));
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index d90e675..94dee9d 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -3088,11 +3088,6 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
 	if (!vg_write(vg) || !vg_commit(vg))
 		goto_bad;
 
-	if ((seg->zero_new_blocks == THIN_ZERO_YES) &&
-	    seg->chunk_size >= DEFAULT_THIN_POOL_CHUNK_SIZE_PERFORMANCE * 2)
-		log_warn("WARNING: Pool zeroing and large %s chunk size slows down provisioning.",
-			 display_size(cmd, seg->chunk_size));
-
 	if (activate_pool && !lockd_lv(cmd, pool_lv, "ex", LDLV_PERSISTENT)) {
 		log_error("Failed to lock pool LV %s.", display_lvname(pool_lv));
 		goto out;




More information about the lvm-devel mailing list