Merge pull request #260 from mmichal10/unify-inactive-cores-stats

Unify inactive cores stats
This commit is contained in:
Jan Musiał
2019-09-16 09:03:08 +02:00
committed by GitHub
6 changed files with 83 additions and 47 deletions

View File

@@ -11,6 +11,7 @@
#include "utils/utils_part.h"
#include "ocf_priv.h"
#include "ocf_cache_priv.h"
#include "utils/utils_stats.h"
ocf_volume_t ocf_cache_get_volume(ocf_cache_t cache)
{
@@ -84,6 +85,8 @@ int ocf_cache_get_info(ocf_cache_t cache, struct ocf_cache_info *info)
ENV_BUG_ON(env_memset(info, sizeof(*info), 0));
_ocf_stats_zero(&info->inactive);
info->attached = ocf_cache_is_device_attached(cache);
if (info->attached) {
info->volume_type = ocf_ctx_get_volume_type_id(cache->owner,
@@ -145,8 +148,20 @@ int ocf_cache_get_info(ocf_cache_t cache, struct ocf_cache_info *info)
cache->device->metadata_offset / PAGE_SIZE : 0;
info->state = cache->cache_state;
info->inactive.occupancy = cache_occupancy_inactive;
info->inactive.dirty = dirty_blocks_inactive;
if (info->attached) {
_set(&info->inactive.occupancy,
_lines4k(cache_occupancy_inactive, ocf_line_size(cache)),
_lines4k(info->size, ocf_line_size(cache)));
_set(&info->inactive.clean,
_lines4k(cache_occupancy_inactive - dirty_blocks_inactive,
ocf_line_size(cache)),
_lines4k(cache_occupancy_total, ocf_line_size(cache)));
_set(&info->inactive.dirty,
_lines4k(dirty_blocks_inactive, ocf_line_size(cache)),
_lines4k(cache_occupancy_total, ocf_line_size(cache)));
}
info->flushed = (env_atomic_read(&cache->flush_in_progress)) ?
flushed_total : 0;

View File

@@ -9,46 +9,7 @@
#include "engine/cache_engine.h"
#include "utils/utils_part.h"
#include "utils/utils_cache_line.h"
#define _ocf_stats_zero(stats) \
do { \
if (stats) { \
typeof(*stats) zero = { { 0 } }; \
*stats = zero; \
} \
} while (0)
static uint64_t _fraction(uint64_t numerator, uint64_t denominator)
{
uint64_t result;
if (denominator) {
result = 10000 * numerator / denominator;
} else {
result = 0;
}
return result;
}
static uint64_t _lines4k(uint64_t size,
ocf_cache_line_size_t cache_line_size)
{
long unsigned int result;
result = size * (cache_line_size / 4096);
return result;
}
static uint64_t _bytes4k(uint64_t bytes)
{
return (bytes + 4095UL) >> 12;
}
static void _set(struct ocf_stat *stat, uint64_t value, uint64_t denominator)
{
stat->value = value;
stat->fraction = _fraction(value, denominator);
}
#include "utils/utils_stats.h"
static void _fill_req(struct ocf_stats_requests *req, struct ocf_stats_core *s)
{

50
src/utils/utils_stats.h Normal file
View File

@@ -0,0 +1,50 @@
/*
* Copyright(c) 2012-2019 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#ifndef UTILS_STATS_H_
#define UTILS_STATS_H_
#define _ocf_stats_zero(stats) \
do { \
if (stats) { \
typeof(*stats) zero = { { 0 } }; \
*stats = zero; \
} \
} while (0)
static inline uint64_t _fraction(uint64_t numerator, uint64_t denominator)
{
uint64_t result;
if (denominator) {
result = 10000 * numerator / denominator;
} else {
result = 0;
}
return result;
}
static inline uint64_t _lines4k(uint64_t size,
ocf_cache_line_size_t cache_line_size)
{
long unsigned int result;
result = size * (cache_line_size / 4096);
return result;
}
static inline uint64_t _bytes4k(uint64_t bytes)
{
return (bytes + 4095UL) >> 12;
}
static inline void _set(struct ocf_stat *stat, uint64_t value,
uint64_t denominator)
{
stat->value = value;
stat->fraction = _fraction(value, denominator);
}
#endif