[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 19/35] /perf/lifecycle
From: |
Paolo Bonzini |
Subject: |
[PATCH 19/35] /perf/lifecycle |
Date: |
Thu, 10 Mar 2022 13:43:57 +0100 |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
tests/unit/test-coroutine.c | 44 ++++++++++++++++++++++++++++++++-----
1 file changed, 39 insertions(+), 5 deletions(-)
diff --git a/tests/unit/test-coroutine.c b/tests/unit/test-coroutine.c
index 3d898d50c6..439bd269c9 100644
--- a/tests/unit/test-coroutine.c
+++ b/tests/unit/test-coroutine.c
@@ -556,14 +556,21 @@ static void test_order(void)
g_assert_cmpint(records[i].state, ==, expected_pos[i].state);
}
}
-#if 0
+
/*
* Lifecycle benchmark
*/
-static void coroutine_fn empty_coroutine(void *opaque)
+CO_DECLARE_FRAME(empty_coroutine);
+static CoroutineAction co__empty_coroutine(void *_frame)
{
- /* Do nothing */
+ struct FRAME__empty_coroutine *_f = _frame;
+ return stack_free(&_f->common);
+}
+
+static CoroutineAction empty_coroutine(void *opaque)
+{
+ return CO_INIT_FRAME(empty_coroutine);
}
static void perf_lifecycle(void)
@@ -572,7 +579,7 @@ static void perf_lifecycle(void)
unsigned int i, max;
double duration;
- max = 1000000;
+ max = 10000000;
g_test_timer_start();
for (i = 0; i < max; i++) {
@@ -584,6 +591,30 @@ static void perf_lifecycle(void)
g_test_message("Lifecycle %u iterations: %f s", max, duration);
}
+static CoroutineAction empty_coroutine_noalloc(void *opaque)
+{
+ return COROUTINE_CONTINUE;
+}
+
+static void perf_lifecycle_noalloc(void)
+{
+ Coroutine *coroutine;
+ unsigned int i, max;
+ double duration;
+
+ max = 10000000;
+
+ g_test_timer_start();
+ for (i = 0; i < max; i++) {
+ coroutine = qemu_coroutine_create(empty_coroutine_noalloc, NULL);
+ qemu_coroutine_enter(coroutine);
+ }
+ duration = g_test_timer_elapsed();
+
+ g_test_message("Lifecycle %u iterations: %f s", max, duration);
+}
+
+#if 0
static void perf_nesting(void)
{
unsigned int i, maxcycles, maxnesting;
@@ -719,13 +750,16 @@ int main(int argc, char **argv)
g_test_add_func("/locking/co-mutex/lockable", test_co_mutex_lockable);
g_test_add_func("/locking/co-rwlock/upgrade", test_co_rwlock_upgrade);
g_test_add_func("/locking/co-rwlock/downgrade", test_co_rwlock_downgrade);
+#endif
if (g_test_perf()) {
g_test_add_func("/perf/lifecycle", perf_lifecycle);
+ g_test_add_func("/perf/lifecycle/noalloc", perf_lifecycle_noalloc);
+#if 0
g_test_add_func("/perf/nesting", perf_nesting);
g_test_add_func("/perf/yield", perf_yield);
g_test_add_func("/perf/function-call", perf_baseline);
g_test_add_func("/perf/cost", perf_cost);
- }
#endif
+ }
return g_test_run();
}
--
2.35.1
- [PATCH 26/35] convert qemu_co_mutex_lock_slowpath to magic macros, (continued)
- [PATCH 26/35] convert qemu_co_mutex_lock_slowpath to magic macros, Paolo Bonzini, 2022/03/10
- [PATCH 11/35] convert CoMutex to stackless coroutines, Paolo Bonzini, 2022/03/10
- [PATCH 13/35] /basic/yield, Paolo Bonzini, 2022/03/10
- [PATCH 10/35] enable tail call optimization of qemu_co_mutex_lock, Paolo Bonzini, 2022/03/10
- [PATCH 20/35] /perf/nesting, Paolo Bonzini, 2022/03/10
- [PATCH 18/35] /basic/order, Paolo Bonzini, 2022/03/10
- [PATCH 27/35] /locking/co-mutex/lockable, Paolo Bonzini, 2022/03/10
- [PATCH 23/35] /perf/cost, Paolo Bonzini, 2022/03/10
- [PATCH 12/35] define magic macros for stackless coroutines, Paolo Bonzini, 2022/03/10
- [PATCH 15/35] /basic/self, Paolo Bonzini, 2022/03/10
- [PATCH 19/35] /perf/lifecycle,
Paolo Bonzini <=
- [PATCH 22/35] /perf/function-call, Paolo Bonzini, 2022/03/10
- [PATCH 24/35] /basic/no-dangling-access, Paolo Bonzini, 2022/03/10
- [PATCH 25/35] /locking/co-mutex, Paolo Bonzini, 2022/03/10
- [PATCH 28/35] qemu_co_rwlock_maybe_wake_one, Paolo Bonzini, 2022/03/10
- [PATCH 29/35] qemu_co_rwlock_rdlock, Paolo Bonzini, 2022/03/10
- [PATCH 30/35] qemu_co_rwlock_unlock, Paolo Bonzini, 2022/03/10
- [PATCH 31/35] qemu_co_rwlock_downgrade, Paolo Bonzini, 2022/03/10
- [PATCH 32/35] qemu_co_rwlock_wrlock, Paolo Bonzini, 2022/03/10
- [PATCH 34/35] /locking/co-rwlock/upgrade, Paolo Bonzini, 2022/03/10
- [PATCH 35/35] /locking/co-rwlock/downgrade, Paolo Bonzini, 2022/03/10