Merge pull request #723 from jfckm/standby-io-tests

Tests for standby I/O
This commit is contained in:
Michał Mielewczyk
2022-06-02 09:17:43 +02:00
committed by GitHub
3 changed files with 102 additions and 4 deletions

View File

@@ -0,0 +1,94 @@
#
# Copyright(c) 2022 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause
#
import pytest
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.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,
)
@pytest.mark.parametrize("cacheline_size", CacheLineSize)
def test_test_standby_io(pyocf_ctx, cacheline_size):
num_jobs = 8
qd = 16
runtime = 5
vol_size = Size.from_MiB(100)
cache_vol = RamVolume(vol_size)
cache = Cache(owner=OcfCtx.get_default(), cache_line_size=cacheline_size)
cache.start_cache(init_default_io_queue=False)
for i in range(num_jobs):
cache.add_io_queue(f"io-queue-{i}")
cache.standby_attach(cache_vol)
r = (
Rio()
.target(cache)
.njobs(num_jobs)
.readwrite(ReadWrite.RANDWRITE)
.size(vol_size)
.io_size(Size.from_GiB(100))
.bs(Size.from_KiB(4))
.qd(qd)
.time(timedelta(seconds=runtime))
.time_based()
.run(cache.io_queues)
)
@pytest.mark.parametrize("cacheline_size", CacheLineSize)
def test_test_standby_io_metadata(pyocf_ctx, cacheline_size):
num_jobs = 8
qd = 16
runtime = 10
vol_size = Size.from_MiB(200)
cache_vol = RamVolume(vol_size)
cache = Cache(owner=OcfCtx.get_default(), cache_line_size=cacheline_size)
cache.start_cache(init_default_io_queue=False)
for i in range(num_jobs):
cache.add_io_queue(f"io-queue-{i}")
cache.standby_attach(cache_vol)
start = get_collision_segment_page_location(cache)
count = get_collision_segment_size(cache)
io_offset = Size.from_page(start)
io_size = Size.from_page(count)
cache_vol = CacheVolume(cache, open=True)
r = (
Rio()
.target(cache_vol)
.njobs(num_jobs)
.readwrite(ReadWrite.RANDWRITE)
.size(io_offset + io_size)
.bs(Size.from_KiB(16))
.offset(io_offset)
.qd(qd)
.time(timedelta(seconds=runtime))
.time_based()
.norandommap()
.run(cache.io_queues)
)