Commit b1d3e831 authored by Leif Walsh's avatar Leif Walsh Committed by Yoni Fogel

closes #5751 split fragmentation into fragmentation and nodesizes


git-svn-id: file:///svn/toku/tokudb@50792 c7de825b-a66e-492c-adef-691d508d4ae1
parent e152c866
...@@ -226,6 +226,19 @@ dump_block_translation(FT h, uint64_t offset) { ...@@ -226,6 +226,19 @@ dump_block_translation(FT h, uint64_t offset) {
toku_blocknum_dump_translation(h->blocktable, make_blocknum(offset)); toku_blocknum_dump_translation(h->blocktable, make_blocknum(offset));
} }
static void
dump_fragmentation(int UU(f), FT h) {
int64_t used_space;
int64_t total_space;
toku_blocktable_internal_fragmentation(h->blocktable, &total_space, &used_space);
int64_t fragsizes = total_space - used_space;
printf("used size: %" PRId64 "\n", used_space);
printf("total size: %" PRId64 "\n", total_space);
printf("fragsizes: %" PRId64 "\n", fragsizes);
printf("fragmentation: %.1f%%\n", 100. * ((double)fragsizes / (double)(total_space)));
}
typedef struct { typedef struct {
int f; int f;
FT h; FT h;
...@@ -235,7 +248,7 @@ typedef struct { ...@@ -235,7 +248,7 @@ typedef struct {
} frag_help_extra; } frag_help_extra;
static int static int
fragmentation_helper(BLOCKNUM b, int64_t size, int64_t UU(address), void *extra) { nodesizes_helper(BLOCKNUM b, int64_t size, int64_t UU(address), void *extra) {
frag_help_extra *CAST_FROM_VOIDP(info, extra); frag_help_extra *CAST_FROM_VOIDP(info, extra);
FTNODE n; FTNODE n;
FTNODE_DISK_DATA ndd = NULL; FTNODE_DISK_DATA ndd = NULL;
...@@ -255,25 +268,16 @@ fragmentation_helper(BLOCKNUM b, int64_t size, int64_t UU(address), void *extra) ...@@ -255,25 +268,16 @@ fragmentation_helper(BLOCKNUM b, int64_t size, int64_t UU(address), void *extra)
} }
static void static void
dump_fragmentation(int f, FT h) { dump_nodesizes(int f, FT h) {
frag_help_extra info; frag_help_extra info;
memset(&info, 0, sizeof(info)); memset(&info, 0, sizeof(info));
info.f = f; info.f = f;
info.h = h; info.h = h;
toku_blocktable_iterate(h->blocktable, TRANSLATION_CHECKPOINTED, toku_blocktable_iterate(h->blocktable, TRANSLATION_CHECKPOINTED,
fragmentation_helper, &info, true, true); nodesizes_helper, &info, true, true);
int64_t used_space;
int64_t total_space;
toku_blocktable_internal_fragmentation(h->blocktable, &total_space, &used_space);
int64_t fragsizes = total_space - used_space;
printf("leafblocks: %" PRIu64 "\n", info.leafblocks); printf("leafblocks: %" PRIu64 "\n", info.leafblocks);
printf("blocksizes: %" PRIu64 "\n", info.blocksizes); printf("blocksizes: %" PRIu64 "\n", info.blocksizes);
printf("used size: %" PRId64 "\n", used_space);
printf("total size: %" PRId64 "\n", total_space);
printf("leafsizes: %" PRIu64 "\n", info.leafsizes); printf("leafsizes: %" PRIu64 "\n", info.leafsizes);
printf("fragsizes: %" PRId64 "\n", fragsizes);
printf("fragmentation: %.1f%%\n", 100. * ((double)fragsizes / (double)(total_space)));
} }
typedef struct { typedef struct {
...@@ -478,6 +482,7 @@ interactive_help(void) { ...@@ -478,6 +482,7 @@ interactive_help(void) {
fprintf(stderr, "bx OFFSET | block_translation OFFSET\n"); fprintf(stderr, "bx OFFSET | block_translation OFFSET\n");
fprintf(stderr, "dumpdata 0|1\n"); fprintf(stderr, "dumpdata 0|1\n");
fprintf(stderr, "fragmentation\n"); fprintf(stderr, "fragmentation\n");
fprintf(stderr, "nodesizes\n");
fprintf(stderr, "garbage\n"); fprintf(stderr, "garbage\n");
fprintf(stderr, "file OFFSET SIZE [outfilename]\n"); fprintf(stderr, "file OFFSET SIZE [outfilename]\n");
fprintf(stderr, "quit\n"); fprintf(stderr, "quit\n");
...@@ -560,6 +565,8 @@ main (int argc, const char *const argv[]) { ...@@ -560,6 +565,8 @@ main (int argc, const char *const argv[]) {
dump_block_translation(ft, offset); dump_block_translation(ft, offset);
} else if (strcmp(fields[0], "fragmentation") == 0) { } else if (strcmp(fields[0], "fragmentation") == 0) {
dump_fragmentation(f, ft); dump_fragmentation(f, ft);
} else if (strcmp(fields[0], "nodesizes") == 0) {
dump_nodesizes(f, ft);
} else if (strcmp(fields[0], "garbage") == 0) { } else if (strcmp(fields[0], "garbage") == 0) {
dump_garbage_stats(f, ft); dump_garbage_stats(f, ft);
} else if (strcmp(fields[0], "file") == 0 && nfields >= 3) { } else if (strcmp(fields[0], "file") == 0 && nfields >= 3) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment