Merge pull request #97 from mmichal10/stats-refactor

Stats refactor
This commit is contained in:
Michał Mielewczyk 2019-09-17 09:26:27 +02:00 committed by GitHub
commit 213b8bcaac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 398 additions and 853 deletions

View File

@ -2028,7 +2028,7 @@ int partition_list(unsigned int cache_id, unsigned int output_format)
io_class.cache_id = cache_id;
io_class.class_id = i;
result = run_ioctl(fd, KCAS_IOCTL_PARTITION_STATS, &io_class);
result = run_ioctl(fd, KCAS_IOCTL_PARTITION_INFO, &io_class);
if (result) {
if (OCF_ERR_IO_CLASS_NOT_EXIST == io_class.ext_err_code) {
result = SUCCESS;
@ -2683,11 +2683,11 @@ int list_caches(unsigned int list_format)
curr_core = &curr_cache->cores[j];
core_path = curr_core->path;
core_flush_prog = calculate_flush_progress(curr_core->info.stats.dirty,
curr_core->info.stats.flushed);
core_flush_prog = calculate_flush_progress(curr_core->info.info.dirty,
curr_core->info.info.flushed);
if (!core_flush_prog && cache_flush_prog) {
core_flush_prog = curr_core->info.stats.dirty ? 0 : 100;
core_flush_prog = curr_core->info.info.dirty ? 0 : 100;
}
if (core_flush_prog || cache_flush_prog) {

View File

@ -295,8 +295,8 @@ void get_core_flush_progress(int fd, int cache_id, int core_id, float *prog)
cmd_info.core_id = core_id;
if (0 == ioctl(fd, KCAS_IOCTL_CORE_INFO, &cmd_info)) {
*prog = calculate_flush_progress(cmd_info.stats.dirty,
cmd_info.stats.flushed);
*prog = calculate_flush_progress(cmd_info.info.dirty,
cmd_info.info.flushed);
}
}

View File

@ -70,7 +70,7 @@ static struct command_args command_args_values = {
.cache_mode = ocf_cache_mode_default,
.stats_filters = STATS_FILTER_DEFAULT,
.output_format = OUTPUT_FORMAT_DEFAULT,
.io_class_id = -1,
.io_class_id = OCF_IO_CLASS_INVALID,
.line_size = ocf_cache_line_size_default,
.cache_state_flush = UNDEFINED, /* three state logic: YES NO UNDEFINED */
.flush_data = 1,

File diff suppressed because it is too large Load Diff

View File

@ -1753,6 +1753,58 @@ int cache_mngt_interrupt_flushing(const char *cache_name)
}
int cache_mngt_get_stats(struct kcas_get_stats *stats)
{
int result;
ocf_cache_t cache;
ocf_core_t core = NULL;
result = mngt_get_cache_by_id(cas_ctx, stats->cache_id, &cache);
if (result)
return result;
result = _cache_mngt_read_lock_sync(cache);
if (result)
goto put;
if (stats->core_id == OCF_CORE_ID_INVALID &&
stats->part_id == OCF_IO_CLASS_INVALID) {
result = ocf_stats_collect_cache(cache, &stats->usage, &stats->req,
&stats->blocks, &stats->errors);
if (result)
goto unlock;
} else if (stats->part_id == OCF_IO_CLASS_INVALID) {
result = get_core_by_id(cache, stats->core_id, &core);
if (result)
goto unlock;
result = ocf_stats_collect_core(core, &stats->usage, &stats->req,
&stats->blocks, &stats->errors);
if (result)
goto unlock;
} else {
if (stats->core_id == OCF_CORE_ID_INVALID) {
result = ocf_stats_collect_part_cache(cache, stats->part_id,
&stats->usage, &stats->req, &stats->blocks);
} else {
result = get_core_by_id(cache, stats->core_id, &core);
if (result)
goto unlock;
result = ocf_stats_collect_part_core(core, stats->part_id,
&stats->usage, &stats->req, &stats->blocks);
}
}
unlock:
ocf_mngt_cache_read_unlock(cache);
put:
ocf_mngt_cache_put(cache);
return result;
}
int cache_mngt_get_info(struct kcas_cache_info *info)
{
uint32_t i, j;
@ -1813,10 +1865,8 @@ int cache_mngt_get_io_class_info(struct kcas_io_class *part)
{
int result;
uint16_t cache_id = part->cache_id;
uint16_t core_id = part->core_id;
uint32_t io_class_id = part->class_id;
ocf_cache_t cache;
ocf_core_t core;
result = mngt_get_cache_by_id(cas_ctx, cache_id, &cache);
if (result)
@ -1832,17 +1882,6 @@ int cache_mngt_get_io_class_info(struct kcas_io_class *part)
if (result)
goto end;
if (part->get_stats) {
result = get_core_by_id(cache, core_id, &core);
if (result < 0) {
result = OCF_ERR_CORE_NOT_AVAIL;
goto end;
}
result = ocf_core_io_class_get_stats(core, io_class_id,
&part->stats);
}
end:
ocf_mngt_cache_read_unlock(cache);
ocf_mngt_cache_put(cache);
@ -1870,7 +1909,7 @@ int cache_mngt_get_core_info(struct kcas_core_info *info)
goto unlock;
}
result = ocf_core_get_stats(core, &info->stats);
result = ocf_core_get_info(core, &info->info);
if (result)
goto unlock;

View File

@ -73,6 +73,8 @@ int cache_mngt_list_caches(struct kcas_cache_list *list);
int cache_mngt_interrupt_flushing(const char *cache_name);
int cache_mngt_get_stats(struct kcas_get_stats *stats);
int cache_mngt_get_info(struct kcas_cache_info *info);
int cache_mngt_get_io_class_info(struct kcas_io_class *part);

View File

@ -51,7 +51,7 @@ long cas_service_ioctl_ctrl(struct file *filp, unsigned int cmd,
cmd != KCAS_IOCTL_LIST_CACHE &&
cmd != KCAS_IOCTL_GET_CACHE_COUNT &&
cmd != KCAS_IOCTL_CORE_INFO &&
cmd != KCAS_IOCTL_PARTITION_STATS &&
cmd != KCAS_IOCTL_PARTITION_INFO &&
cmd != KCAS_IOCTL_GET_CAPABILITIES) {
return -EFAULT;
}
@ -193,6 +193,16 @@ long cas_service_ioctl_ctrl(struct file *filp, unsigned int cmd,
RETURN_CMD_RESULT(cmd_info, arg, retval);
}
case KCAS_IOCTL_GET_STATS: {
struct kcas_get_stats *cmd_info;
GET_CMD_INFO(cmd_info, arg);
retval = cache_mngt_get_stats(cmd_info);
RETURN_CMD_RESULT(cmd_info, arg, retval);
}
case KCAS_IOCTL_CACHE_INFO: {
struct kcas_cache_info *cmd_info;
@ -213,7 +223,7 @@ long cas_service_ioctl_ctrl(struct file *filp, unsigned int cmd,
RETURN_CMD_RESULT(cmd_info, arg, retval);
}
case KCAS_IOCTL_PARTITION_STATS: {
case KCAS_IOCTL_PARTITION_INFO: {
struct kcas_io_class *cmd_info;
GET_CMD_INFO(cmd_info, arg);

View File

@ -157,6 +157,28 @@ struct kcas_flush_core {
int ext_err_code;
};
struct kcas_get_stats {
/** id of a cache */
uint16_t cache_id;
/** id of a core */
uint16_t core_id;
/** id of an ioclass */
uint16_t part_id;
/** fields to be filled with statistics */
struct ocf_stats_usage usage;
struct ocf_stats_requests req;
struct ocf_stats_blocks blocks;
struct ocf_stats_errors errors;
int ext_err_code;
};
struct kcas_cache_info {
/** id of a cache */
uint16_t cache_id;
@ -186,8 +208,7 @@ struct kcas_core_info {
/** Core id */
uint16_t core_id;
/** CAS statistics of core */
struct ocf_stats_core stats;
struct ocf_core_info info;
ocf_core_state_t state;
@ -225,21 +246,12 @@ struct kcas_io_class {
/** Cache ID */
uint16_t cache_id;
/** Core ID */
uint16_t core_id;
/** IO class id for which info will be retrieved */
uint32_t class_id;
/** IO class info */
struct ocf_io_class_info info;
/** Flag indicating if partition counters should be fetched. */
uint8_t get_stats;
/** IO class statistics */
struct ocf_stats_io_class stats;
int ext_err_code;
};
@ -385,7 +397,7 @@ struct kcas_get_cache_param {
* 11 * KCAS_IOCTL_FLUSH_CORE * OK *
* 12 * KCAS_IOCTL_CACHE_INFO * DEPRECATED *
* 13 * KCAS_IOCTL_CORE_INFO * DEPRECATED *
* 14 * KCAS_IOCTL_PARTITION_STATS * OK *
* 14 * KCAS_IOCTL_PARTITION_INFO * OK *
* 15 * KCAS_IOCTL_PARTITION_SET * OK *
* 16 * KCAS_IOCTL_GET_CACHE_COUNT * OK *
* 17 * KCAS_IOCTL_LIST_CACHE * OK *
@ -405,6 +417,7 @@ struct kcas_get_cache_param {
* 31 * KCAS_IOCTL_GET_CORE_PARAM * OK *
* 32 * KCAS_IOCTL_SET_CACHE_PARAM * OK *
* 33 * KCAS_IOCTL_GET_CACHE_PARAM * OK *
* 34 * KCAS_IOCTL_GET_STATS * OK *
*******************************************************************************
*/
@ -433,7 +446,7 @@ struct kcas_get_cache_param {
#define KCAS_IOCTL_FLUSH_CORE _IOR(KCAS_IOCTL_MAGIC, 11, struct kcas_flush_core)
/** Retrieving partition status for specified cache id and partition id */
#define KCAS_IOCTL_PARTITION_STATS _IOWR(KCAS_IOCTL_MAGIC, 14, struct kcas_io_class)
#define KCAS_IOCTL_PARTITION_INFO _IOWR(KCAS_IOCTL_MAGIC, 14, struct kcas_io_class)
/** Configure partitions for specified cache id */
#define KCAS_IOCTL_PARTITION_SET _IOWR(KCAS_IOCTL_MAGIC, 15, struct kcas_io_classes)
@ -492,6 +505,9 @@ struct kcas_get_cache_param {
/** Get various cache runtime parameters */
#define KCAS_IOCTL_GET_CACHE_PARAM _IOW(KCAS_IOCTL_MAGIC, 33, struct kcas_get_cache_param)
/** Get stats of particular OCF object */
#define KCAS_IOCTL_GET_STATS _IOR(KCAS_IOCTL_MAGIC, 34, struct kcas_get_stats)
/**
* Extended kernel CAS error codes
*/

2
ocf

@ -1 +1 @@
Subproject commit 9a46c402b2e8398da7a3ee212faf041b3f01f958
Subproject commit c2da038c03693a9105bee67952614db1a5cf1a37