From d571336b4b77f4dd90f545e00276b68d18d7aef3 Mon Sep 17 00:00:00 2001 From: paul luse Date: Fri, 14 Jun 2019 12:53:19 -0400 Subject: [PATCH] lib/reduce: add debug helper function Prints key info about a volume and its PMEM. As the metadata is mapped, there's no real reason to dump all this to a file, it can be accessed via gdb using the addresses printed out. Signed-off-by: paul luse Change-Id: I2c7b8c32b6142ba0fded623a660b4d7d0c5b19bc Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/458117 Tested-by: SPDK CI Jenkins Reviewed-by: Darek Stojaczyk Reviewed-by: Shuhei Matsumoto --- include/spdk/reduce.h | 9 +++++++++ lib/reduce/reduce.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/include/spdk/reduce.h b/include/spdk/reduce.h index 220f2485c..73c00691a 100644 --- a/include/spdk/reduce.h +++ b/include/spdk/reduce.h @@ -239,4 +239,13 @@ void spdk_reduce_vol_writev(struct spdk_reduce_vol *vol, * \return params structure for the compressed volume. */ const struct spdk_reduce_vol_params *spdk_reduce_vol_get_params(struct spdk_reduce_vol *vol); + +/** + * Dump out key information for a libreduce compressed volume and its PMEM. + * + * This function will print key information for a given volume its PMEM. + * + * \param vol Previously loaded or initialized compressed volume. + */ +void spdk_reduce_vol_print_info(struct spdk_reduce_vol *vol); #endif /* SPDK_REDUCE_H_ */ diff --git a/lib/reduce/reduce.c b/lib/reduce/reduce.c index d4ae35c13..1496dfb2e 100644 --- a/lib/reduce/reduce.c +++ b/lib/reduce/reduce.c @@ -1395,4 +1395,39 @@ spdk_reduce_vol_get_params(struct spdk_reduce_vol *vol) return &vol->params; } +void spdk_reduce_vol_print_info(struct spdk_reduce_vol *vol) +{ + uint64_t logical_map_size, num_chunks, ttl_chunk_sz; + uint32_t struct_size; + uint64_t chunk_map_size; + + SPDK_NOTICELOG("vol info:\n"); + SPDK_NOTICELOG("\tvol->params.backing_io_unit_size = 0x%x\n", vol->params.backing_io_unit_size); + SPDK_NOTICELOG("\tvol->params.logical_block_size = 0x%x\n", vol->params.logical_block_size); + SPDK_NOTICELOG("\tvol->params.chunk_size = 0x%x\n", vol->params.chunk_size); + SPDK_NOTICELOG("\tvol->params.vol_size = 0x%" PRIx64 "\n", vol->params.vol_size); + num_chunks = _get_total_chunks(vol->params.vol_size, vol->params.chunk_size); + SPDK_NOTICELOG("\ttotal chunks (including extra) = 0x%" PRIx64 "\n", num_chunks); + SPDK_NOTICELOG("\ttotal chunks (excluding extra) = 0x%" PRIx64 "\n", + vol->params.vol_size / vol->params.chunk_size); + ttl_chunk_sz = _get_pm_total_chunks_size(vol->params.vol_size, vol->params.chunk_size, + vol->params.backing_io_unit_size); + SPDK_NOTICELOG("\ttotal_chunks_size = 0x%" PRIx64 "\n", ttl_chunk_sz); + struct_size = _reduce_vol_get_chunk_struct_size(vol); + SPDK_NOTICELOG("\tchunk_struct_size = 0x%x\n", struct_size); + + SPDK_NOTICELOG("pmem info:\n"); + SPDK_NOTICELOG("\tvol->pm_file.size = 0x%" PRIx64 "\n", vol->pm_file.size); + SPDK_NOTICELOG("\tvol->pm_file.pm_buf = %p\n", (void *)vol->pm_file.pm_buf); + SPDK_NOTICELOG("\tvol->pm_super = %p\n", (void *)vol->pm_super); + SPDK_NOTICELOG("\tvol->pm_logical_map = %p\n", (void *)vol->pm_logical_map); + logical_map_size = _get_pm_logical_map_size(vol->params.vol_size, + vol->params.chunk_size); + SPDK_NOTICELOG("\tlogical_map_size = 0x%" PRIx64 "\n", logical_map_size); + SPDK_NOTICELOG("\tvol->pm_chunk_maps = %p\n", (void *)vol->pm_chunk_maps); + chunk_map_size = _get_pm_total_chunks_size(vol->params.vol_size, vol->params.chunk_size, + vol->params.backing_io_unit_size); + SPDK_NOTICELOG("\tchunk_map_size = 0x%" PRIx64 "\n", chunk_map_size); +} + SPDK_LOG_REGISTER_COMPONENT("reduce", SPDK_LOG_REDUCE)