mirror of https://github.com/vitalif/e2fsprogs
e2freefrag: Improve output to include be more like xfs_db's freesp -s
Signed-off-by: Andreas Dilger <adilger@sun.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>bitmap-optimize
parent
f668c2cfe8
commit
ad751f11ec
|
@ -289,7 +289,7 @@ logsave.profiled: profiled/logsave.o
|
||||||
$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o logsave.profiled profiled/logsave.o
|
$(Q) $(CC) $(ALL_LDFLAGS) -g -pg -o logsave.profiled profiled/logsave.o
|
||||||
|
|
||||||
e2freefrag: $(E2FREEFRAG_OBJS)
|
e2freefrag: $(E2FREEFRAG_OBJS)
|
||||||
@echo "LD $@"
|
@echo " LD $@"
|
||||||
@$(CC) $(ALL_LDFLAGS) -o e2freefrag $(E2FREEFRAG_OBJS) $(LIBS)
|
@$(CC) $(ALL_LDFLAGS) -o e2freefrag $(E2FREEFRAG_OBJS) $(LIBS)
|
||||||
|
|
||||||
filefrag: $(FILEFRAG_OBJS)
|
filefrag: $(FILEFRAG_OBJS)
|
||||||
|
|
|
@ -43,53 +43,53 @@ Device: /dev/vgroot/lvhome
|
||||||
.br
|
.br
|
||||||
Blocksize: 4096 bytes
|
Blocksize: 4096 bytes
|
||||||
.br
|
.br
|
||||||
Total blocks: 5120710
|
Total blocks: 1504085
|
||||||
.br
|
.br
|
||||||
Free blocks: 831744 (16.2%)
|
Free blocks: 292995 (19.5%)
|
||||||
.br
|
.br
|
||||||
Chunk size: 1048576 bytes (256 blocks)
|
Chunk size: 1048576 bytes (256 blocks)
|
||||||
.br
|
.br
|
||||||
Total chunks: 20003
|
Total chunks: 5876
|
||||||
.br
|
.br
|
||||||
Free chunks: 2174 (10.9%)
|
Free chunks: 463 (7.9%)
|
||||||
.br
|
.br
|
||||||
|
|
||||||
Min free chunk: 4 KB
|
Min free chunk: 4 KB
|
||||||
.br
|
.br
|
||||||
Max free chunk: 24576 KB
|
Max free chunk: 24008 KB
|
||||||
.br
|
.br
|
||||||
Avg. free chunk: 340 KB
|
Avg free chunk: 252 KB
|
||||||
.br
|
.br
|
||||||
|
|
||||||
HISTOGRAM OF FREE CHUNK SIZES:
|
HISTOGRAM OF FREE CHUNK SIZES:
|
||||||
.br
|
.br
|
||||||
Range Free chunks
|
Chunk Size Range : Free chunks Free Blocks Percent
|
||||||
.br
|
.br
|
||||||
4K... 8K- : 2824
|
4K... 8K- : 704 704 0.2%
|
||||||
.br
|
.br
|
||||||
8K... 16K- : 1760
|
8K... 16K- : 810 1979 0.7%
|
||||||
.br
|
.br
|
||||||
16K... 32K- : 1857
|
16K... 32K- : 843 4467 1.5%
|
||||||
.br
|
.br
|
||||||
32K... 64K- : 1003
|
32K... 64K- : 579 6263 2.1%
|
||||||
.br
|
.br
|
||||||
64K... 128K- : 616
|
64K... 128K- : 493 11067 3.8%
|
||||||
.br
|
.br
|
||||||
128K... 256K- : 479
|
128K... 256K- : 394 18097 6.2%
|
||||||
.br
|
.br
|
||||||
256K... 512K- : 302
|
256K... 512K- : 281 25477 8.7%
|
||||||
.br
|
.br
|
||||||
512K... 1024K- : 238
|
512K... 1024K- : 253 44914 15.3%
|
||||||
.br
|
.br
|
||||||
1M... 2M- : 213
|
1M... 2M- : 143 51897 17.7%
|
||||||
.br
|
.br
|
||||||
2M... 4M- : 173
|
2M... 4M- : 73 50683 17.3%
|
||||||
.br
|
.br
|
||||||
4M... 8M- : 287
|
4M... 8M- : 37 52417 17.9%
|
||||||
.br
|
.br
|
||||||
8M... 16M- : 4
|
8M... 16M- : 7 19028 6.5%
|
||||||
.br
|
.br
|
||||||
16M... 32M- : 1
|
16M... 32M- : 1 6002 2.0%
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
This version of e2freefrag was written by Rupesh Thakare, and modified by
|
This version of e2freefrag was written by Rupesh Thakare, and modified by
|
||||||
Andreas Dilger <adilger@sun.com>, and Kalpak Shah.
|
Andreas Dilger <adilger@sun.com>, and Kalpak Shah.
|
||||||
|
|
|
@ -60,8 +60,10 @@ void init_chunk_info(ext2_filsys fs, struct chunk_info *info)
|
||||||
info->max = info->avg = 0;
|
info->max = info->avg = 0;
|
||||||
info->real_free_chunks = 0;
|
info->real_free_chunks = 0;
|
||||||
|
|
||||||
for (i = 0; i < MAX_HIST; i++)
|
for (i = 0; i < MAX_HIST; i++) {
|
||||||
info->histogram.fc_buckets[i] = 0;
|
info->histogram.fc_chunks[i] = 0;
|
||||||
|
info->histogram.fc_blocks[i] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void scan_block_bitmap(ext2_filsys fs, struct chunk_info *info)
|
void scan_block_bitmap(ext2_filsys fs, struct chunk_info *info)
|
||||||
|
@ -101,7 +103,9 @@ void scan_block_bitmap(ext2_filsys fs, struct chunk_info *info)
|
||||||
unsigned long index;
|
unsigned long index;
|
||||||
|
|
||||||
index = ul_log2(last_chunk_size) + 1;
|
index = ul_log2(last_chunk_size) + 1;
|
||||||
info->histogram.fc_buckets[index]++;
|
info->histogram.fc_chunks[index]++;
|
||||||
|
info->histogram.fc_blocks[index] +=
|
||||||
|
last_chunk_size;
|
||||||
|
|
||||||
if (last_chunk_size > info->max)
|
if (last_chunk_size > info->max)
|
||||||
info->max = last_chunk_size;
|
info->max = last_chunk_size;
|
||||||
|
@ -137,7 +141,7 @@ errcode_t get_chunk_info(ext2_filsys fs, struct chunk_info *info)
|
||||||
printf("\nChunksize: %lu bytes (%u blocks)\n",
|
printf("\nChunksize: %lu bytes (%u blocks)\n",
|
||||||
info->chunkbytes, info->blks_in_chunk);
|
info->chunkbytes, info->blks_in_chunk);
|
||||||
total_chunks = (fs->super->s_blocks_count + info->blks_in_chunk) >>
|
total_chunks = (fs->super->s_blocks_count + info->blks_in_chunk) >>
|
||||||
(info->chunkbits - info->blocksize_bits);
|
(info->chunkbits - info->blocksize_bits);
|
||||||
printf("Total chunks: %lu\nFree chunks: %lu (%0.1f%%)\n",
|
printf("Total chunks: %lu\nFree chunks: %lu (%0.1f%%)\n",
|
||||||
total_chunks, info->free_chunks,
|
total_chunks, info->free_chunks,
|
||||||
(double)info->free_chunks * 100 / total_chunks);
|
(double)info->free_chunks * 100 / total_chunks);
|
||||||
|
@ -156,12 +160,17 @@ errcode_t get_chunk_info(ext2_filsys fs, struct chunk_info *info)
|
||||||
"Avg free chunk: %lu KB\n", info->min, info->max, info->avg);
|
"Avg free chunk: %lu KB\n", info->min, info->max, info->avg);
|
||||||
|
|
||||||
printf("\nHISTOGRAM OF FREE CHUNK SIZES:\n");
|
printf("\nHISTOGRAM OF FREE CHUNK SIZES:\n");
|
||||||
printf("%s\t%10s\n", "Chunk Size Range :", "Free chunks");
|
printf("%s : %12s %12s %7s\n", "Chunk Size Range", "Free chunks",
|
||||||
|
"Free Blocks", "Percent");
|
||||||
for (i = 0; i < MAX_HIST; i++) {
|
for (i = 0; i < MAX_HIST; i++) {
|
||||||
end = 1 << (i + info->blocksize_bits - units);
|
end = 1 << (i + info->blocksize_bits - units);
|
||||||
if (info->histogram.fc_buckets[i] != 0)
|
if (info->histogram.fc_chunks[i] != 0)
|
||||||
printf("%5lu%c...%5lu%c- : %10lu\n", start, *unitp,
|
printf("%5lu%c...%5lu%c- : %12lu %12lu %6.2f%%\n",
|
||||||
end, *unitp, info->histogram.fc_buckets[i]);
|
start, *unitp, end, *unitp,
|
||||||
|
info->histogram.fc_chunks[i],
|
||||||
|
info->histogram.fc_blocks[i],
|
||||||
|
(double)info->histogram.fc_blocks[i] * 100 /
|
||||||
|
fs->super->s_free_blocks_count);
|
||||||
start = end;
|
start = end;
|
||||||
if (start == 1<<10) {
|
if (start == 1<<10) {
|
||||||
start = 1;
|
start = 1;
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
|
|
||||||
#define MAX_HIST 32
|
#define MAX_HIST 32
|
||||||
struct free_chunk_histogram {
|
struct free_chunk_histogram {
|
||||||
unsigned long fc_buckets[MAX_HIST];
|
unsigned long fc_chunks[MAX_HIST];
|
||||||
|
unsigned long fc_blocks[MAX_HIST];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct chunk_info {
|
struct chunk_info {
|
||||||
|
|
Loading…
Reference in New Issue