[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