int reserved;
unsigned long long bytes_read;
unsigned long long bytes_written;
+ unsigned long long cache_hits;
+ unsigned long long cache_misses;
};
struct struct_io_manager {
}
if (cache->block == block) {
cache->access_time = ++data->access_time;
+ data->io_stats.cache_hits++;
return cache;
}
if (!oldest_cache ||
}
if (eldest)
*eldest = (unused_cache) ? unused_cache : oldest_cache;
+ data->io_stats.cache_misses++;
return 0;
}
memset(data, 0, sizeof(struct unix_private_data));
data->magic = EXT2_ET_MAGIC_UNIX_IO_CHANNEL;
- data->io_stats.num_fields = 2;
+ data->io_stats.num_fields = 4;
data->flags = flags;
data->dev = fd;
translate_error(fs, 0, err);
}
+ if (ff->debug && fs->io->manager->get_stats) {
+ io_stats stats = NULL;
+
+ fs->io->manager->get_stats(fs->io, &stats);
+ dbg_printf(ff, "read: %lluk\n", stats->bytes_read >> 10);
+ dbg_printf(ff, "write: %lluk\n", stats->bytes_written >> 10);
+ dbg_printf(ff, "hits: %llu\n", stats->cache_hits);
+ dbg_printf(ff, "misses: %llu\n", stats->cache_misses);
+ dbg_printf(ff, "hit_ratio: %.1f%%\n",
+ (100.0 * stats->cache_hits) /
+ (stats->cache_hits + stats->cache_misses));
+ }
+
if (ff->kernel) {
char uuid[UUID_STR_SIZE];