tests: common helpers for ioclass tests

Signed-off-by: Michal Mielewczyk <michal.mielewczyk@intel.com>
This commit is contained in:
Michal Mielewczyk 2020-11-20 09:00:06 -05:00
parent 7cd37e45a9
commit 4270593e7b

View File

@ -3,18 +3,25 @@
# SPDX-License-Identifier: BSD-3-Clause-Clear # SPDX-License-Identifier: BSD-3-Clause-Clear
# #
from datetime import timedelta
from api.cas import casadm from api.cas import casadm
from api.cas import ioclass_config from api.cas import ioclass_config
from api.cas.cache_config import ( from api.cas.cache_config import (
CacheLineSize,
CacheMode, CacheMode,
CleaningPolicy, CleaningPolicy,
SeqCutOffPolicy, SeqCutOffPolicy,
CacheLineSize,
) )
from core.test_run import TestRun from core.test_run import TestRun
from test_utils.os_utils import Udev from test_tools.dd import Dd
from test_tools.fio.fio import Fio
from test_tools.fio.fio_param import ReadWrite, IoEngine
from test_utils.os_utils import Udev, sync
from test_utils.os_utils import drop_caches, DropCachesMode
from test_utils.size import Size, Unit from test_utils.size import Size, Unit
ioclass_config_path = "/tmp/opencas_ioclass.conf" ioclass_config_path = "/tmp/opencas_ioclass.conf"
mountpoint = "/tmp/cas1-1" mountpoint = "/tmp/cas1-1"
@ -65,3 +72,53 @@ def prepare(
raise Exception(f"Failed to create mountpoint") raise Exception(f"Failed to create mountpoint")
return cache, core return cache, core
def get_io_class_occupancy(cache, io_class_id, percent=False):
return get_io_class_usage(cache, io_class_id, percent).occupancy
def get_io_class_dirty(cache, io_class_id):
return get_io_class_usage(cache, io_class_id).dirty
def get_io_class_usage(cache, io_class_id, percent=False):
return cache.get_io_class_statistics(
io_class_id=io_class_id, percentage_val=percent
).usage_stats
def run_io_dir(path, size_4k):
dd = (
Dd()
.input("/dev/zero")
.output(f"{path}")
.count(size_4k)
.block_size(Size(1, Unit.Blocks4096))
)
TestRun.LOGGER.info(f"{dd}")
dd.run()
sync()
drop_caches(DropCachesMode.ALL)
def run_io_dir_read(path):
dd = Dd().output("/dev/null").input(f"{path}")
dd.run()
sync()
drop_caches(DropCachesMode.ALL)
def run_fio_count(core, blocksize, num_ios):
(
Fio()
.create_command()
.target(core)
.io_engine(IoEngine.libaio)
.read_write(ReadWrite.randread)
.block_size(blocksize)
.direct()
.file_size(Size(10, Unit.GibiByte))
.num_ios(num_ios)
.run()
)