pyocf: extend metadata helpers

Signed-off-by: Jan Musial <jan.musial@intel.com>
This commit is contained in:
Jan Musial 2022-04-05 10:48:58 +02:00
parent 6193530415
commit 3f777ea1cf
4 changed files with 71 additions and 19 deletions

View File

@ -9,19 +9,50 @@
#include "../src/ocf/metadata/metadata_raw.h"
#include "../src/ocf/metadata/metadata_internal.h"
// get collision metadata segment start and size (excluding padding)
uint64_t ocf_get_collision_start_page_helper(ocf_cache_t cache)
uint64_t ocf_get_metadata_segment_start_page(ocf_cache_t cache, int segment)
{
struct ocf_metadata_ctrl *ctrl = cache->metadata.priv;
struct ocf_metadata_raw *raw = &ctrl->raw_desc[metadata_segment_collision];
struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment];
return raw->ssd_pages_offset;
}
uint64_t ocf_get_collision_page_count_helper(ocf_cache_t cache)
uint64_t ocf_get_metadata_segment_page_count(ocf_cache_t cache, int segment)
{
struct ocf_metadata_ctrl *ctrl = cache->metadata.priv;
struct ocf_metadata_raw *raw = &ctrl->raw_desc[metadata_segment_collision];
struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment];
return raw->ssd_pages;
}
uint64_t ocf_get_metadata_segment_elems_count(ocf_cache_t cache, int segment)
{
struct ocf_metadata_ctrl *ctrl = cache->metadata.priv;
struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment];
return raw->entries;
}
uint64_t ocf_get_metadata_segment_elems_per_page(ocf_cache_t cache, int segment)
{
struct ocf_metadata_ctrl *ctrl = cache->metadata.priv;
struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment];
return raw->entries_in_page;
}
uint64_t ocf_get_metadata_segment_elem_size(ocf_cache_t cache, int segment)
{
struct ocf_metadata_ctrl *ctrl = cache->metadata.priv;
struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment];
return raw->entry_size;
}
bool ocf_get_metadata_segment_is_flapped(ocf_cache_t cache, int segment)
{
struct ocf_metadata_ctrl *ctrl = cache->metadata.priv;
struct ocf_metadata_raw *raw = &ctrl->raw_desc[segment];
return raw->flapping;
}

View File

@ -1,9 +1,13 @@
/*
* Copyright(c) 2022-2022 Intel Corporation
* Copyright(c) 2022 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
#pragma once
uint64_t ocf_get_collision_start_page_helper(ocf_cache_t cache);
uint64_t ocf_get_collision_page_count_helper(ocf_cache_t cache);
uint64_t ocf_get_metadata_segment_start_page(ocf_cache_t cache, int segment);
uint64_t ocf_get_metadata_segment_page_count(ocf_cache_t cache, int segment);
uint64_t ocf_get_metadata_segment_elems_count(ocf_cache_t cache, int segment);
uint64_t ocf_get_metadata_segment_elems_per_page(ocf_cache_t cache, int segment);
uint64_t ocf_get_metadata_segment_elem_size(ocf_cache_t cache, int segment);
bool ocf_get_metadata_segment_is_flapped(ocf_cache_t cache, int segment);

View File

@ -6,11 +6,31 @@
from .ocf import OcfLib
def get_collision_segment_page_location(cache):
def get_metadata_segment_page_location(cache, segment):
lib = OcfLib.getInstance()
return int(lib.ocf_get_collision_start_page_helper(cache))
return int(lib.ocf_get_metadata_segment_start_page(cache, segment))
def get_collision_segment_size(cache):
def get_metadata_segment_size(cache, segment):
lib = OcfLib.getInstance()
return int(lib.ocf_get_collision_page_count_helper(cache))
return int(lib.ocf_get_metadata_segment_page_count(cache, segment))
def get_metadata_segment_elems_count(cache, segment):
lib = OcfLib.getInstance()
return int(lib.ocf_get_metadata_segment_elems_count(cache, segment))
def get_metadata_segment_elems_per_page(cache, segment):
lib = OcfLib.getInstance()
return int(lib.ocf_get_metadata_segment_elems_per_page(cache, segment))
def get_metadata_segment_elem_size(cache, segment):
lib = OcfLib.getInstance()
return int(lib.ocf_get_metadata_segment_elem_size(cache, segment))
def get_metadata_segment_is_flapped(cache, segment):
lib = OcfLib.getInstance()
return bool(lib.ocf_get_metadata_segment_is_flapped(cache, segment))

View File

@ -8,16 +8,13 @@ from datetime import timedelta
from pyocf.types.volume import RamVolume
from pyocf.types.volume_cache import CacheVolume
from pyocf.types.cache import Cache
from pyocf.types.cache import Cache, CacheMetadataSegment
from pyocf.types.queue import Queue
from pyocf.utils import Size
from pyocf.types.shared import CacheLineSize
from pyocf.types.ctx import OcfCtx
from pyocf.rio import Rio, ReadWrite
from pyocf.helpers import (
get_collision_segment_page_location,
get_collision_segment_size,
)
from pyocf.helpers import get_metadata_segment_page_location, get_metadata_segment_size
@pytest.mark.parametrize("cacheline_size", CacheLineSize)
@ -71,8 +68,8 @@ def test_test_standby_io_metadata(pyocf_ctx, cacheline_size):
cache.standby_attach(cache_vol)
start = get_collision_segment_page_location(cache)
count = get_collision_segment_size(cache)
start = get_metadata_segment_page_location(cache, CacheMetadataSegment.COLLISION)
count = get_metadata_segment_size(cache, CacheMetadataSegment.COLLISION)
io_offset = Size.from_page(start)
io_size = Size.from_page(count)