FTL: Add debug function for dumping band information
Signed-off-by: Kozlowski Mateusz <mateusz.kozlowski@intel.com> Signed-off-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Change-Id: I6edef1e8e822f8428dff5f5f5da2df923191f6fc Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13328 Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
8c519d31bd
commit
88d1c3a69a
@ -196,6 +196,13 @@ ftl_band_user_blocks_left(const struct ftl_band *band, size_t offset)
|
||||
return tail_md_offset - offset;
|
||||
}
|
||||
|
||||
size_t
|
||||
ftl_band_user_blocks(const struct ftl_band *band)
|
||||
{
|
||||
return ftl_get_num_blocks_in_band(band->dev) -
|
||||
ftl_tail_md_num_blocks(band->dev);
|
||||
}
|
||||
|
||||
struct ftl_band *
|
||||
ftl_band_from_addr(struct spdk_ftl_dev *dev, ftl_addr addr)
|
||||
{
|
||||
|
@ -137,6 +137,7 @@ void ftl_band_release_p2l_map(struct ftl_band *band);
|
||||
ftl_addr ftl_band_next_xfer_addr(struct ftl_band *band, ftl_addr addr, size_t num_blocks);
|
||||
ftl_addr ftl_band_next_addr(struct ftl_band *band, ftl_addr addr, size_t offset);
|
||||
size_t ftl_band_user_blocks_left(const struct ftl_band *band, size_t offset);
|
||||
size_t ftl_band_user_blocks(const struct ftl_band *band);
|
||||
void ftl_band_set_addr(struct ftl_band *band, uint64_t lba, ftl_addr addr);
|
||||
struct ftl_band *ftl_band_from_addr(struct spdk_ftl_dev *dev, ftl_addr addr);
|
||||
ftl_addr ftl_band_tail_md_addr(struct ftl_band *band);
|
||||
|
@ -5,13 +5,59 @@
|
||||
|
||||
#include "spdk/ftl.h"
|
||||
#include "ftl_debug.h"
|
||||
#include "ftl_band.h"
|
||||
|
||||
/* TODO: Switch to INFOLOG instead, we can control the printing via spdk_log_get_flag */
|
||||
#if defined(DEBUG)
|
||||
|
||||
static const char *ftl_band_state_str[] = {
|
||||
"free",
|
||||
"prep",
|
||||
"opening",
|
||||
"open",
|
||||
"full",
|
||||
"closing",
|
||||
"closed",
|
||||
"max"
|
||||
};
|
||||
|
||||
void
|
||||
ftl_dev_dump_bands(struct spdk_ftl_dev *dev)
|
||||
{
|
||||
uint64_t i;
|
||||
|
||||
if (!dev->bands) {
|
||||
return;
|
||||
}
|
||||
|
||||
FTL_NOTICELOG(dev, "Bands validity:\n");
|
||||
for (i = 0; i < ftl_get_num_bands(dev); ++i) {
|
||||
FTL_NOTICELOG(dev, " Band %3zu: %8zu / %zu \twr_cnt: %"PRIu64
|
||||
"\tstate: %s\n",
|
||||
i + 1, dev->bands[i].p2l_map.num_valid,
|
||||
ftl_band_user_blocks(&dev->bands[i]),
|
||||
dev->bands[i].md->wr_cnt,
|
||||
ftl_band_state_str[dev->bands[i].md->state]);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* defined(DEBUG) */
|
||||
|
||||
void
|
||||
ftl_dev_dump_stats(const struct spdk_ftl_dev *dev)
|
||||
{
|
||||
size_t total = 0;
|
||||
uint64_t i, total = 0;
|
||||
char uuid[SPDK_UUID_STRING_LEN];
|
||||
|
||||
if (!dev->bands) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Count the number of valid LBAs */
|
||||
for (i = 0; i < ftl_get_num_bands(dev); ++i) {
|
||||
total += dev->bands[i].p2l_map.num_valid;
|
||||
}
|
||||
|
||||
spdk_uuid_fmt_lower(uuid, sizeof(uuid), &dev->conf.uuid);
|
||||
FTL_NOTICELOG(dev, "\n");
|
||||
FTL_NOTICELOG(dev, "device UUID: %s\n", uuid);
|
||||
|
@ -7,8 +7,20 @@
|
||||
#define FTL_DEBUG_H
|
||||
|
||||
#include "ftl_internal.h"
|
||||
#include "ftl_band.h"
|
||||
#include "ftl_core.h"
|
||||
|
||||
typedef void (*ftl_band_validate_md_cb)(struct ftl_band *band, bool valid);
|
||||
|
||||
#if defined(DEBUG)
|
||||
void ftl_dev_dump_bands(struct spdk_ftl_dev *dev);
|
||||
#else
|
||||
static inline void
|
||||
ftl_dev_dump_bands(struct spdk_ftl_dev *dev)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
void ftl_dev_dump_stats(const struct spdk_ftl_dev *dev);
|
||||
|
||||
#endif /* FTL_DEBUG_H */
|
||||
|
@ -173,6 +173,7 @@ ftl_mngt_stop_core_poller(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mng
|
||||
void
|
||||
ftl_mngt_dump_stats(struct spdk_ftl_dev *dev, struct ftl_mngt_process *mngt)
|
||||
{
|
||||
ftl_dev_dump_bands(dev);
|
||||
ftl_dev_dump_stats(dev);
|
||||
ftl_mngt_next_step(mngt);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user