tests: fix io class tests

Signed-off-by: Kamil Gierszewski <kamil.gierszewski@huawei.com>
This commit is contained in:
Kamil Gierszewski 2024-10-01 16:07:18 +02:00
parent cf68fb226b
commit 6ce978f317
No known key found for this signature in database
2 changed files with 77 additions and 31 deletions

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2020-2022 Intel Corporation # Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -353,23 +354,38 @@ def test_ioclass_occupancy_sum_cache():
cache.purge_cache() cache.purge_cache()
with TestRun.step("Verify stats before IO"): with TestRun.step("Verify stats before IO"):
usage_stats_sum = IoClassUsageStats(Size(0), Size(0), Size(0)) usage_stats_occupancy_sum = Size.zero()
for i in io_classes: usage_stats_clean_sum = Size.zero()
usage_stats_sum += get_io_class_usage(cache, i.id) usage_stats_dirty_sum = Size.zero()
usage_stats_sum += get_io_class_usage(cache, default_ioclass_id)
cache_stats = cache.get_statistics().usage_stats all_io_class_usage_stats = []
cache_stats.free = Size(0) for i in io_classes:
io_class_usage_stats = get_io_class_usage(cache, i.id)
usage_stats_occupancy_sum += io_class_usage_stats.occupancy
usage_stats_clean_sum += io_class_usage_stats.clean
usage_stats_dirty_sum += io_class_usage_stats.dirty
all_io_class_usage_stats.append(io_class_usage_stats)
io_class_usage_stats = get_io_class_usage(cache, default_ioclass_id)
usage_stats_occupancy_sum += io_class_usage_stats.occupancy
usage_stats_clean_sum += io_class_usage_stats.clean
usage_stats_dirty_sum += io_class_usage_stats.dirty
cache_usage_stats = cache.get_statistics().usage_stats
cache_usage_stats.free = Size.zero()
if ( if (
cache_stats.occupancy != usage_stats_sum.occupancy cache_usage_stats.occupancy != usage_stats_occupancy_sum
or cache_stats.clean != usage_stats_sum.clean or cache_usage_stats.clean != usage_stats_clean_sum
or cache_stats.dirty != usage_stats_sum.dirty or cache_usage_stats.dirty != usage_stats_dirty_sum
): ):
TestRun.LOGGER.error( TestRun.LOGGER.error(
"Initial cache usage stats doesn't match sum of ioclasses stats\n" "Initial cache usage stats doesn't match sum of io classes stats\n"
f"cache stats: {cache_stats}, sumed up stats {usage_stats_sum}\n" f"Cache usage stats: {cache_usage_stats}\n"
f"particular stats {[get_io_class_usage(cache, i.id) for i in io_classes]}" f"Usage stats occupancy sum: {usage_stats_occupancy_sum}\n"
f"Usage stats clean sum: {usage_stats_clean_sum}\n"
f"Usage stats dirty sum: {usage_stats_dirty_sum}\n"
f"Particular stats {all_io_class_usage_stats}"
) )
with TestRun.step(f"Trigger IO to each directory"): with TestRun.step(f"Trigger IO to each directory"):
@ -380,23 +396,38 @@ def test_ioclass_occupancy_sum_cache():
) )
with TestRun.step("Verify stats after IO"): with TestRun.step("Verify stats after IO"):
usage_stats_sum = IoClassUsageStats(Size(0), Size(0), Size(0)) usage_stats_occupancy_sum = Size.zero()
for i in io_classes: usage_stats_clean_sum = Size.zero()
usage_stats_sum += get_io_class_usage(cache, i.id) usage_stats_dirty_sum = Size.zero()
usage_stats_sum += get_io_class_usage(cache, default_ioclass_id)
cache_stats = cache.get_statistics().usage_stats all_io_class_usage_stats = []
cache_stats.free = Size(0) for i in io_classes:
io_class_usage_stats = get_io_class_usage(cache, i.id)
usage_stats_occupancy_sum += io_class_usage_stats.occupancy
usage_stats_clean_sum += io_class_usage_stats.clean
usage_stats_dirty_sum += io_class_usage_stats.dirty
all_io_class_usage_stats.append(io_class_usage_stats)
io_class_usage_stats = get_io_class_usage(cache, default_ioclass_id)
usage_stats_occupancy_sum += io_class_usage_stats.occupancy
usage_stats_clean_sum += io_class_usage_stats.clean
usage_stats_dirty_sum += io_class_usage_stats.dirty
cache_usage_stats = cache.get_statistics().usage_stats
cache_usage_stats.free = Size.zero()
if ( if (
cache_stats.occupancy != usage_stats_sum.occupancy cache_usage_stats.occupancy != usage_stats_occupancy_sum
or cache_stats.clean != usage_stats_sum.clean or cache_usage_stats.clean != usage_stats_clean_sum
or cache_stats.dirty != usage_stats_sum.dirty or cache_usage_stats.dirty != usage_stats_dirty_sum
): ):
TestRun.LOGGER.error( TestRun.LOGGER.error(
"Cache usage stats doesn't match sum of ioclasses stats\n" "Initial cache usage stats doesn't match sum of io classes stats\n"
f"cache stats: {cache_stats}, sumed up stats {usage_stats_sum}\n" f"Cache usage stats: {cache_usage_stats}\n"
f"particular stats {[get_io_class_usage(cache, i.id) for i in io_classes]}" f"Usage stats occupancy sum: {usage_stats_occupancy_sum}\n"
f"Usage stats clean sum: {usage_stats_clean_sum}\n"
f"Usage stats dirty sum: {usage_stats_dirty_sum}\n"
f"particular stats {all_io_class_usage_stats}"
) )

