Added API for updating statistics.

Signed-off-by: Michal Mielewczyk <michal.mielewczyk@intel.com>
This commit is contained in:
Michal Mielewczyk 2019-09-05 05:27:03 -04:00
parent 42d6dbbf11
commit 0d4f4d3294
3 changed files with 130 additions and 3 deletions

View File

@ -5,10 +5,9 @@
/** /**
* @file * @file
* @brief OCF API for getting and reseting statistics * @brief OCF API for updating and reseting statistics
* *
* This file contains routines pertaining to retrieval and * This file contains routines pertaining to manipulation of OCF IO statistics.
* manipulation of OCF IO statistics.
*/ */
#ifndef __OCF_STATS_H__ #ifndef __OCF_STATS_H__

View File

@ -57,6 +57,119 @@ static void ocf_stats_error_init(struct ocf_counters_error *stats)
env_atomic_set(&stats->write, 0); env_atomic_set(&stats->write, 0);
} }
static void _ocf_stats_block_update(struct ocf_counters_block *counters, int dir,
uint64_t bytes)
{
switch (dir) {
case OCF_READ:
env_atomic64_add(bytes, &counters->read_bytes);
break;
case OCF_WRITE:
env_atomic64_add(bytes, &counters->write_bytes);
break;
default:
ENV_BUG();
}
}
void ocf_core_stats_vol_block_update(ocf_core_t core, ocf_part_id_t part_id,
int dir, uint64_t bytes)
{
struct ocf_counters_block *counters =
&core->counters->part_counters[part_id].blocks;
_ocf_stats_block_update(counters, dir, bytes);
}
void ocf_core_stats_cache_block_update(ocf_core_t core, ocf_part_id_t part_id,
int dir, uint64_t bytes)
{
struct ocf_counters_block *counters =
&core->counters->part_counters[part_id].cache_blocks;
_ocf_stats_block_update(counters, dir, bytes);
}
void ocf_core_stats_core_block_update(ocf_core_t core, ocf_part_id_t part_id,
int dir, uint64_t bytes)
{
struct ocf_counters_block *counters =
&core->counters->part_counters[part_id].core_blocks;
_ocf_stats_block_update(counters, dir, bytes);
}
void ocf_core_stats_request_update(ocf_core_t core, ocf_part_id_t part_id,
uint8_t dir, uint64_t hit_no, uint64_t core_line_count)
{
struct ocf_counters_req *counters;
switch (dir) {
case OCF_READ:
counters = &core->counters->part_counters[part_id].read_reqs;
break;
case OCF_WRITE:
counters = &core->counters->part_counters[part_id].write_reqs;
break;
default:
ENV_BUG();
}
env_atomic64_inc(&counters->total);
if (hit_no == 0)
env_atomic64_inc(&counters->full_miss);
else if (hit_no < core_line_count)
env_atomic64_inc(&counters->partial_miss);
}
void ocf_core_stats_request_pt_update(ocf_core_t core, ocf_part_id_t part_id,
uint8_t dir, uint64_t hit_no, uint64_t core_line_count)
{
struct ocf_counters_req *counters;
switch (dir) {
case OCF_READ:
counters = &core->counters->part_counters[part_id].read_reqs;
break;
case OCF_WRITE:
counters = &core->counters->part_counters[part_id].write_reqs;
break;
default:
ENV_BUG();
}
env_atomic64_inc(&counters->pass_through);
}
static void _ocf_core_stats_error_update(struct ocf_counters_error *counters,
uint8_t dir)
{
switch (dir) {
case OCF_READ:
env_atomic_inc(&counters->read);
break;
case OCF_WRITE:
env_atomic_inc(&counters->write);
break;
default:
ENV_BUG();
}
}
void ocf_core_stats_core_error_update(ocf_core_t core, uint8_t dir)
{
struct ocf_counters_error *counters = &core->counters->core_errors;
_ocf_core_stats_error_update(counters, dir);
}
void ocf_core_stats_cache_error_update(ocf_core_t core, uint8_t dir)
{
struct ocf_counters_error *counters = &core->counters->cache_errors;
_ocf_core_stats_error_update(counters, dir);
}
/******************************************************************** /********************************************************************
* Function that resets stats, debug and breakdown counters. * Function that resets stats, debug and breakdown counters.

View File

@ -182,6 +182,21 @@ struct ocf_counters_core {
#endif #endif
}; };
void ocf_core_stats_core_block_update(ocf_core_t core, ocf_part_id_t part_id,
int dir, uint64_t bytes);
void ocf_core_stats_cache_block_update(ocf_core_t core, ocf_part_id_t part_id,
int dir, uint64_t bytes);
void ocf_core_stats_vol_block_update(ocf_core_t core, ocf_part_id_t part_id,
int dir, uint64_t bytes);
void ocf_core_stats_request_update(ocf_core_t core, ocf_part_id_t part_id,
uint8_t dir, uint64_t hit_no, uint64_t core_line_count);
void ocf_core_stats_request_pt_update(ocf_core_t core, ocf_part_id_t part_id,
uint8_t dir, uint64_t hit_no, uint64_t core_line_count);
void ocf_core_stats_core_error_update(ocf_core_t core, uint8_t dir);
void ocf_core_stats_cache_error_update(ocf_core_t core, uint8_t dir);
/** /**
* @brief ocf_core_io_class_get_stats retrieve io class statistics * @brief ocf_core_io_class_get_stats retrieve io class statistics
* for given core * for given core