You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
2.3 KiB
54 lines
2.3 KiB
From 9a106b5fbb88342f0ee02891d1bbb0e3c5a93d03 Mon Sep 17 00:00:00 2001 |
|
From: Donald Douwsma <ddouwsma@redhat.com> |
|
Date: Fri, 15 Sep 2017 08:33:42 -0500 |
|
Subject: [PATCH] mkfs.xfs: Don't stagger AG for a single disk |
|
|
|
When sunit and swidth are used mkfs.xfs tries to avoid all allocation |
|
groups aligning on the same stripe and will attempt to stagger them |
|
across the stripes that make up swidth. If there is only one stripe |
|
then there is no benefit in this optimisation. |
|
|
|
$ truncate -s10G xfs_10G_su256k_sw1.image |
|
$ mkfs.xfs -d su=256k,sw=1 xfs_10G_su256k_sw1.image |
|
meta-data=xfs_10G_su256k_sw1.image isize=512 agcount=16, agsize=163776 blks |
|
= sectsz=512 attr=2, projid32bit=1 |
|
= crc=1 finobt=0, sparse=0 |
|
data = bsize=4096 blocks=2620416, imaxpct=25 |
|
= sunit=64 swidth=64 blks |
|
naming =version 2 bsize=4096 ascii-ci=0 ftype=1 |
|
log =internal log bsize=4096 blocks=2560, version=2 |
|
= sectsz=512 sunit=64 blks, lazy-count=1 |
|
realtime =none extsz=4096 blocks=0, rtextents=0 |
|
|
|
A side effect of the optimisation is that the size adjustment used to stager |
|
the allocation groups causes the last sunit of storage to be unused. |
|
|
|
$ echo $((2620416*4096)) |
|
10733223936 |
|
$ ls -l xfs_10G_su256k_sw1.image |
|
-rw-rw-r--. 1 test test 10737418240 Aug 30 10:54 xfs_10G_su256k_sw1.image |
|
|
|
Skip this optimisation when sunit == swidth. |
|
|
|
Signed-off-by: Donald Douwsma <ddouwsma@redhat.com> |
|
Reviewed-by: Eric Sandeen <sandeen@redhat.com> |
|
Signed-off-by: Eric Sandeen <sandeen@sandeen.net> |
|
--- |
|
mkfs/xfs_mkfs.c | 4 +++- |
|
1 file changed, 3 insertions(+), 1 deletion(-) |
|
|
|
Index: xfsprogs-rhel7.5/mkfs/xfs_mkfs.c |
|
=================================================================== |
|
--- xfsprogs-rhel7.5.orig/mkfs/xfs_mkfs.c |
|
+++ xfsprogs-rhel7.5/mkfs/xfs_mkfs.c |
|
@@ -2308,7 +2308,9 @@ reported by the device (%u).\n"), |
|
} |
|
} |
|
} |
|
- if (dswidth && ((agsize % dswidth) == 0) && (agcount > 1)) { |
|
+ if (dswidth && ((agsize % dswidth) == 0) |
|
+ && (dswidth != dsunit) |
|
+ && (agcount > 1)) { |
|
/* This is a non-optimal configuration because all AGs |
|
* start on the same disk in the stripe. Changing |
|
* the AG size by one sunit will guarantee that this
|
|
|