View File

@ -1,5 +1,6 @@
# #
# Copyright(c) 2020-2022 Intel Corporation # Copyright(c) 2020-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies Co., Ltd.
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
# #
@ -103,18 +104,32 @@ def get_io_class_usage(cache, io_class_id):
def verify_ioclass_usage_stats(cache, ioclasses_ids): def verify_ioclass_usage_stats(cache, ioclasses_ids):
cache_size = cache.get_statistics().config_stats.cache_size cache_size = cache.get_statistics().config_stats.cache_size
usage_stats_sum = IoClassUsageStats(Size(0), Size(0), Size(0)) usage_stats_occupancy_sum = Size.zero()
usage_stats_clean_sum = Size.zero()
usage_stats_dirty_sum = Size.zero()
all_io_class_usage_stats = []
for i in ioclasses_ids: for i in ioclasses_ids:
usage_stats_sum += get_io_class_usage(cache, i) io_class_usage_stats = get_io_class_usage(cache, i)
usage_stats_occupancy_sum += io_class_usage_stats.occupancy
usage_stats_clean_sum += io_class_usage_stats.clean
usage_stats_dirty_sum += io_class_usage_stats.dirty
all_io_class_usage_stats.append(io_class_usage_stats)
cache_usage_stats = cache.get_statistics().usage_stats cache_usage_stats = cache.get_statistics().usage_stats
if usage_stats_sum != cache_usage_stats: if (
cache_usage_stats.occupancy != usage_stats_occupancy_sum
or cache_usage_stats.clean != usage_stats_clean_sum
or cache_usage_stats.dirty != usage_stats_dirty_sum
):
TestRun.LOGGER.error( TestRun.LOGGER.error(
"Sum of io classes usage stats doesn't match cache usage stats!" "Sum of io classes usage stats doesn't match cache usage stats!\n"
f" Cache stats:\n{cache_usage_stats} io classes sum:\n{usage_stats_sum}" f"Cache usage stats: {cache_usage_stats}\n"
f" Stats of particular io classes:\n" f"Usage stats occupancy sum: {usage_stats_occupancy_sum}\n"
f"{[get_io_class_usage(cache, i) for i in ioclasses_ids]}" f"Usage stats clean sum: {usage_stats_clean_sum}\n"
f"Usage stats dirty sum: {usage_stats_dirty_sum}\n"
f"{all_io_class_usage_stats}"
) )
if cache_usage_stats.occupancy + cache_usage_stats.free > cache_size: if cache_usage_stats.occupancy + cache_usage_stats.free > cache_size: