Commit 88d1c3a6 authored by Kozlowski Mateusz's avatar Kozlowski Mateusz Committed by Jim Harris
Browse files

FTL: Add debug function for dumping band information

parent 8c519d31
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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)
{
+1 −0
Original line number Diff line number Diff line
@@ -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);
+47 −1
Original line number Diff line number Diff line
@@ -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);
+12 −0
Original line number Diff line number Diff line
@@ -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 */
+1 −0
Original line number Diff line number Diff line
@@ -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);
}