From 2333c8e3ae934ba5b6c11c571e507775ecc417c6 Mon Sep 17 00:00:00 2001 From: Alexander Zarochentsev Date: Sun, 31 Mar 2024 20:21:56 +0000 Subject: [PATCH] LU-17744 ldiskfs: mballoc stats fixes Change mballoc statistics to use correct allocation loop ids. Fixes: 95f8ae56774 ("LU-12103 ldiskfs: don't search large block range if disk full") HPE-bug-id: LUS-11936 Signed-off-by: Alexander Zarochentsev Change-Id: I892ead5355865ec9c07fdc758e127c711b42cb1b Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/54772 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Artem Blagodarenko Reviewed-by: Oleg Drokin --- .../patches/linux-5.4/ext4-simple-blockalloc.patch | 26 +++++++++++++--------- .../patches/linux-5.8/ext4-simple-blockalloc.patch | 26 +++++++++++++--------- .../patches/linux-5.9/ext4-simple-blockalloc.patch | 26 +++++++++++++--------- .../patches/rhel7.6/ext4-simple-blockalloc.patch | 20 ++++++++++------- .../patches/rhel8/ext4-simple-blockalloc.patch | 26 +++++++++++++--------- .../ubuntu20.04.3/ext4-simple-blockalloc.patch | 26 +++++++++++++--------- .../ubuntu2004/ext4-simple-blockalloc.patch | 26 +++++++++++++--------- 7 files changed, 102 insertions(+), 74 deletions(-) diff --git a/ldiskfs/kernel_patches/patches/linux-5.4/ext4-simple-blockalloc.patch b/ldiskfs/kernel_patches/patches/linux-5.4/ext4-simple-blockalloc.patch index 5b3a0b6..f043569 100644 --- a/ldiskfs/kernel_patches/patches/linux-5.4/ext4-simple-blockalloc.patch +++ b/ldiskfs/kernel_patches/patches/linux-5.4/ext4-simple-blockalloc.patch @@ -17,7 +17,7 @@ Index: linux-stage/fs/ext4/ext4.h atomic_t s_bal_breaks; /* too long searches */ atomic_t s_bal_2orders; /* 2^order hits */ + /* cX loop didn't find blocks */ -+ atomic64_t s_bal_cX_failed[3]; ++ atomic64_t s_bal_cX_failed[4]; + atomic64_t s_bal_cX_skipped[3]; spinlock_t s_bal_lock; unsigned long s_mb_buddies_generated; @@ -97,7 +97,7 @@ Index: linux-stage/fs/ext4/mballoc.c } if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND && -@@ -2520,6 +2553,93 @@ const struct file_operations ext4_seq_mb +@@ -2520,6 +2553,96 @@ const struct file_operations ext4_seq_mb .write = ext4_mb_last_group_write, }; @@ -118,17 +118,19 @@ Index: linux-stage/fs/ext4/mballoc.c + seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks)); + seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks)); + -+ seq_printf(seq, "\tuseless_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c0_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[0])); -+ seq_printf(seq, "\tuseless_c2_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c1_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[1])); -+ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c2_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[2])); -+ seq_printf(seq, "\tskipped_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[3])); ++ seq_printf(seq, "\tskipped_c0_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[0])); -+ seq_printf(seq, "\tskipped_c2_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c1_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[1])); -+ seq_printf(seq, "\tskipped_c3_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c2_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[2])); + seq_printf(seq, "\tbuddies_generated: %lu\n", + sbi->s_mb_buddies_generated); @@ -159,6 +161,7 @@ Index: linux-stage/fs/ext4/mballoc.c + atomic64_set(&sbi->s_bal_cX_failed[0], 0), + atomic64_set(&sbi->s_bal_cX_failed[1], 0), + atomic64_set(&sbi->s_bal_cX_failed[2], 0); ++ atomic64_set(&sbi->s_bal_cX_failed[3], 0); + + atomic64_set(&sbi->s_bal_cX_skipped[0], 0), + atomic64_set(&sbi->s_bal_cX_skipped[1], 0), @@ -216,14 +219,15 @@ Index: linux-stage/fs/ext4/mballoc.c /* * The default group preallocation is 512, which for 4k block * sizes translates to 2 megabytes. However for bigalloc file -@@ -2951,6 +3082,16 @@ int ext4_mb_release(struct super_block * +@@ -2951,6 +3082,17 @@ int ext4_mb_release(struct super_block * atomic_read(&sbi->s_bal_reqs), atomic_read(&sbi->s_bal_success)); ext4_msg(sb, KERN_INFO, -+ "mballoc: (%llu, %llu, %llu) useless c(0,1,2) loops", ++ "mballoc: (%llu, %llu, %llu, %llu) useless c(0,1,2,3) loops", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[0]), + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[1]), -+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[2])); ++ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[2]), ++ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[3])); + ext4_msg(sb, KERN_INFO, + "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[0]), diff --git a/ldiskfs/kernel_patches/patches/linux-5.8/ext4-simple-blockalloc.patch b/ldiskfs/kernel_patches/patches/linux-5.8/ext4-simple-blockalloc.patch index e266034..0e06c78 100644 --- a/ldiskfs/kernel_patches/patches/linux-5.8/ext4-simple-blockalloc.patch +++ b/ldiskfs/kernel_patches/patches/linux-5.8/ext4-simple-blockalloc.patch @@ -22,7 +22,7 @@ atomic_t s_bal_breaks; /* too long searches */ atomic_t s_bal_2orders; /* 2^order hits */ + /* cX loop didn't find blocks */ -+ atomic64_t s_bal_cX_failed[3]; ++ atomic64_t s_bal_cX_failed[4]; + atomic64_t s_bal_cX_skipped[3]; spinlock_t s_bal_lock; unsigned long s_mb_buddies_generated; @@ -98,7 +98,7 @@ } if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND && -@@ -2624,6 +2657,92 @@ const struct proc_ops ext4_seq_mb_last_g +@@ -2624,6 +2657,95 @@ const struct proc_ops ext4_seq_mb_last_g .proc_write = ext4_mb_last_group_write, }; @@ -119,17 +119,19 @@ + seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks)); + seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks)); + -+ seq_printf(seq, "\tuseless_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c0_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[0])); -+ seq_printf(seq, "\tuseless_c2_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c1_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[1])); -+ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c2_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[2])); -+ seq_printf(seq, "\tskipped_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ atomic64_read(&sbi->s_bal_cX_failed[3])); ++ seq_printf(seq, "\tskipped_c0_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[0])); -+ seq_printf(seq, "\tskipped_c2_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c1_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[1])); -+ seq_printf(seq, "\tskipped_c3_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c2_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[2])); + seq_printf(seq, "\tbuddies_generated: %lu\n", + sbi->s_mb_buddies_generated); @@ -160,6 +162,7 @@ + atomic64_set(&sbi->s_bal_cX_failed[0], 0), + atomic64_set(&sbi->s_bal_cX_failed[1], 0), + atomic64_set(&sbi->s_bal_cX_failed[2], 0); ++ atomic64_set(&sbi->s_bal_cX_failed[3], 0); + + atomic64_set(&sbi->s_bal_cX_skipped[0], 0), + atomic64_set(&sbi->s_bal_cX_skipped[1], 0), @@ -209,14 +212,15 @@ /* * The default group preallocation is 512, which for 4k block * sizes translates to 2 megabytes. However for bigalloc file -@@ -3042,6 +3165,16 @@ int ext4_mb_release(struct super_block * +@@ -3042,6 +3165,17 @@ int ext4_mb_release(struct super_block * atomic_read(&sbi->s_bal_reqs), atomic_read(&sbi->s_bal_success)); ext4_msg(sb, KERN_INFO, -+ "mballoc: (%llu, %llu, %llu) useless c(0,1,2) loops", ++ "mballoc: (%llu, %llu, %llu, %llu) useless c(0,1,2,3) loops", + atomic64_read(&sbi->s_bal_cX_failed[0]), + atomic64_read(&sbi->s_bal_cX_failed[1]), -+ atomic64_read(&sbi->s_bal_cX_failed[2])); ++ atomic64_read(&sbi->s_bal_cX_failed[2]), ++ atomic64_read(&sbi->s_bal_cX_failed[3])); + ext4_msg(sb, KERN_INFO, + "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops", + atomic64_read(&sbi->s_bal_cX_skipped[0]), diff --git a/ldiskfs/kernel_patches/patches/linux-5.9/ext4-simple-blockalloc.patch b/ldiskfs/kernel_patches/patches/linux-5.9/ext4-simple-blockalloc.patch index 3b62efb..cabf2ed 100644 --- a/ldiskfs/kernel_patches/patches/linux-5.9/ext4-simple-blockalloc.patch +++ b/ldiskfs/kernel_patches/patches/linux-5.9/ext4-simple-blockalloc.patch @@ -22,7 +22,7 @@ atomic_t s_bal_breaks; /* too long searches */ atomic_t s_bal_2orders; /* 2^order hits */ + /* cX loop didn't find blocks */ -+ atomic64_t s_bal_cX_failed[3]; ++ atomic64_t s_bal_cX_failed[4]; + atomic64_t s_bal_cX_skipped[3]; spinlock_t s_bal_lock; unsigned long s_mb_buddies_generated; @@ -98,7 +98,7 @@ } if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND && -@@ -2746,6 +2779,92 @@ const struct proc_ops ext4_seq_mb_last_g +@@ -2746,6 +2779,95 @@ const struct proc_ops ext4_seq_mb_last_g .proc_write = ext4_mb_last_group_write, }; @@ -119,17 +119,19 @@ + seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks)); + seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks)); + -+ seq_printf(seq, "\tuseless_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c0_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[0])); -+ seq_printf(seq, "\tuseless_c2_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c1_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[1])); -+ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c2_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[2])); -+ seq_printf(seq, "\tskipped_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ atomic64_read(&sbi->s_bal_cX_failed[3])); ++ seq_printf(seq, "\tskipped_c0_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[0])); -+ seq_printf(seq, "\tskipped_c2_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c1_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[1])); -+ seq_printf(seq, "\tskipped_c3_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c2_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[2])); + seq_printf(seq, "\tbuddies_generated: %lu\n", + sbi->s_mb_buddies_generated); @@ -160,6 +162,7 @@ + atomic64_set(&sbi->s_bal_cX_failed[0], 0), + atomic64_set(&sbi->s_bal_cX_failed[1], 0), + atomic64_set(&sbi->s_bal_cX_failed[2], 0); ++ atomic64_set(&sbi->s_bal_cX_failed[3], 0); + + atomic64_set(&sbi->s_bal_cX_skipped[0], 0), + atomic64_set(&sbi->s_bal_cX_skipped[1], 0), @@ -209,14 +212,15 @@ /* * The default group preallocation is 512, which for 4k block * sizes translates to 2 megabytes. However for bigalloc file -@@ -3185,6 +3308,16 @@ int ext4_mb_release(struct super_block * +@@ -3185,6 +3308,17 @@ int ext4_mb_release(struct super_block * atomic_read(&sbi->s_bal_reqs), atomic_read(&sbi->s_bal_success)); ext4_msg(sb, KERN_INFO, -+ "mballoc: (%llu, %llu, %llu) useless c(0,1,2) loops", ++ "mballoc: (%llu, %llu, %llu, %llu) useless c(0,1,2,3) loops", + atomic64_read(&sbi->s_bal_cX_failed[0]), + atomic64_read(&sbi->s_bal_cX_failed[1]), -+ atomic64_read(&sbi->s_bal_cX_failed[2])); ++ atomic64_read(&sbi->s_bal_cX_failed[2]), ++ atomic64_read(&sbi->s_bal_cX_failed[3])); + ext4_msg(sb, KERN_INFO, + "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops", + atomic64_read(&sbi->s_bal_cX_skipped[0]), diff --git a/ldiskfs/kernel_patches/patches/rhel7.6/ext4-simple-blockalloc.patch b/ldiskfs/kernel_patches/patches/rhel7.6/ext4-simple-blockalloc.patch index a516663..26ccdfe 100644 --- a/ldiskfs/kernel_patches/patches/rhel7.6/ext4-simple-blockalloc.patch +++ b/ldiskfs/kernel_patches/patches/rhel7.6/ext4-simple-blockalloc.patch @@ -64,7 +64,7 @@ Index: linux-stage/fs/ext4/mballoc.c } if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND && -@@ -2316,6 +2350,93 @@ static const struct seq_operations ext4_ +@@ -2316,6 +2350,96 @@ static const struct seq_operations ext4_ .show = ext4_mb_seq_groups_show, }; @@ -85,12 +85,14 @@ Index: linux-stage/fs/ext4/mballoc.c + seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks)); + seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks)); + -+ seq_printf(seq, "\tuseless_c1_loops: %lu\n", ++ seq_printf(seq, "\tuseless_c0_loops: %lu\n", + atomic64_read(&sbi->s_bal_cX_failed[0])); -+ seq_printf(seq, "\tuseless_c2_loops: %lu\n", ++ seq_printf(seq, "\tuseless_c1_loops: %lu\n", + atomic64_read(&sbi->s_bal_cX_failed[1])); -+ seq_printf(seq, "\tuseless_c3_loops: %lu\n", ++ seq_printf(seq, "\tuseless_c2_loops: %lu\n", + atomic64_read(&sbi->s_bal_cX_failed[2])); ++ seq_printf(seq, "\tuseless_c3_loops: %lu\n", ++ atomic64_read(&sbi->s_bal_cX_failed[3])); + seq_printf(seq, "\tskipped_c1_loops: %lu\n", + atomic64_read(&sbi->s_bal_cX_skipped[0])); + seq_printf(seq, "\tskipped_c2_loops: %lu\n", @@ -126,6 +128,7 @@ Index: linux-stage/fs/ext4/mballoc.c + atomic64_set(&sbi->s_bal_cX_failed[0], 0), + atomic64_set(&sbi->s_bal_cX_failed[1], 0), + atomic64_set(&sbi->s_bal_cX_failed[2], 0); ++ atomic64_set(&sbi->s_bal_cX_failed[3], 0); + + atomic64_set(&sbi->s_bal_cX_skipped[0], 0), + atomic64_set(&sbi->s_bal_cX_skipped[1], 0), @@ -200,14 +203,15 @@ Index: linux-stage/fs/ext4/mballoc.c } if (sbi->s_group_info) { -@@ -2936,6 +3064,16 @@ int ext4_mb_release(struct super_block * +@@ -2936,6 +3064,17 @@ int ext4_mb_release(struct super_block * atomic_read(&sbi->s_bal_reqs), atomic_read(&sbi->s_bal_success)); ext4_msg(sb, KERN_INFO, -+ "mballoc: (%lu, %lu, %lu) useless c(0,1,2) loops", ++ "mballoc: (%lu, %lu, %lu, %lu) useless c(0,1,2,3) loops", + atomic64_read(&sbi->s_bal_cX_failed[0]), + atomic64_read(&sbi->s_bal_cX_failed[1]), -+ atomic64_read(&sbi->s_bal_cX_failed[2])); ++ atomic64_read(&sbi->s_bal_cX_failed[2]), ++ atomic64_read(&sbi->s_bal_cX_failed[3])); + ext4_msg(sb, KERN_INFO, + "mballoc: (%lu, %lu, %lu) skipped c(0,1,2) loops", + atomic64_read(&sbi->s_bal_cX_skipped[0]), @@ -236,7 +240,7 @@ Index: linux-stage/fs/ext4/ext4.h atomic_t s_bal_breaks; /* too long searches */ atomic_t s_bal_2orders; /* 2^order hits */ + /* cX loop didn't find blocks */ -+ atomic64_t s_bal_cX_failed[3]; ++ atomic64_t s_bal_cX_failed[4]; + atomic64_t s_bal_cX_skipped[3]; spinlock_t s_bal_lock; unsigned long s_mb_buddies_generated; diff --git a/ldiskfs/kernel_patches/patches/rhel8/ext4-simple-blockalloc.patch b/ldiskfs/kernel_patches/patches/rhel8/ext4-simple-blockalloc.patch index 1d9b22a..43bba2a 100644 --- a/ldiskfs/kernel_patches/patches/rhel8/ext4-simple-blockalloc.patch +++ b/ldiskfs/kernel_patches/patches/rhel8/ext4-simple-blockalloc.patch @@ -17,7 +17,7 @@ index 3b9ec24..64dc5fd 100644 atomic_t s_bal_breaks; /* too long searches */ atomic_t s_bal_2orders; /* 2^order hits */ + /* cX loop didn't find blocks */ -+ atomic64_t s_bal_cX_failed[3]; ++ atomic64_t s_bal_cX_failed[4]; + atomic64_t s_bal_cX_skipped[3]; spinlock_t s_bal_lock; unsigned long s_mb_buddies_generated; @@ -97,7 +97,7 @@ index 15c962f..7870406 100644 } if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND && -@@ -2510,6 +2543,93 @@ const struct file_operations ext4_seq_mb_last_group_fops = { +@@ -2510,6 +2543,96 @@ const struct file_operations ext4_seq_mb_last_group_fops = { .write = ext4_mb_last_group_write, }; @@ -118,17 +118,19 @@ index 15c962f..7870406 100644 + seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks)); + seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks)); + -+ seq_printf(seq, "\tuseless_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c0_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[0])); -+ seq_printf(seq, "\tuseless_c2_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c1_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[1])); -+ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c2_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[2])); -+ seq_printf(seq, "\tskipped_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[3])); ++ seq_printf(seq, "\tskipped_c0_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[0])); -+ seq_printf(seq, "\tskipped_c2_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c1_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[1])); -+ seq_printf(seq, "\tskipped_c3_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c2_loops: %llu\n", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[2])); + seq_printf(seq, "\tbuddies_generated: %lu\n", + sbi->s_mb_buddies_generated); @@ -159,6 +161,7 @@ index 15c962f..7870406 100644 + atomic64_set(&sbi->s_bal_cX_failed[0], 0), + atomic64_set(&sbi->s_bal_cX_failed[1], 0), + atomic64_set(&sbi->s_bal_cX_failed[2], 0); ++ atomic64_set(&sbi->s_bal_cX_failed[3], 0); + + atomic64_set(&sbi->s_bal_cX_skipped[0], 0), + atomic64_set(&sbi->s_bal_cX_skipped[1], 0), @@ -216,15 +219,16 @@ index 15c962f..7870406 100644 /* * The default group preallocation is 512, which for 4k block * sizes translates to 2 megabytes. However for bigalloc file -@@ -2922,6 +3046,16 @@ int ext4_mb_release(struct super_block *sb) +@@ -2922,6 +3046,17 @@ int ext4_mb_release(struct super_block *sb) atomic_read(&sbi->s_bal_allocated), atomic_read(&sbi->s_bal_reqs), atomic_read(&sbi->s_bal_success)); + ext4_msg(sb, KERN_INFO, -+ "mballoc: (%llu, %llu, %llu) useless c(0,1,2) loops", ++ "mballoc: (%llu, %llu, %llu, %llu) useless c(0,1,2,3) loops", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[0]), + (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[1]), -+ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[2])); ++ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[2]), ++ (unsigned long long)atomic64_read(&sbi->s_bal_cX_failed[3])); + ext4_msg(sb, KERN_INFO, + "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops", + (unsigned long long)atomic64_read(&sbi->s_bal_cX_skipped[0]), diff --git a/ldiskfs/kernel_patches/patches/ubuntu20.04.3/ext4-simple-blockalloc.patch b/ldiskfs/kernel_patches/patches/ubuntu20.04.3/ext4-simple-blockalloc.patch index 66603b7..3d6627b 100644 --- a/ldiskfs/kernel_patches/patches/ubuntu20.04.3/ext4-simple-blockalloc.patch +++ b/ldiskfs/kernel_patches/patches/ubuntu20.04.3/ext4-simple-blockalloc.patch @@ -16,7 +16,7 @@ diff -ur a/fs/ext4/ext4.h b/fs/ext4/ext4.h atomic_t s_bal_breaks; /* too long searches */ atomic_t s_bal_2orders; /* 2^order hits */ + /* cX loop didn't find blocks */ -+ atomic64_t s_bal_cX_failed[3]; ++ atomic64_t s_bal_cX_failed[4]; + atomic64_t s_bal_cX_skipped[3]; spinlock_t s_bal_lock; unsigned long s_mb_buddies_generated; @@ -93,7 +93,7 @@ diff -ur a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c } if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND && -@@ -2719,6 +2752,92 @@ +@@ -2719,6 +2752,95 @@ .proc_write = ext4_mb_last_group_write, }; @@ -114,17 +114,19 @@ diff -ur a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c + seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks)); + seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks)); + -+ seq_printf(seq, "\tuseless_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c0_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[0])); -+ seq_printf(seq, "\tuseless_c2_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c1_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[1])); -+ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c2_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[2])); -+ seq_printf(seq, "\tskipped_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ atomic64_read(&sbi->s_bal_cX_failed[3])); ++ seq_printf(seq, "\tskipped_c0_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[0])); -+ seq_printf(seq, "\tskipped_c2_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c1_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[1])); -+ seq_printf(seq, "\tskipped_c3_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c2_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[2])); + seq_printf(seq, "\tbuddies_generated: %lu\n", + sbi->s_mb_buddies_generated); @@ -155,6 +157,7 @@ diff -ur a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c + atomic64_set(&sbi->s_bal_cX_failed[0], 0), + atomic64_set(&sbi->s_bal_cX_failed[1], 0), + atomic64_set(&sbi->s_bal_cX_failed[2], 0); ++ atomic64_set(&sbi->s_bal_cX_failed[3], 0); + + atomic64_set(&sbi->s_bal_cX_skipped[0], 0), + atomic64_set(&sbi->s_bal_cX_skipped[1], 0), @@ -204,14 +207,15 @@ diff -ur a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c /* * The default group preallocation is 512, which for 4k block * sizes translates to 2 megabytes. However for bigalloc file -@@ -3166,6 +3289,16 @@ +@@ -3166,6 +3289,17 @@ atomic_read(&sbi->s_bal_reqs), atomic_read(&sbi->s_bal_success)); ext4_msg(sb, KERN_INFO, -+ "mballoc: (%llu, %llu, %llu) useless c(0,1,2) loops", ++ "mballoc: (%llu, %llu, %llu, %llu) useless c(0,1,2) loops", + atomic64_read(&sbi->s_bal_cX_failed[0]), + atomic64_read(&sbi->s_bal_cX_failed[1]), -+ atomic64_read(&sbi->s_bal_cX_failed[2])); ++ atomic64_read(&sbi->s_bal_cX_failed[2]), ++ atomic64_read(&sbi->s_bal_cX_failed[3])); + ext4_msg(sb, KERN_INFO, + "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops", + atomic64_read(&sbi->s_bal_cX_skipped[0]), diff --git a/ldiskfs/kernel_patches/patches/ubuntu2004/ext4-simple-blockalloc.patch b/ldiskfs/kernel_patches/patches/ubuntu2004/ext4-simple-blockalloc.patch index 72932bc..2302113 100644 --- a/ldiskfs/kernel_patches/patches/ubuntu2004/ext4-simple-blockalloc.patch +++ b/ldiskfs/kernel_patches/patches/ubuntu2004/ext4-simple-blockalloc.patch @@ -16,7 +16,7 @@ diff -ur a/fs/ext4/ext4.h b/fs/ext4/ext4.h atomic_t s_bal_breaks; /* too long searches */ atomic_t s_bal_2orders; /* 2^order hits */ + /* cX loop didn't find blocks */ -+ atomic64_t s_bal_cX_failed[3]; ++ atomic64_t s_bal_cX_failed[4]; + atomic64_t s_bal_cX_skipped[3]; spinlock_t s_bal_lock; unsigned long s_mb_buddies_generated; @@ -93,7 +93,7 @@ diff -ur a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c } if (ac->ac_b_ex.fe_len > 0 && ac->ac_status != AC_STATUS_FOUND && -@@ -2643,6 +2676,92 @@ +@@ -2643,6 +2676,95 @@ .proc_write = ext4_mb_last_group_write, }; @@ -114,17 +114,19 @@ diff -ur a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c + seq_printf(seq, "\t\tbreaks: %u\n", atomic_read(&sbi->s_bal_breaks)); + seq_printf(seq, "\t\tlost: %u\n", atomic_read(&sbi->s_mb_lost_chunks)); + -+ seq_printf(seq, "\tuseless_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c0_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[0])); -+ seq_printf(seq, "\tuseless_c2_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c1_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[1])); -+ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c2_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_failed[2])); -+ seq_printf(seq, "\tskipped_c1_loops: %llu\n", ++ seq_printf(seq, "\tuseless_c3_loops: %llu\n", ++ atomic64_read(&sbi->s_bal_cX_failed[3])); ++ seq_printf(seq, "\tskipped_c0_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[0])); -+ seq_printf(seq, "\tskipped_c2_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c1_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[1])); -+ seq_printf(seq, "\tskipped_c3_loops: %llu\n", ++ seq_printf(seq, "\tskipped_c2_loops: %llu\n", + atomic64_read(&sbi->s_bal_cX_skipped[2])); + seq_printf(seq, "\tbuddies_generated: %lu\n", + sbi->s_mb_buddies_generated); @@ -155,6 +157,7 @@ diff -ur a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c + atomic64_set(&sbi->s_bal_cX_failed[0], 0), + atomic64_set(&sbi->s_bal_cX_failed[1], 0), + atomic64_set(&sbi->s_bal_cX_failed[2], 0); ++ atomic64_set(&sbi->s_bal_cX_failed[3], 0); + + atomic64_set(&sbi->s_bal_cX_skipped[0], 0), + atomic64_set(&sbi->s_bal_cX_skipped[1], 0), @@ -204,14 +207,15 @@ diff -ur a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c /* * The default group preallocation is 512, which for 4k block * sizes translates to 2 megabytes. However for bigalloc file -@@ -3062,6 +3185,16 @@ +@@ -3062,6 +3185,17 @@ atomic_read(&sbi->s_bal_reqs), atomic_read(&sbi->s_bal_success)); ext4_msg(sb, KERN_INFO, -+ "mballoc: (%llu, %llu, %llu) useless c(0,1,2) loops", ++ "mballoc: (%llu, %llu, %llu, %llu) useless c(0,1,2,3) loops", + atomic64_read(&sbi->s_bal_cX_failed[0]), + atomic64_read(&sbi->s_bal_cX_failed[1]), -+ atomic64_read(&sbi->s_bal_cX_failed[2])); ++ atomic64_read(&sbi->s_bal_cX_failed[2]), ++ atomic64_read(&sbi->s_bal_cX_failed[3])); + ext4_msg(sb, KERN_INFO, + "mballoc: (%llu, %llu, %llu) skipped c(0,1,2) loops", + atomic64_read(&sbi->s_bal_cX_skipped[0]), -- 1.8.3.1