diff options
author | Alberto Garcia <berto@igalia.com> | 2016-02-18 12:27:06 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2016-02-22 14:08:06 +0100 |
commit | f9d058852c9f28d378f003ad94cc881fd91ea385 (patch) | |
tree | ac460f99442b851150b3fe22cb2d80089ff76372 /tests/test-throttle.c | |
parent | eb8a1a1cbda15d776d6d505f14f61c7852f6a51a (diff) |
throttle: Test throttle_compute_wait() during bursts
This test simulates an I/O burst for more than two seconds and checks
that it works as expected.
Signed-off-by: Alberto Garcia <berto@igalia.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'tests/test-throttle.c')
-rw-r--r-- | tests/test-throttle.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/test-throttle.c b/tests/test-throttle.c index 145ba085f2..59675fa57b 100644 --- a/tests/test-throttle.c +++ b/tests/test-throttle.c @@ -80,6 +80,7 @@ static void test_leak_bucket(void) static void test_compute_wait(void) { + unsigned i; int64_t wait; int64_t result; @@ -115,6 +116,27 @@ static void test_compute_wait(void) /* time required to do half an operation */ result = (int64_t) NANOSECONDS_PER_SECOND / 150 / 2; g_assert(wait == result); + + /* Perform I/O for 2.2 seconds at a rate of bkt.max */ + bkt.burst_length = 2; + bkt.level = 0; + bkt.avg = 10; + bkt.max = 200; + for (i = 0; i < 22; i++) { + double units = bkt.max / 10; + bkt.level += units; + bkt.burst_level += units; + throttle_leak_bucket(&bkt, NANOSECONDS_PER_SECOND / 10); + wait = throttle_compute_wait(&bkt); + g_assert(double_cmp(bkt.burst_level, 0)); + g_assert(double_cmp(bkt.level, (i + 1) * (bkt.max - bkt.avg) / 10)); + /* We can do bursts for the 2 seconds we have configured in + * burst_length. We have 100 extra miliseconds of burst + * because bkt.level has been leaking during this time. + * After that, we have to wait. */ + result = i < 21 ? 0 : 1.8 * NANOSECONDS_PER_SECOND; + g_assert(wait == result); + } } /* functions to test ThrottleState initialization/destroy methods */ |