[Ocfs2-tools-devel] [PATCH 0/4] defrag.ocfs2
Tristan Ye
tristan.ye at oracle.com
Mon Nov 22 23:15:04 PST 2010
Goldwyn Rodrigues wrote:
> These patches add the defrag.ocfs2 utility to ocfs2-tools. The defrag
> utility defrags the files of the filessystem, by consolidating the
> extents of the files and consolidating the dirents of the directory. It
> also clears up unused allocation groups.
>
> This utility requires the patch to fix alloc_clusters to allocate the
> best clusters. I have sent this patch independently, since it is
> not part of the defragmentation process.
>
> Changes:
> - incorporated Joel's comments
>
Hi Goldwyn,
Thanks for your persistent efforts on making the defrag.ocfs2 tools
reality;)
I'm playing it around with my current o2info patches, without quite
diving into
your codes deeply now, per my understanding, your patches seems aiming
at mainly
at defraging files, to reduce the extent records as your main goal in
other words.
which seems be changed a lot since your first version from the very
beginning, right?
after pass1/2, we reduce the number of extents for files and
directories, the pass3
can hopefully make some extent blocks be released, right?
Following are some interesting numbers from 'o2info' and 'debugfs.ocfs2'
[1]. Free chunks number/size being reported against global bitmap:
-. Before defrag:
--------------------------------------------------------
# o2info --freefrag 32 /dev/sda9
Blocksize: 4096 bytes
Clustersize: 32768 bytes
Total clusters: 1250307
Free clusters: 406165 (32.5%)
Min. free extent: 32 KB
Max. free extent: 184288 KB
Avg. free extent: 320 KB
Chunksize: 32768 bytes (1 clusters)
Total chunks: 1250308
Free chunks: 406165 (32.5%)
HISTOGRAM OF FREE EXTENT SIZES:
Extent Size Range : Free extents Free Clusters Percent
32K... 64K- : 5237 5237 1.29%
64K... 128K- : 7438 17878 4.40%
128K... 256K- : 14372 79073 19.47%
256K... 512K- : 6455 74499 18.34%
512K... 1024K- : 2060 43276 10.65%
1M... 2M- : 1134 47662 11.73%
2M... 4M- : 888 64649 15.92%
4M... 8M- : 24 3463 0.85%
8M... 16M- : 4 1324 0.33%
16M... 32M- : 1 764 0.19%
128M... 256M- : 12 68340 16.83%
--------------------------------------------------------
-. After defrag:
--------------------------------------------------------
# o2info --freefrag 32 /dev/sda9
Blocksize: 4096 bytes
Clustersize: 32768 bytes
Total clusters: 1250307
Free clusters: 408550 (32.7%)
Min. free extent: 32 KB
Max. free extent: 184288 KB
Avg. free extent: 320 KB
Chunksize: 32768 bytes (1 clusters)
Total chunks: 1250308
Free chunks: 407869 (32.6%)
HISTOGRAM OF FREE EXTENT SIZES:
Extent Size Range : Free extents Free Clusters Percent
32K... 64K- : 5872 5872 1.44%
64K... 128K- : 7864 18959 4.64%
128K... 256K- : 15009 82058 20.09%
256K... 512K- : 6321 73165 17.91%
512K... 1024K- : 1980 41703 10.21%
1M... 2M- : 1123 47472 11.62%
2M... 4M- : 886 64717 15.84%
4M... 8M- : 27 4080 1.00%
8M... 16M- : 6 2055 0.50%
16M... 32M- : 3 2128 0.52%
32M... 64M- : 2 2951 0.72%
128M... 256M- : 11 62709 15.35%
--------------------------------------------------------
[2]. Extent allocator layout:
-. Before defrag:
--------------------------------------------------------------------
debugfs: stat extent_alloc:0000
Inode: 28 Mode: 0644 Generation: 2820423521 (0xa81c3f61)
FS Generation: 2820423521 (0xa81c3f61)
CRC32: edba1e7d ECC: 0270
Type: Regular Attr: 0x0 Flags: Valid System Allocbitmap Chain
Dynamic Features: (0x0)
User: 0 (root) Group: 0 (root) Size: 12582912
Links: 1 Clusters: 384
ctime: 0x4ceb3934 -- Tue Nov 23 11:47:00 2010
atime: 0x4ceb3934 -- Tue Nov 23 11:47:00 2010
mtime: 0x4ceb3934 -- Tue Nov 23 11:47:00 2010
dtime: 0x0 -- Thu Jan 1 08:00:00 1970
ctime_nsec: 0x00000000 -- 0
atime_nsec: 0x00000000 -- 0
mtime_nsec: 0x00000000 -- 0
Refcount Block: 0
Last Extblk: 0 Orphan Slot: 0
Sub Alloc Slot: Global Sub Alloc Bit: 12
Bitmap Total: 3072 Used: 100 Free: 2972
Clusters per Group: 128 Bits per Cluster: 8
Count: 243 Next Free Rec: 3
## Total Used Free Block#
0 1024 32 992 250624
1 1024 34 990 251648
2 1024 34 990 252672
Group Chain: 0 Parent Inode: 28 Generation: 2820423521
CRC32: a492f1a3 ECC: 00f8
## Block# Total Used Free Contig Size
0 250624 1024 32 992 983 4032
Group Chain: 1 Parent Inode: 28 Generation: 2820423521
CRC32: 3dedeb22 ECC: 01a0
## Block# Total Used Free Contig Size
0 251648 1024 34 990 983 4032
Group Chain: 2 Parent Inode: 28 Generation: 2820423521
CRC32: 059ae49a ECC: 0187
## Block# Total Used Free Contig Size
0 252672 1024 34 990 984 4032
--------------------------------------------------------------------
-. After defrag:
--------------------------------------------------------------------
debugfs: stat extent_alloc:0000
Inode: 28 Mode: 0644 Generation: 2820423521 (0xa81c3f61)
FS Generation: 2820423521 (0xa81c3f61)
CRC32: dec80e05 ECC: 00b7
Type: Regular Attr: 0x0 Flags: Valid System Allocbitmap Chain
Dynamic Features: (0x0)
User: 0 (root) Group: 0 (root) Size: 4194304
Links: 1 Clusters: 128
ctime: 0x4ceb3934 -- Tue Nov 23 11:47:00 2010
atime: 0x4ceb3934 -- Tue Nov 23 11:47:00 2010
mtime: 0x4ceb3934 -- Tue Nov 23 11:47:00 2010
dtime: 0x0 -- Thu Jan 1 08:00:00 1970
ctime_nsec: 0x00000000 -- 0
atime_nsec: 0x00000000 -- 0
mtime_nsec: 0x00000000 -- 0
Refcount Block: 0
Last Extblk: 0 Orphan Slot: 0
Sub Alloc Slot: Global Sub Alloc Bit: 12
Bitmap Total: 1024 Used: 98 Free: 926
Clusters per Group: 128 Bits per Cluster: 8
Count: 243 Next Free Rec: 1
## Total Used Free Block#
0 1024 98 926 250624
Group Chain: 0 Parent Inode: 28 Generation: 2820423521
CRC32: 1aec9e0b ECC: 00a0
## Block# Total Used Free Contig Size
0 250624 1024 98 926 923 4032
--------------------------------------------------------------------
From above statistics, the awesome thing is that we do reduce the
number of extents
for files, and gained 2 extent block being freed, while looking at the
global_bitmap,
we even found more smaller free chunks at the cost of eating bigger free
chunks up, it
somehow makes the volume look more fragmented in terms of 'how many free
contiguous chunks
and their size, in global_bitmap for our allocation'.
Regards,
Tristan.
More information about the Ocfs2-tools-devel
mailing list