Remove low-level stats getters from public API.
Since stats builder is implemented for retrieving cache, core and ioclass stats, adapters should use it instead. Signed-off-by: Michal Mielewczyk <michal.mielewczyk@intel.com>
This commit is contained in:
parent
5f357272d1
commit
42d6dbbf11
@ -29,7 +29,6 @@
|
|||||||
#include "ocf_metadata_updater.h"
|
#include "ocf_metadata_updater.h"
|
||||||
#include "ocf_io_class.h"
|
#include "ocf_io_class.h"
|
||||||
#include "ocf_stats.h"
|
#include "ocf_stats.h"
|
||||||
#include "ocf_stats_builder.h"
|
|
||||||
#include "ocf_mngt.h"
|
#include "ocf_mngt.h"
|
||||||
#include "ocf_ctx.h"
|
#include "ocf_ctx.h"
|
||||||
#include "ocf_err.h"
|
#include "ocf_err.h"
|
||||||
|
326
inc/ocf_stats.h
326
inc/ocf_stats.h
@ -14,133 +14,210 @@
|
|||||||
#ifndef __OCF_STATS_H__
|
#ifndef __OCF_STATS_H__
|
||||||
#define __OCF_STATS_H__
|
#define __OCF_STATS_H__
|
||||||
|
|
||||||
struct ocf_io;
|
/**
|
||||||
|
* Entire row of statistcs
|
||||||
|
*/
|
||||||
|
struct ocf_stat {
|
||||||
|
/** Value */
|
||||||
|
uint64_t value;
|
||||||
|
/** percent x100 */
|
||||||
|
uint64_t fraction;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief OCF requests statistics like hit, miss, etc...
|
* @brief Usage statistics in 4 KiB unit
|
||||||
*
|
*
|
||||||
* @note To calculate number of hits request do:
|
* An example of presenting statistics:
|
||||||
* total - (partial_miss + full_miss)
|
* <pre>
|
||||||
|
* ╔══════════════════╤══════════╤═══════╤═════════════╗
|
||||||
|
* ║ Usage statistics │ Count │ % │ Units ║
|
||||||
|
* ╠══════════════════╪══════════╪═══════╪═════════════╣
|
||||||
|
* ║ Occupancy │ 20 │ 50.0 │ 4KiB blocks ║
|
||||||
|
* ║ Free │ 20 │ 50.0 │ 4KiB blocks ║
|
||||||
|
* ║ Clean │ 15 │ 75.0 │ 4KiB blocks ║
|
||||||
|
* ║ Dirty │ 5 │ 25.0 │ 4KiB blocks ║
|
||||||
|
* ╚══════════════════╧══════════╧═══════╧═════════════╝
|
||||||
|
* </pre>
|
||||||
*/
|
*/
|
||||||
struct ocf_stats_req {
|
struct ocf_stats_usage {
|
||||||
/** Number of partial misses */
|
struct ocf_stat occupancy;
|
||||||
uint64_t partial_miss;
|
struct ocf_stat free;
|
||||||
|
struct ocf_stat clean;
|
||||||
/** Number of full misses */
|
struct ocf_stat dirty;
|
||||||
uint64_t full_miss;
|
|
||||||
|
|
||||||
/** Total of requests */
|
|
||||||
uint64_t total;
|
|
||||||
|
|
||||||
/** Pass-through requests */
|
|
||||||
uint64_t pass_through;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief OCF error statistics
|
* @brief Requests statistcs
|
||||||
|
*
|
||||||
|
* An example of presenting statistics:
|
||||||
|
* <pre>
|
||||||
|
* ╔══════════════════════╤═══════╤═══════╤══════════╗
|
||||||
|
* ║ Request statistics │ Count │ % │ Units ║
|
||||||
|
* ╠══════════════════════╪═══════╪═══════╪══════════╣
|
||||||
|
* ║ Read hits │ 10 │ 4.5 │ Requests ║
|
||||||
|
* ║ Read partial misses │ 1 │ 0.5 │ Requests ║
|
||||||
|
* ║ Read full misses │ 211 │ 95.0 │ Requests ║
|
||||||
|
* ║ Read total │ 222 │ 100.0 │ Requests ║
|
||||||
|
* ╟──────────────────────┼───────┼───────┼──────────╢
|
||||||
|
* ║ Write hits │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ║ Write partial misses │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ║ Write full misses │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ║ Write total │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ╟──────────────────────┼───────┼───────┼──────────╢
|
||||||
|
* ║ Pass-Through reads │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ║ Pass-Through writes │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ║ Serviced requests │ 222 │ 100.0 │ Requests ║
|
||||||
|
* ╟──────────────────────┼───────┼───────┼──────────╢
|
||||||
|
* ║ Total requests │ 222 │ 100.0 │ Requests ║
|
||||||
|
* ╚══════════════════════╧═══════╧═══════╧══════════╝
|
||||||
|
* </pre>
|
||||||
*/
|
*/
|
||||||
struct ocf_stats_error {
|
struct ocf_stats_requests {
|
||||||
/** Read errors */
|
struct ocf_stat rd_hits;
|
||||||
uint32_t read;
|
struct ocf_stat rd_partial_misses;
|
||||||
|
struct ocf_stat rd_full_misses;
|
||||||
/** Write errors */
|
struct ocf_stat rd_total;
|
||||||
uint32_t write;
|
struct ocf_stat wr_hits;
|
||||||
|
struct ocf_stat wr_partial_misses;
|
||||||
|
struct ocf_stat wr_full_misses;
|
||||||
|
struct ocf_stat wr_total;
|
||||||
|
struct ocf_stat rd_pt;
|
||||||
|
struct ocf_stat wr_pt;
|
||||||
|
struct ocf_stat serviced;
|
||||||
|
struct ocf_stat total;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief OCF block statistics in bytes
|
* @brief Block statistics
|
||||||
|
*
|
||||||
|
* An example of presenting statistics:
|
||||||
|
* <pre>
|
||||||
|
* ╔════════════════════════════════════╤═══════╤═══════╤═════════════╗
|
||||||
|
* ║ Block statistics │ Count │ % │ Units ║
|
||||||
|
* ╠════════════════════════════════════╪═══════╪═══════╪═════════════╣
|
||||||
|
* ║ Reads from core volume(s) │ 426 │ 100.0 │ 4KiB blocks ║
|
||||||
|
* ║ Writes to core volume(s) │ 0 │ 0.0 │ 4KiB blocks ║
|
||||||
|
* ║ Total to/from core volume (s) │ 426 │ 100.0 │ 4KiB blocks ║
|
||||||
|
* ╟────────────────────────────────────┼───────┼───────┼─────────────╢
|
||||||
|
* ║ Reads from cache volume │ 13 │ 3.0 │ 4KiB blocks ║
|
||||||
|
* ║ Writes to cache volume │ 426 │ 97.0 │ 4KiB blocks ║
|
||||||
|
* ║ Total to/from cache volume │ 439 │ 100.0 │ 4KiB blocks ║
|
||||||
|
* ╟────────────────────────────────────┼───────┼───────┼─────────────╢
|
||||||
|
* ║ Reads from core(s) │ 439 │ 100.0 │ 4KiB blocks ║
|
||||||
|
* ║ Writes to core(s) │ 0 │ 0.0 │ 4KiB blocks ║
|
||||||
|
* ║ Total to/from core(s) │ 439 │ 100.0 │ 4KiB blocks ║
|
||||||
|
* ╚════════════════════════════════════╧═══════╧═══════╧═════════════╝
|
||||||
|
* </pre>
|
||||||
*/
|
*/
|
||||||
struct ocf_stats_block {
|
struct ocf_stats_blocks {
|
||||||
/** Number of blocks read */
|
struct ocf_stat core_volume_rd;
|
||||||
uint64_t read;
|
struct ocf_stat core_volume_wr;
|
||||||
|
struct ocf_stat core_volume_total;
|
||||||
/** Number of blocks written */
|
struct ocf_stat cache_volume_rd;
|
||||||
uint64_t write;
|
struct ocf_stat cache_volume_wr;
|
||||||
|
struct ocf_stat cache_volume_total;
|
||||||
|
struct ocf_stat volume_rd;
|
||||||
|
struct ocf_stat volume_wr;
|
||||||
|
struct ocf_stat volume_total;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Statistics appropriate for given IO class
|
* @brief Errors statistics
|
||||||
|
*
|
||||||
|
* An example of presenting statistics:
|
||||||
|
* <pre>
|
||||||
|
* ╔════════════════════╤═══════╤═════╤══════════╗
|
||||||
|
* ║ Error statistics │ Count │ % │ Units ║
|
||||||
|
* ╠════════════════════╪═══════╪═════╪══════════╣
|
||||||
|
* ║ Cache read errors │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ║ Cache write errors │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ║ Cache total errors │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ╟────────────────────┼───────┼─────┼──────────╢
|
||||||
|
* ║ Core read errors │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ║ Core write errors │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ║ Core total errors │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ╟────────────────────┼───────┼─────┼──────────╢
|
||||||
|
* ║ Total errors │ 0 │ 0.0 │ Requests ║
|
||||||
|
* ╚════════════════════╧═══════╧═════╧══════════╝
|
||||||
|
* </pre>
|
||||||
*/
|
*/
|
||||||
struct ocf_stats_io_class {
|
struct ocf_stats_errors {
|
||||||
/** Number of cache lines available for given partition */
|
struct ocf_stat core_volume_rd;
|
||||||
uint64_t free_clines;
|
struct ocf_stat core_volume_wr;
|
||||||
|
struct ocf_stat core_volume_total;
|
||||||
/** Number of cache lines within lru list */
|
struct ocf_stat cache_volume_rd;
|
||||||
uint64_t occupancy_clines;
|
struct ocf_stat cache_volume_wr;
|
||||||
|
struct ocf_stat cache_volume_total;
|
||||||
/** Number of dirty cache lines assigned to specific partition */
|
struct ocf_stat total;
|
||||||
uint64_t dirty_clines;
|
|
||||||
|
|
||||||
/** Read requests statistics */
|
|
||||||
struct ocf_stats_req read_reqs;
|
|
||||||
|
|
||||||
/** Writes requests statistics */
|
|
||||||
struct ocf_stats_req write_reqs;
|
|
||||||
|
|
||||||
/** Block requests submitted by user to this core */
|
|
||||||
struct ocf_stats_block blocks;
|
|
||||||
|
|
||||||
/** Block requests for cache volume statistics */
|
|
||||||
struct ocf_stats_block cache_blocks;
|
|
||||||
|
|
||||||
/** Block requests for core volume statistics */
|
|
||||||
struct ocf_stats_block core_blocks;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define IO_PACKET_NO 12
|
|
||||||
#define IO_ALIGN_NO 4
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Core debug statistics
|
|
||||||
*/
|
|
||||||
struct ocf_stats_core_debug {
|
|
||||||
/** I/O sizes being read (grouped by packets) */
|
|
||||||
uint64_t read_size[IO_PACKET_NO];
|
|
||||||
|
|
||||||
/** I/O sizes being written (grouped by packets) */
|
|
||||||
uint64_t write_size[IO_PACKET_NO];
|
|
||||||
|
|
||||||
/** I/O alignment for reads */
|
|
||||||
uint64_t read_align[IO_ALIGN_NO];
|
|
||||||
|
|
||||||
/** I/O alignment for writes */
|
|
||||||
uint64_t write_align[IO_ALIGN_NO];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief OCF core statistics
|
* @param Collect statistics for given cache
|
||||||
|
*
|
||||||
|
* @param cache Cache instance for which statistics will be collected
|
||||||
|
* @param usage Usage statistics
|
||||||
|
* @param req Request statistics
|
||||||
|
* @param blocks Blocks statistics
|
||||||
|
* @param errors Errors statistics
|
||||||
|
*
|
||||||
|
* @retval 0 Success
|
||||||
|
* @retval Non-zero Error
|
||||||
*/
|
*/
|
||||||
struct ocf_stats_core {
|
int ocf_stats_collect_cache(ocf_cache_t cache,
|
||||||
/** Number of cache lines allocated in the cache for this core */
|
struct ocf_stats_usage *usage,
|
||||||
uint32_t cache_occupancy;
|
struct ocf_stats_requests *req,
|
||||||
|
struct ocf_stats_blocks *blocks,
|
||||||
|
struct ocf_stats_errors *errors);
|
||||||
|
|
||||||
/** Number of dirty cache lines allocated in the cache for this core */
|
/**
|
||||||
uint32_t dirty;
|
* @param Collect statistics for given core
|
||||||
|
*
|
||||||
|
* @param core Core for which statistics will be collected
|
||||||
|
* @param usage Usage statistics
|
||||||
|
* @param req Request statistics
|
||||||
|
* @param blocks Blocks statistics
|
||||||
|
* @param errors Errors statistics
|
||||||
|
*
|
||||||
|
* @retval 0 Success
|
||||||
|
* @retval Non-zero Error
|
||||||
|
*/
|
||||||
|
int ocf_stats_collect_core(ocf_core_t core,
|
||||||
|
struct ocf_stats_usage *usage,
|
||||||
|
struct ocf_stats_requests *req,
|
||||||
|
struct ocf_stats_blocks *blocks,
|
||||||
|
struct ocf_stats_errors *errors);
|
||||||
|
|
||||||
/** Read requests statistics */
|
/**
|
||||||
struct ocf_stats_req read_reqs;
|
* @param Collect statistics for given ioclass
|
||||||
|
*
|
||||||
|
* @param core Core handle for which statistics will be collected
|
||||||
|
* @param part_id Ioclass id for which statistics will be collected
|
||||||
|
* @param usage Usage statistics
|
||||||
|
* @param req Request statistics
|
||||||
|
* @param blocks Blocks statistics
|
||||||
|
*
|
||||||
|
* @retval 0 Success
|
||||||
|
* @retval Non-zero Error
|
||||||
|
*/
|
||||||
|
int ocf_stats_collect_part_core(ocf_core_t core, ocf_part_id_t part_id,
|
||||||
|
struct ocf_stats_usage *usage, struct ocf_stats_requests *req,
|
||||||
|
struct ocf_stats_blocks *blocks);
|
||||||
|
|
||||||
/** Write requests statistics */
|
/**
|
||||||
struct ocf_stats_req write_reqs;
|
* @param Collect statistics for given ioclass
|
||||||
|
*
|
||||||
/** Block requests for cache volume statistics */
|
* @param cache Cache instance for which statistics will be collected
|
||||||
struct ocf_stats_block cache_volume;
|
* @param part_id Ioclass id for which statistics will be collected
|
||||||
|
* @param usage Usage statistics
|
||||||
/** Block requests for core volume statistics */
|
* @param req Request statistics
|
||||||
struct ocf_stats_block core_volume;
|
* @param blocks Blocks statistics
|
||||||
|
*
|
||||||
/** Block requests submitted by user to this core */
|
* @retval 0 Success
|
||||||
struct ocf_stats_block core;
|
* @retval Non-zero Error
|
||||||
|
*/
|
||||||
/** Cache volume error statistics */
|
int ocf_stats_collect_part_cache(ocf_cache_t cache, ocf_part_id_t part_id,
|
||||||
struct ocf_stats_error cache_errors;
|
struct ocf_stats_usage *usage, struct ocf_stats_requests *req,
|
||||||
|
struct ocf_stats_blocks *blocks);
|
||||||
/** Core volume error statistics */
|
|
||||||
struct ocf_stats_error core_errors;
|
|
||||||
|
|
||||||
/** Debug statistics */
|
|
||||||
struct ocf_stats_core_debug debug_stat;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Initialize or reset core statistics
|
* @brief Initialize or reset core statistics
|
||||||
@ -160,45 +237,4 @@ void ocf_core_stats_initialize(ocf_core_t core);
|
|||||||
*/
|
*/
|
||||||
void ocf_core_stats_initialize_all(ocf_cache_t cache);
|
void ocf_core_stats_initialize_all(ocf_cache_t cache);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief ocf_core_io_class_get_stats retrieve io class statistics
|
|
||||||
* for given core
|
|
||||||
*
|
|
||||||
* Retrieve buffer of cache statistics for given cache instance.
|
|
||||||
*
|
|
||||||
* @param[in] core core handle to which request pertains
|
|
||||||
* @param[in] part_id IO class, stats of which are requested
|
|
||||||
* @param[out] stats statistic structure that shall be filled as
|
|
||||||
* a result of this function invocation.
|
|
||||||
*
|
|
||||||
* @result zero upon successful completion; error code otherwise
|
|
||||||
*/
|
|
||||||
int ocf_core_io_class_get_stats(ocf_core_t core, ocf_part_id_t part_id,
|
|
||||||
struct ocf_stats_io_class *stats);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief retrieve core stats
|
|
||||||
*
|
|
||||||
* Retrieve ocf per core stats (for all IO classes together)
|
|
||||||
*
|
|
||||||
* @param[in] core core ID to which request pertains
|
|
||||||
* @param[out] stats statistics structure that shall be filled as
|
|
||||||
* a result of this function invocation.
|
|
||||||
*
|
|
||||||
* @result zero upon successful completion; error code otherwise
|
|
||||||
*/
|
|
||||||
int ocf_core_get_stats(ocf_core_t core, struct ocf_stats_core *stats);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief update stats given IO request
|
|
||||||
*
|
|
||||||
* Function meant to update stats for IO request.
|
|
||||||
*
|
|
||||||
* @note This function shall be invoked for eac IO request processed
|
|
||||||
*
|
|
||||||
* @param[in] core to which request pertains
|
|
||||||
* @param[in] io request for which stats are being updated
|
|
||||||
*/
|
|
||||||
void ocf_core_update_stats(ocf_core_t core, struct ocf_io *io);
|
|
||||||
|
|
||||||
#endif /* __OCF_STATS_H__ */
|
#endif /* __OCF_STATS_H__ */
|
||||||
|
@ -1,222 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright(c) 2012-2018 Intel Corporation
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause-Clear
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* @brief OCF API for collecting statistics
|
|
||||||
*
|
|
||||||
* This file contains routines pertaining to retrieval and
|
|
||||||
* manipulation of OCF IO statistics.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __OCF_STATS_BUILDER_H__
|
|
||||||
#define __OCF_STATS_BUILDER_H__
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Entire row of statistcs
|
|
||||||
*/
|
|
||||||
struct ocf_stat {
|
|
||||||
/** Value */
|
|
||||||
uint64_t value;
|
|
||||||
/** percent x100 */
|
|
||||||
uint64_t fraction;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Usage statistics in 4 KiB unit
|
|
||||||
*
|
|
||||||
* An example of presenting statistics:
|
|
||||||
* <pre>
|
|
||||||
* ╔══════════════════╤══════════╤═══════╤═════════════╗
|
|
||||||
* ║ Usage statistics │ Count │ % │ Units ║
|
|
||||||
* ╠══════════════════╪══════════╪═══════╪═════════════╣
|
|
||||||
* ║ Occupancy │ 20 │ 50.0 │ 4KiB blocks ║
|
|
||||||
* ║ Free │ 20 │ 50.0 │ 4KiB blocks ║
|
|
||||||
* ║ Clean │ 15 │ 75.0 │ 4KiB blocks ║
|
|
||||||
* ║ Dirty │ 5 │ 25.0 │ 4KiB blocks ║
|
|
||||||
* ╚══════════════════╧══════════╧═══════╧═════════════╝
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
struct ocf_stats_usage {
|
|
||||||
struct ocf_stat occupancy;
|
|
||||||
struct ocf_stat free;
|
|
||||||
struct ocf_stat clean;
|
|
||||||
struct ocf_stat dirty;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Requests statistcs
|
|
||||||
*
|
|
||||||
* An example of presenting statistics:
|
|
||||||
* <pre>
|
|
||||||
* ╔══════════════════════╤═══════╤═══════╤══════════╗
|
|
||||||
* ║ Request statistics │ Count │ % │ Units ║
|
|
||||||
* ╠══════════════════════╪═══════╪═══════╪══════════╣
|
|
||||||
* ║ Read hits │ 10 │ 4.5 │ Requests ║
|
|
||||||
* ║ Read partial misses │ 1 │ 0.5 │ Requests ║
|
|
||||||
* ║ Read full misses │ 211 │ 95.0 │ Requests ║
|
|
||||||
* ║ Read total │ 222 │ 100.0 │ Requests ║
|
|
||||||
* ╟──────────────────────┼───────┼───────┼──────────╢
|
|
||||||
* ║ Write hits │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ║ Write partial misses │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ║ Write full misses │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ║ Write total │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ╟──────────────────────┼───────┼───────┼──────────╢
|
|
||||||
* ║ Pass-Through reads │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ║ Pass-Through writes │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ║ Serviced requests │ 222 │ 100.0 │ Requests ║
|
|
||||||
* ╟──────────────────────┼───────┼───────┼──────────╢
|
|
||||||
* ║ Total requests │ 222 │ 100.0 │ Requests ║
|
|
||||||
* ╚══════════════════════╧═══════╧═══════╧══════════╝
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
struct ocf_stats_requests {
|
|
||||||
struct ocf_stat rd_hits;
|
|
||||||
struct ocf_stat rd_partial_misses;
|
|
||||||
struct ocf_stat rd_full_misses;
|
|
||||||
struct ocf_stat rd_total;
|
|
||||||
struct ocf_stat wr_hits;
|
|
||||||
struct ocf_stat wr_partial_misses;
|
|
||||||
struct ocf_stat wr_full_misses;
|
|
||||||
struct ocf_stat wr_total;
|
|
||||||
struct ocf_stat rd_pt;
|
|
||||||
struct ocf_stat wr_pt;
|
|
||||||
struct ocf_stat serviced;
|
|
||||||
struct ocf_stat total;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Block statistics
|
|
||||||
*
|
|
||||||
* An example of presenting statistics:
|
|
||||||
* <pre>
|
|
||||||
* ╔════════════════════════════════════╤═══════╤═══════╤═════════════╗
|
|
||||||
* ║ Block statistics │ Count │ % │ Units ║
|
|
||||||
* ╠════════════════════════════════════╪═══════╪═══════╪═════════════╣
|
|
||||||
* ║ Reads from core volume(s) │ 426 │ 100.0 │ 4KiB blocks ║
|
|
||||||
* ║ Writes to core volume(s) │ 0 │ 0.0 │ 4KiB blocks ║
|
|
||||||
* ║ Total to/from core volume (s) │ 426 │ 100.0 │ 4KiB blocks ║
|
|
||||||
* ╟────────────────────────────────────┼───────┼───────┼─────────────╢
|
|
||||||
* ║ Reads from cache volume │ 13 │ 3.0 │ 4KiB blocks ║
|
|
||||||
* ║ Writes to cache volume │ 426 │ 97.0 │ 4KiB blocks ║
|
|
||||||
* ║ Total to/from cache volume │ 439 │ 100.0 │ 4KiB blocks ║
|
|
||||||
* ╟────────────────────────────────────┼───────┼───────┼─────────────╢
|
|
||||||
* ║ Reads from core(s) │ 439 │ 100.0 │ 4KiB blocks ║
|
|
||||||
* ║ Writes to core(s) │ 0 │ 0.0 │ 4KiB blocks ║
|
|
||||||
* ║ Total to/from core(s) │ 439 │ 100.0 │ 4KiB blocks ║
|
|
||||||
* ╚════════════════════════════════════╧═══════╧═══════╧═════════════╝
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
struct ocf_stats_blocks {
|
|
||||||
struct ocf_stat core_volume_rd;
|
|
||||||
struct ocf_stat core_volume_wr;
|
|
||||||
struct ocf_stat core_volume_total;
|
|
||||||
struct ocf_stat cache_volume_rd;
|
|
||||||
struct ocf_stat cache_volume_wr;
|
|
||||||
struct ocf_stat cache_volume_total;
|
|
||||||
struct ocf_stat volume_rd;
|
|
||||||
struct ocf_stat volume_wr;
|
|
||||||
struct ocf_stat volume_total;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Errors statistics
|
|
||||||
*
|
|
||||||
* An example of presenting statistics:
|
|
||||||
* <pre>
|
|
||||||
* ╔════════════════════╤═══════╤═════╤══════════╗
|
|
||||||
* ║ Error statistics │ Count │ % │ Units ║
|
|
||||||
* ╠════════════════════╪═══════╪═════╪══════════╣
|
|
||||||
* ║ Cache read errors │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ║ Cache write errors │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ║ Cache total errors │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ╟────────────────────┼───────┼─────┼──────────╢
|
|
||||||
* ║ Core read errors │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ║ Core write errors │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ║ Core total errors │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ╟────────────────────┼───────┼─────┼──────────╢
|
|
||||||
* ║ Total errors │ 0 │ 0.0 │ Requests ║
|
|
||||||
* ╚════════════════════╧═══════╧═════╧══════════╝
|
|
||||||
* </pre>
|
|
||||||
*/
|
|
||||||
struct ocf_stats_errors {
|
|
||||||
struct ocf_stat core_volume_rd;
|
|
||||||
struct ocf_stat core_volume_wr;
|
|
||||||
struct ocf_stat core_volume_total;
|
|
||||||
struct ocf_stat cache_volume_rd;
|
|
||||||
struct ocf_stat cache_volume_wr;
|
|
||||||
struct ocf_stat cache_volume_total;
|
|
||||||
struct ocf_stat total;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Collect statistics for given cache
|
|
||||||
*
|
|
||||||
* @param cache Cache instance for each statistics will be collected
|
|
||||||
* @param usage Usage statistics
|
|
||||||
* @param req Request statistics
|
|
||||||
* @param blocks Blocks statistics
|
|
||||||
* @param errors Errors statistics
|
|
||||||
*
|
|
||||||
* @retval 0 Success
|
|
||||||
* @retval Non-zero Error
|
|
||||||
*/
|
|
||||||
int ocf_stats_collect_cache(ocf_cache_t cache,
|
|
||||||
struct ocf_stats_usage *usage,
|
|
||||||
struct ocf_stats_requests *req,
|
|
||||||
struct ocf_stats_blocks *blocks,
|
|
||||||
struct ocf_stats_errors *errors);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Collect statistics for given core
|
|
||||||
*
|
|
||||||
* @param core Core for which statistics will be collected
|
|
||||||
* @param usage Usage statistics
|
|
||||||
* @param req Request statistics
|
|
||||||
* @param blocks Blocks statistics
|
|
||||||
* @param errors Errors statistics
|
|
||||||
*
|
|
||||||
* @retval 0 Success
|
|
||||||
* @retval Non-zero Error
|
|
||||||
*/
|
|
||||||
int ocf_stats_collect_core(ocf_core_t core,
|
|
||||||
struct ocf_stats_usage *usage,
|
|
||||||
struct ocf_stats_requests *req,
|
|
||||||
struct ocf_stats_blocks *blocks,
|
|
||||||
struct ocf_stats_errors *errors);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Collect statistics for given ioclass
|
|
||||||
*
|
|
||||||
* @param core Core handle for which statistics will be collected
|
|
||||||
* @param part_id Ioclass id for which statistics will be collected
|
|
||||||
* @param usage Usage statistics
|
|
||||||
* @param req Request statistics
|
|
||||||
* @param blocks Blocks statistics
|
|
||||||
*
|
|
||||||
* @retval 0 Success
|
|
||||||
* @retval Non-zero Error
|
|
||||||
*/
|
|
||||||
int ocf_stats_collect_part_core(ocf_core_t core, ocf_part_id_t part_id,
|
|
||||||
struct ocf_stats_usage *usage, struct ocf_stats_requests *req,
|
|
||||||
struct ocf_stats_blocks *blocks);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Collect statistics for given ioclass
|
|
||||||
*
|
|
||||||
* @param cache Cache instance for which statistics will be collected
|
|
||||||
* @param part_id Ioclass id for which statistics will be collected
|
|
||||||
* @param usage Usage statistics
|
|
||||||
* @param req Request statistics
|
|
||||||
* @param blocks Blocks statistics
|
|
||||||
*
|
|
||||||
* @retval 0 Success
|
|
||||||
* @retval Non-zero Error
|
|
||||||
*/
|
|
||||||
int ocf_stats_collect_part_cache(ocf_cache_t cache, ocf_part_id_t part_id,
|
|
||||||
struct ocf_stats_usage *usage, struct ocf_stats_requests *req,
|
|
||||||
struct ocf_stats_blocks *blocks);
|
|
||||||
|
|
||||||
#endif /* __OCF_STATS_BUILDER_H__ */
|
|
@ -23,6 +23,132 @@ struct ocf_counters_req {
|
|||||||
env_atomic64 pass_through;
|
env_atomic64 pass_through;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief OCF requests statistics like hit, miss, etc...
|
||||||
|
*
|
||||||
|
* @note To calculate number of hits request do:
|
||||||
|
* total - (partial_miss + full_miss)
|
||||||
|
*/
|
||||||
|
struct ocf_stats_req {
|
||||||
|
/** Number of partial misses */
|
||||||
|
uint64_t partial_miss;
|
||||||
|
|
||||||
|
/** Number of full misses */
|
||||||
|
uint64_t full_miss;
|
||||||
|
|
||||||
|
/** Total of requests */
|
||||||
|
uint64_t total;
|
||||||
|
|
||||||
|
/** Pass-through requests */
|
||||||
|
uint64_t pass_through;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief OCF error statistics
|
||||||
|
*/
|
||||||
|
struct ocf_stats_error {
|
||||||
|
/** Read errors */
|
||||||
|
uint32_t read;
|
||||||
|
|
||||||
|
/** Write errors */
|
||||||
|
uint32_t write;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief OCF block statistics in bytes
|
||||||
|
*/
|
||||||
|
struct ocf_stats_block {
|
||||||
|
/** Number of blocks read */
|
||||||
|
uint64_t read;
|
||||||
|
|
||||||
|
/** Number of blocks written */
|
||||||
|
uint64_t write;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Statistics appropriate for given IO class
|
||||||
|
*/
|
||||||
|
struct ocf_stats_io_class {
|
||||||
|
/** Number of cache lines available for given partition */
|
||||||
|
uint64_t free_clines;
|
||||||
|
|
||||||
|
/** Number of cache lines within lru list */
|
||||||
|
uint64_t occupancy_clines;
|
||||||
|
|
||||||
|
/** Number of dirty cache lines assigned to specific partition */
|
||||||
|
uint64_t dirty_clines;
|
||||||
|
|
||||||
|
/** Read requests statistics */
|
||||||
|
struct ocf_stats_req read_reqs;
|
||||||
|
|
||||||
|
/** Writes requests statistics */
|
||||||
|
struct ocf_stats_req write_reqs;
|
||||||
|
|
||||||
|
/** Block requests for ocf volume statistics */
|
||||||
|
struct ocf_stats_block blocks;
|
||||||
|
|
||||||
|
/** Block requests for cache volume statistics */
|
||||||
|
struct ocf_stats_block cache_blocks;
|
||||||
|
|
||||||
|
/** Block requests for core volume statistics */
|
||||||
|
struct ocf_stats_block core_blocks;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IO_PACKET_NO 12
|
||||||
|
#define IO_ALIGN_NO 4
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Core debug statistics
|
||||||
|
*/
|
||||||
|
struct ocf_stats_core_debug {
|
||||||
|
/** I/O sizes being read (grouped by packets) */
|
||||||
|
uint64_t read_size[IO_PACKET_NO];
|
||||||
|
|
||||||
|
/** I/O sizes being written (grouped by packets) */
|
||||||
|
uint64_t write_size[IO_PACKET_NO];
|
||||||
|
|
||||||
|
/** I/O alignment for reads */
|
||||||
|
uint64_t read_align[IO_ALIGN_NO];
|
||||||
|
|
||||||
|
/** I/O alignment for writes */
|
||||||
|
uint64_t write_align[IO_ALIGN_NO];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief OCF core statistics
|
||||||
|
*/
|
||||||
|
struct ocf_stats_core {
|
||||||
|
/** Number of cache lines allocated in the cache for this core */
|
||||||
|
uint32_t cache_occupancy;
|
||||||
|
|
||||||
|
/** Number of dirty cache lines allocated in the cache for this core */
|
||||||
|
uint32_t dirty;
|
||||||
|
|
||||||
|
/** Read requests statistics */
|
||||||
|
struct ocf_stats_req read_reqs;
|
||||||
|
|
||||||
|
/** Write requests statistics */
|
||||||
|
struct ocf_stats_req write_reqs;
|
||||||
|
|
||||||
|
/** Block requests for cache volume statistics */
|
||||||
|
struct ocf_stats_block cache_volume;
|
||||||
|
|
||||||
|
/** Block requests for core volume statistics */
|
||||||
|
struct ocf_stats_block core_volume;
|
||||||
|
|
||||||
|
/** Block requests submitted by user to this core */
|
||||||
|
struct ocf_stats_block core;
|
||||||
|
|
||||||
|
/** Cache volume error statistics */
|
||||||
|
struct ocf_stats_error cache_errors;
|
||||||
|
|
||||||
|
/** Core volume error statistics */
|
||||||
|
struct ocf_stats_error core_errors;
|
||||||
|
|
||||||
|
/** Debug statistics */
|
||||||
|
struct ocf_stats_core_debug debug_stat;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* statistics appropriate for given io class.
|
* statistics appropriate for given io class.
|
||||||
*/
|
*/
|
||||||
@ -56,4 +182,45 @@ struct ocf_counters_core {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ocf_core_io_class_get_stats retrieve io class statistics
|
||||||
|
* for given core
|
||||||
|
*
|
||||||
|
* Retrieve buffer of cache statistics for given cache instance.
|
||||||
|
*
|
||||||
|
* @param[in] core core handle to which request pertains
|
||||||
|
* @param[in] part_id IO class, stats of which are requested
|
||||||
|
* @param[out] stats statistic structure that shall be filled as
|
||||||
|
* a result of this function invocation.
|
||||||
|
*
|
||||||
|
* @result zero upon successful completion; error code otherwise
|
||||||
|
*/
|
||||||
|
int ocf_core_io_class_get_stats(ocf_core_t core, ocf_part_id_t part_id,
|
||||||
|
struct ocf_stats_io_class *stats);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief retrieve core stats
|
||||||
|
*
|
||||||
|
* Retrieve ocf per core stats (for all IO classes together)
|
||||||
|
*
|
||||||
|
* @param[in] core core ID to which request pertains
|
||||||
|
* @param[out] stats statistics structure that shall be filled as
|
||||||
|
* a result of this function invocation.
|
||||||
|
*
|
||||||
|
* @result zero upon successful completion; error code otherwise
|
||||||
|
*/
|
||||||
|
int ocf_core_get_stats(ocf_core_t core, struct ocf_stats_core *stats);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief update DEBUG stats given IO request
|
||||||
|
*
|
||||||
|
* Function meant to update DEBUG stats for IO request.
|
||||||
|
*
|
||||||
|
* @note This function shall be invoked for each IO request processed
|
||||||
|
*
|
||||||
|
* @param[in] core to which request pertains
|
||||||
|
* @param[in] io request for which stats are being updated
|
||||||
|
*/
|
||||||
|
void ocf_core_update_stats(ocf_core_t core, struct ocf_io *io);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user