qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct
@ 2019-07-18  9:17 Yury Kotov
  2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 1/3] qemu-thread: Add qemu_cond_timedwait Yury Kotov
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Yury Kotov @ 2019-07-18  9:17 UTC (permalink / raw)
  To: Paolo Bonzini, Peter Crosthwaite, Richard Henderson,
	Juan Quintela, Dr. David Alan Gilbert, Stefan Weil
  Cc: open list:Overall, yc-core

Hi,

V3:
* Rebase fixes (migrate_set_parameter -> migrate_set_parameter_int)

V2:
* Added a test
* Fixed qemu_cond_timedwait for qsp

I wrote a test for migration auto converge and found out a strange thing:
1. Enable auto converge
2. Set max-bandwidth 1Gb/s
3. Set downtime-limit 1ms
4. Run standard test (just writes a byte per page)
5. Wait for converge
6. It's converged with 99% throttle percentage
7. The result downtime was about 300-600ms   <<<<

It's much higher than expected 1ms. I figured out that cpu_throttle_thread()
function sleeps for 100ms+ for high throttle percentage (>=95%) in VCPU thread.
And it sleeps even after a cpu kick.

Fixed it by using timedwait for ms part of sleep.
E.g timedwait(halt_cond, 1ms) + usleep(500).

Regards,
Yury

Yury Kotov (3):
  qemu-thread: Add qemu_cond_timedwait
  cpus: Fix throttling during vm_stop
  tests/migration: Add a test for auto converge

 cpus.c                   |  27 ++++++---
 include/qemu/thread.h    |  18 ++++++
 tests/migration-test.c   | 119 +++++++++++++++++++++++++++++++++++----
 util/qemu-thread-posix.c |  40 +++++++++----
 util/qemu-thread-win32.c |  16 ++++++
 util/qsp.c               |  18 ++++++
 6 files changed, 207 insertions(+), 31 deletions(-)

-- 
2.22.0



^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v3 1/3] qemu-thread: Add qemu_cond_timedwait
  2019-07-18  9:17 [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct Yury Kotov
@ 2019-07-18  9:17 ` Yury Kotov
  2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 2/3] cpus: Fix throttling during vm_stop Yury Kotov
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Yury Kotov @ 2019-07-18  9:17 UTC (permalink / raw)
  To: Paolo Bonzini, Peter Crosthwaite, Richard Henderson,
	Juan Quintela, Dr. David Alan Gilbert, Stefan Weil
  Cc: open list:Overall, yc-core

Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru>
---
 include/qemu/thread.h    | 18 ++++++++++++++++++
 util/qemu-thread-posix.c | 40 ++++++++++++++++++++++++++++------------
 util/qemu-thread-win32.c | 16 ++++++++++++++++
 util/qsp.c               | 18 ++++++++++++++++++
 4 files changed, 80 insertions(+), 12 deletions(-)

diff --git a/include/qemu/thread.h b/include/qemu/thread.h
index 55d83a907c..d0cd7b9ae0 100644
--- a/include/qemu/thread.h
+++ b/include/qemu/thread.h
@@ -34,6 +34,8 @@ typedef void (*QemuRecMutexLockFunc)(QemuRecMutex *m, const char *f, int l);
 typedef int (*QemuRecMutexTrylockFunc)(QemuRecMutex *m, const char *f, int l);
 typedef void (*QemuCondWaitFunc)(QemuCond *c, QemuMutex *m, const char *f,
                                  int l);
+typedef void (*QemuCondTimedWaitFunc)(QemuCond *c, QemuMutex *m, int ms,
+                                      const char *f, int l);
 
 extern QemuMutexLockFunc qemu_bql_mutex_lock_func;
 extern QemuMutexLockFunc qemu_mutex_lock_func;
@@ -41,6 +43,7 @@ extern QemuMutexTrylockFunc qemu_mutex_trylock_func;
 extern QemuRecMutexLockFunc qemu_rec_mutex_lock_func;
 extern QemuRecMutexTrylockFunc qemu_rec_mutex_trylock_func;
 extern QemuCondWaitFunc qemu_cond_wait_func;
+extern QemuCondTimedWaitFunc qemu_cond_timedwait_func;
 
 /* convenience macros to bypass the profiler */
 #define qemu_mutex_lock__raw(m)                         \
@@ -63,6 +66,8 @@ extern QemuCondWaitFunc qemu_cond_wait_func;
             qemu_rec_mutex_trylock_impl(m, __FILE__, __LINE__);
 #define qemu_cond_wait(c, m)                                            \
             qemu_cond_wait_impl(c, m, __FILE__, __LINE__);
+#define qemu_cond_timedwait(c, m, ms)                                   \
+            qemu_cond_wait_impl(c, m, ms, __FILE__, __LINE__);
 #else
 #define qemu_mutex_lock(m) ({                                           \
             QemuMutexLockFunc _f = atomic_read(&qemu_mutex_lock_func);  \
@@ -89,6 +94,11 @@ extern QemuCondWaitFunc qemu_cond_wait_func;
             QemuCondWaitFunc _f = atomic_read(&qemu_cond_wait_func);    \
             _f(c, m, __FILE__, __LINE__);                               \
         })
+
+#define qemu_cond_timedwait(c, m, ms) ({                                       \
+            QemuCondTimedWaitFunc _f = atomic_read(&qemu_cond_timedwait_func); \
+            _f(c, m, ms, __FILE__, __LINE__);                                  \
+        })
 #endif
 
 #define qemu_mutex_unlock(mutex) \
@@ -134,12 +144,20 @@ void qemu_cond_signal(QemuCond *cond);
 void qemu_cond_broadcast(QemuCond *cond);
 void qemu_cond_wait_impl(QemuCond *cond, QemuMutex *mutex,
                          const char *file, const int line);
+void qemu_cond_timedwait_impl(QemuCond *cond, QemuMutex *mutex, int ms,
+                              const char *file, const int line);
 
 static inline void (qemu_cond_wait)(QemuCond *cond, QemuMutex *mutex)
 {
     qemu_cond_wait(cond, mutex);
 }
 
+static inline void (qemu_cond_timedwait)(QemuCond *cond, QemuMutex *mutex,
+                                         int ms)
+{
+    qemu_cond_timedwait(cond, mutex, ms);
+}
+
 void qemu_sem_init(QemuSemaphore *sem, int init);
 void qemu_sem_post(QemuSemaphore *sem);
 void qemu_sem_wait(QemuSemaphore *sem);
diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
index 1bf5e65dea..eed777d9ec 100644
--- a/util/qemu-thread-posix.c
+++ b/util/qemu-thread-posix.c
@@ -36,6 +36,18 @@ static void error_exit(int err, const char *msg)
     abort();
 }
 
+static void compute_abs_deadline(struct timespec *ts, int ms)
+{
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    ts->tv_nsec = tv.tv_usec * 1000 + (ms % 1000) * 1000000;
+    ts->tv_sec = tv.tv_sec + ms / 1000;
+    if (ts->tv_nsec >= 1000000000) {
+        ts->tv_sec++;
+        ts->tv_nsec -= 1000000000;
+    }
+}
+
 void qemu_mutex_init(QemuMutex *mutex)
 {
     int err;
@@ -164,6 +176,22 @@ void qemu_cond_wait_impl(QemuCond *cond, QemuMutex *mutex, const char *file, con
         error_exit(err, __func__);
 }
 
+void qemu_cond_timedwait_impl(QemuCond *cond, QemuMutex *mutex, int ms,
+                              const char *file, const int line)
+{
+    int err;
+    struct timespec ts;
+
+    assert(cond->initialized);
+    trace_qemu_mutex_unlock(mutex, file, line);
+    compute_abs_deadline(&ts, ms);
+    err = pthread_cond_timedwait(&cond->cond, &mutex->lock, &ts);
+    trace_qemu_mutex_locked(mutex, file, line);
+    if (err && err != ETIMEDOUT) {
+        error_exit(err, __func__);
+    }
+}
+
 void qemu_sem_init(QemuSemaphore *sem, int init)
 {
     int rc;
@@ -238,18 +266,6 @@ void qemu_sem_post(QemuSemaphore *sem)
 #endif
 }
 
-static void compute_abs_deadline(struct timespec *ts, int ms)
-{
-    struct timeval tv;
-    gettimeofday(&tv, NULL);
-    ts->tv_nsec = tv.tv_usec * 1000 + (ms % 1000) * 1000000;
-    ts->tv_sec = tv.tv_sec + ms / 1000;
-    if (ts->tv_nsec >= 1000000000) {
-        ts->tv_sec++;
-        ts->tv_nsec -= 1000000000;
-    }
-}
-
 int qemu_sem_timedwait(QemuSemaphore *sem, int ms)
 {
     int rc;
diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c
index 572f88535d..5faa01cb61 100644
--- a/util/qemu-thread-win32.c
+++ b/util/qemu-thread-win32.c
@@ -145,6 +145,22 @@ void qemu_cond_wait_impl(QemuCond *cond, QemuMutex *mutex, const char *file, con
     qemu_mutex_post_lock(mutex, file, line);
 }
 
+void qemu_cond_timedwait_impl(QemuCond *cond, QemuMutex *mutex, int ms,
+                              const char *file, const int line)
+{
+    int rc = 0;
+
+    assert(cond->initialized);
+    trace_qemu_mutex_unlock(mutex, file, line);
+    if (!SleepConditionVariableSRW(&cond->var, &mutex->lock, ms, 0)) {
+        rc = GetLastError();
+    }
+    trace_qemu_mutex_locked(mutex, file, line);
+    if (rc && rc != ERROR_TIMEOUT) {
+        error_exit(rc, __func__);
+    }
+}
+
 void qemu_sem_init(QemuSemaphore *sem, int init)
 {
     /* Manual reset.  */
diff --git a/util/qsp.c b/util/qsp.c
index 5264c97342..904dcb7436 100644
--- a/util/qsp.c
+++ b/util/qsp.c
@@ -131,6 +131,7 @@ QemuRecMutexLockFunc qemu_rec_mutex_lock_func = qemu_rec_mutex_lock_impl;
 QemuRecMutexTrylockFunc qemu_rec_mutex_trylock_func =
     qemu_rec_mutex_trylock_impl;
 QemuCondWaitFunc qemu_cond_wait_func = qemu_cond_wait_impl;
+QemuCondTimedWaitFunc qemu_cond_timedwait_func = qemu_cond_timedwait_impl;
 
 /*
  * It pays off to _not_ hash callsite->file; hashing a string is slow, and
@@ -412,6 +413,21 @@ qsp_cond_wait(QemuCond *cond, QemuMutex *mutex, const char *file, int line)
     qsp_entry_record(e, t1 - t0);
 }
 
+static void
+qsp_cond_timedwait(QemuCond *cond, QemuMutex *mutex, int ms,
+                   const char *file, int line)
+{
+    QSPEntry *e;
+    int64_t t0, t1;
+
+    t0 = get_clock();
+    qemu_cond_timedwait_impl(cond, mutex, ms, file, line);
+    t1 = get_clock();
+
+    e = qsp_entry_get(cond, file, line, QSP_CONDVAR);
+    qsp_entry_record(e, t1 - t0);
+}
+
 bool qsp_is_enabled(void)
 {
     return atomic_read(&qemu_mutex_lock_func) == qsp_mutex_lock;
@@ -425,6 +441,7 @@ void qsp_enable(void)
     atomic_set(&qemu_rec_mutex_lock_func, qsp_rec_mutex_lock);
     atomic_set(&qemu_rec_mutex_trylock_func, qsp_rec_mutex_trylock);
     atomic_set(&qemu_cond_wait_func, qsp_cond_wait);
+    atomic_set(&qemu_cond_timedwait_func, qsp_cond_timedwait);
 }
 
 void qsp_disable(void)
@@ -435,6 +452,7 @@ void qsp_disable(void)
     atomic_set(&qemu_rec_mutex_lock_func, qemu_rec_mutex_lock_impl);
     atomic_set(&qemu_rec_mutex_trylock_func, qemu_rec_mutex_trylock_impl);
     atomic_set(&qemu_cond_wait_func, qemu_cond_wait_impl);
+    atomic_set(&qemu_cond_timedwait_func, qemu_cond_timedwait_impl);
 }
 
 static gint qsp_tree_cmp(gconstpointer ap, gconstpointer bp, gpointer up)
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v3 2/3] cpus: Fix throttling during vm_stop
  2019-07-18  9:17 [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct Yury Kotov
  2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 1/3] qemu-thread: Add qemu_cond_timedwait Yury Kotov
@ 2019-07-18  9:17 ` Yury Kotov
  2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 3/3] tests/migration: Add a test for auto converge Yury Kotov
  2019-07-18 15:33 ` [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct no-reply
  3 siblings, 0 replies; 8+ messages in thread
From: Yury Kotov @ 2019-07-18  9:17 UTC (permalink / raw)
  To: Paolo Bonzini, Peter Crosthwaite, Richard Henderson,
	Juan Quintela, Dr. David Alan Gilbert, Stefan Weil
  Cc: open list:Overall, yc-core

Throttling thread sleeps in VCPU thread. For high throttle percentage
this sleep is more than 10ms. E.g. for 60% - 15ms, for 99% - 990ms.
vm_stop() kicks all VCPUs and waits for them. It's called at the end of
migration and because of the long sleep the migration downtime might be
more than 100ms even for downtime-limit 1ms.
Use qemu_cond_timedwait for high percentage to wake up during vm_stop.

Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru>
---
 cpus.c | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/cpus.c b/cpus.c
index 927a00aa90..3baedd554c 100644
--- a/cpus.c
+++ b/cpus.c
@@ -74,6 +74,8 @@
 
 #endif /* CONFIG_LINUX */
 
+static QemuMutex qemu_global_mutex;
+
 int64_t max_delay;
 int64_t max_advance;
 
@@ -777,7 +779,7 @@ static void cpu_throttle_thread(CPUState *cpu, run_on_cpu_data opaque)
 {
     double pct;
     double throttle_ratio;
-    long sleeptime_ns;
+    int64_t sleeptime_ns;
 
     if (!cpu_throttle_get_percentage()) {
         return;
@@ -785,11 +787,22 @@ static void cpu_throttle_thread(CPUState *cpu, run_on_cpu_data opaque)
 
     pct = (double)cpu_throttle_get_percentage()/100;
     throttle_ratio = pct / (1 - pct);
-    sleeptime_ns = (long)(throttle_ratio * CPU_THROTTLE_TIMESLICE_NS);
-
-    qemu_mutex_unlock_iothread();
-    g_usleep(sleeptime_ns / 1000); /* Convert ns to us for usleep call */
-    qemu_mutex_lock_iothread();
+    /* Add 1ns to fix double's rounding error (like 0.9999999...) */
+    sleeptime_ns = (int64_t)(throttle_ratio * CPU_THROTTLE_TIMESLICE_NS + 1);
+
+    while (sleeptime_ns >= SCALE_MS && !cpu->stop) {
+        int64_t start, end;
+        start = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
+        qemu_cond_timedwait(cpu->halt_cond, &qemu_global_mutex,
+                            sleeptime_ns / SCALE_MS);
+        end = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
+        sleeptime_ns -= end - start;
+    }
+    if (sleeptime_ns >= SCALE_US && !cpu->stop) {
+        qemu_mutex_unlock_iothread();
+        g_usleep(sleeptime_ns / SCALE_US);
+        qemu_mutex_lock_iothread();
+    }
     atomic_set(&cpu->throttle_thread_scheduled, 0);
 }
 
@@ -1167,8 +1180,6 @@ static void qemu_init_sigbus(void)
 }
 #endif /* !CONFIG_LINUX */
 
-static QemuMutex qemu_global_mutex;
-
 static QemuThread io_thread;
 
 /* cpu creation */
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v3 3/3] tests/migration: Add a test for auto converge
  2019-07-18  9:17 [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct Yury Kotov
  2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 1/3] qemu-thread: Add qemu_cond_timedwait Yury Kotov
  2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 2/3] cpus: Fix throttling during vm_stop Yury Kotov
@ 2019-07-18  9:17 ` Yury Kotov
  2019-07-22 17:35   ` Dr. David Alan Gilbert
  2019-07-18 15:33 ` [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct no-reply
  3 siblings, 1 reply; 8+ messages in thread
From: Yury Kotov @ 2019-07-18  9:17 UTC (permalink / raw)
  To: Paolo Bonzini, Peter Crosthwaite, Richard Henderson,
	Juan Quintela, Dr. David Alan Gilbert, Stefan Weil
  Cc: open list:Overall, yc-core

Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru>
---
 tests/migration-test.c | 119 +++++++++++++++++++++++++++++++++++++----
 1 file changed, 108 insertions(+), 11 deletions(-)

diff --git a/tests/migration-test.c b/tests/migration-test.c
index a4feb9545d..bb69517fc8 100644
--- a/tests/migration-test.c
+++ b/tests/migration-test.c
@@ -241,6 +241,17 @@ static int64_t read_ram_property_int(QTestState *who, const char *property)
     return result;
 }
 
+static int64_t read_migrate_property_int(QTestState *who, const char *property)
+{
+    QDict *rsp_return;
+    int64_t result;
+
+    rsp_return = migrate_query(who);
+    result = qdict_get_try_int(rsp_return, property, 0);
+    qobject_unref(rsp_return);
+    return result;
+}
+
 static uint64_t get_migration_pass(QTestState *who)
 {
     return read_ram_property_int(who, "dirty-sync-count");
@@ -255,20 +266,22 @@ static void read_blocktime(QTestState *who)
     qobject_unref(rsp_return);
 }
 
+static bool check_migration_status(QTestState *who, const char *status)
+{
+    bool completed;
+    char *current_status;
+
+    current_status = migrate_query_status(who);
+    completed = strcmp(current_status, status) == 0;
+    g_assert_cmpstr(current_status, !=, "failed");
+    g_free(current_status);
+    return completed;
+}
+
 static void wait_for_migration_status(QTestState *who,
                                       const char *goal)
 {
-    while (true) {
-        bool completed;
-        char *status;
-
-        status = migrate_query_status(who);
-        completed = strcmp(status, goal) == 0;
-        g_assert_cmpstr(status, !=,  "failed");
-        g_free(status);
-        if (completed) {
-            return;
-        }
+    while (!check_migration_status(who, goal)) {
         usleep(1000);
     }
 }
@@ -1121,6 +1134,89 @@ static void test_migrate_fd_proto(void)
     test_migrate_end(from, to, true);
 }
 
+static void test_migrate_auto_converge(void)
+{
+    char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
+    QTestState *from, *to;
+    int i;
+    int64_t remaining, downtime;
+
+    /*
+     * We want the test to be fast enough, but stable.
+     * Throttle percentages are chosen to cover all cases (init, increment, max)
+     */
+    static const int64_t expected_pcts[] = { 0, 1, 51, 98 };
+    const int64_t max_bandwidth = 200000000; /* ~200Mb/s */
+    const int64_t downtime_limit = 50; /* 50ms */
+    /*
+     * We migrate through unix-socket (> 500Mb/s).
+     * Thus, expected migration speed ~= bandwidth limit (< 500Mb/s).
+     * So, we can predict expected_threshold
+     */
+    const int64_t expected_threshold = max_bandwidth * downtime_limit / 1000;
+
+    if (test_migrate_start(&from, &to, uri, false, false)) {
+        return;
+    }
+
+    migrate_set_capability(from, "auto-converge", true);
+    migrate_set_parameter_int(from, "cpu-throttle-initial", expected_pcts[1]);
+    migrate_set_parameter_int(from, "cpu-throttle-increment",
+                              expected_pcts[2] - expected_pcts[1]);
+    migrate_set_parameter_int(from, "max-cpu-throttle", expected_pcts[3]);
+
+    migrate_set_parameter_int(from, "max-bandwidth", max_bandwidth);
+    migrate_set_parameter_int(from, "downtime-limit", downtime_limit);
+
+    /* To check remaining size after precopy */
+    migrate_set_capability(from, "pause-before-switchover", true);
+
+    /* Wait for the first serial output from the source */
+    wait_for_serial("src_serial");
+
+    migrate(from, uri, "{}");
+
+    for (i = 0; i < ARRAY_SIZE(expected_pcts); i++) {
+        int64_t pct;
+        pct = read_migrate_property_int(from, "cpu-throttle-percentage");
+        g_assert_cmpint(pct, ==, expected_pcts[i]);
+        while (pct == expected_pcts[i] && !got_stop) {
+            usleep(1000);
+            pct = read_migrate_property_int(from, "cpu-throttle-percentage");
+        }
+        /* We break out of this loop only in paused state */
+        if (got_stop || i + 1 == ARRAY_SIZE(expected_pcts)) {
+            /* Check unexpected throttle percentage change */
+            g_assert_true(got_stop);
+            /* Check unexpected converge */
+            g_assert_cmpint(i + 1, ==, ARRAY_SIZE(expected_pcts));
+            g_assert_true(check_migration_status(from, "pre-switchover"));
+        }
+    }
+
+    remaining = read_ram_property_int(from, "remaining");
+    g_assert_cmpint(remaining, <, expected_threshold);
+
+    wait_command(from, "{ 'execute': 'migrate-continue' , 'arguments':"
+                       "  { 'state': 'pre-switchover' } }");
+
+    qtest_qmp_eventwait(to, "RESUME");
+
+    wait_for_serial("dest_serial");
+    wait_for_migration_complete(from);
+
+    downtime = read_migrate_property_int(from, "downtime");
+    /*
+     * Actual downtime may be greater than downtime limit,
+     * but the difference should be small enough (~20ms)
+     */
+    g_assert_cmpint(downtime, <, downtime_limit + 20);
+
+    g_free(uri);
+
+    test_migrate_end(from, to, true);
+}
+
 int main(int argc, char **argv)
 {
     char template[] = "/tmp/migration-test-XXXXXX";
@@ -1176,6 +1272,7 @@ int main(int argc, char **argv)
     /* qtest_add_func("/migration/ignore_shared", test_ignore_shared); */
     qtest_add_func("/migration/xbzrle/unix", test_xbzrle_unix);
     qtest_add_func("/migration/fd_proto", test_migrate_fd_proto);
+    qtest_add_func("/migration/auto_converge", test_migrate_auto_converge);
 
     ret = g_test_run();
 
-- 
2.22.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct
  2019-07-18  9:17 [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct Yury Kotov
                   ` (2 preceding siblings ...)
  2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 3/3] tests/migration: Add a test for auto converge Yury Kotov
@ 2019-07-18 15:33 ` no-reply
  3 siblings, 0 replies; 8+ messages in thread
From: no-reply @ 2019-07-18 15:33 UTC (permalink / raw)
  To: yury-kotov
  Cc: quintela, sw, crosthwaite.peter, dgilbert, qemu-devel, yc-core,
	pbonzini, rth

Patchew URL: https://patchew.org/QEMU/20190718091726.9874-1-yury-kotov@yandex-team.ru/



Hi,

This series failed the asan build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.

=== TEST SCRIPT BEGIN ===
#!/bin/bash
make docker-image-fedora V=1 NETWORK=1
time make docker-test-debug@fedora TARGET_LIST=x86_64-softmmu J=14 NETWORK=1
=== TEST SCRIPT END ===

PASS 1 fdc-test /x86_64/fdc/cmos
PASS 2 fdc-test /x86_64/fdc/no_media_on_start
PASS 3 fdc-test /x86_64/fdc/read_without_media
==11780==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 fdc-test /x86_64/fdc/media_change
PASS 5 fdc-test /x86_64/fdc/sense_interrupt
PASS 6 fdc-test /x86_64/fdc/relative_seek
PASS 7 fdc-test /x86_64/fdc/read_id
PASS 8 fdc-test /x86_64/fdc/verify
PASS 9 fdc-test /x86_64/fdc/media_insert
==11788==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==11788==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd9c17a000; bottom 0x7f402d2f8000; size: 0x00bd6ee82000 (813609525248)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 1 test-coroutine /basic/no-dangling-access
---
PASS 12 test-aio /aio/event/flush
PASS 13 test-aio /aio/event/wait/no-flush-cb
PASS 11 fdc-test /x86_64/fdc/read_no_dma_18
==11808==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 14 test-aio /aio/timer/schedule
PASS 15 test-aio /aio/coroutine/queue-chaining
PASS 16 test-aio /aio-gsource/flush
---
PASS 27 test-aio /aio-gsource/event/wait/no-flush-cb
PASS 28 test-aio /aio-gsource/timer/schedule
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-aio-multithread -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-aio-multithread" 
==11814==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-aio-multithread /aio/multi/lifecycle
PASS 2 test-aio-multithread /aio/multi/schedule
PASS 12 fdc-test /x86_64/fdc/read_no_dma_19
PASS 13 fdc-test /x86_64/fdc/fuzz-registers
PASS 3 test-aio-multithread /aio/multi/mutex/contended
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/ide-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="ide-test" 
==11842==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 ide-test /x86_64/ide/identify
==11848==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 test-aio-multithread /aio/multi/mutex/handoff
PASS 2 ide-test /x86_64/ide/flush
==11859==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 test-aio-multithread /aio/multi/mutex/mcs
PASS 3 ide-test /x86_64/ide/bmdma/simple_rw
==11870==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 6 test-aio-multithread /aio/multi/mutex/pthread
PASS 4 ide-test /x86_64/ide/bmdma/trim
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-throttle -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-throttle" 
==11877==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==11879==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-throttle /throttle/leak_bucket
PASS 2 test-throttle /throttle/compute_wait
PASS 3 test-throttle /throttle/init
---
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-thread-pool -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-thread-pool" 
PASS 5 ide-test /x86_64/ide/bmdma/short_prdt
PASS 1 test-thread-pool /thread-pool/submit
==11889==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 test-thread-pool /thread-pool/submit-aio
PASS 3 test-thread-pool /thread-pool/submit-co
PASS 4 test-thread-pool /thread-pool/submit-many
==11891==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 6 ide-test /x86_64/ide/bmdma/one_sector_short_prdt
==11962==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 test-thread-pool /thread-pool/cancel
PASS 7 ide-test /x86_64/ide/bmdma/long_prdt
==11969==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==11969==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd75f3f000; bottom 0x7f53efbba000; size: 0x00a986385000 (728101310464)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 8 ide-test /x86_64/ide/bmdma/no_busmaster
---
PASS 2 test-hbitmap /hbitmap/size/0
PASS 3 test-hbitmap /hbitmap/size/unaligned
PASS 4 test-hbitmap /hbitmap/iter/empty
==11981==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 test-hbitmap /hbitmap/iter/partial
PASS 10 ide-test /x86_64/ide/flush/empty_drive
PASS 6 test-hbitmap /hbitmap/iter/granularity
---
PASS 10 test-hbitmap /hbitmap/set/all
PASS 11 test-hbitmap /hbitmap/set/one
PASS 12 test-hbitmap /hbitmap/set/two-elem
==11990==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 13 test-hbitmap /hbitmap/set/general
PASS 14 test-hbitmap /hbitmap/set/twice
PASS 15 test-hbitmap /hbitmap/set/overlap
PASS 16 test-hbitmap /hbitmap/reset/empty
PASS 11 ide-test /x86_64/ide/flush/retry_pci
PASS 17 test-hbitmap /hbitmap/reset/general
==11996==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 18 test-hbitmap /hbitmap/reset/all
PASS 19 test-hbitmap /hbitmap/truncate/nop
PASS 20 test-hbitmap /hbitmap/truncate/grow/negligible
---
PASS 29 test-hbitmap /hbitmap/truncate/shrink/large
PASS 30 test-hbitmap /hbitmap/meta/zero
PASS 12 ide-test /x86_64/ide/flush/retry_isa
==12002==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 13 ide-test /x86_64/ide/cdrom/pio
==12008==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 14 ide-test /x86_64/ide/cdrom/pio_large
PASS 31 test-hbitmap /hbitmap/meta/one
PASS 32 test-hbitmap /hbitmap/meta/byte
PASS 33 test-hbitmap /hbitmap/meta/word
==12014==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 15 ide-test /x86_64/ide/cdrom/dma
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/ahci-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="ahci-test" 
PASS 34 test-hbitmap /hbitmap/meta/sector
PASS 35 test-hbitmap /hbitmap/serialize/align
==12028==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 ahci-test /x86_64/ahci/sanity
PASS 36 test-hbitmap /hbitmap/serialize/basic
PASS 37 test-hbitmap /hbitmap/serialize/part
---
PASS 42 test-hbitmap /hbitmap/next_dirty_area/next_dirty_area_1
PASS 43 test-hbitmap /hbitmap/next_dirty_area/next_dirty_area_4
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-bdrv-drain -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-bdrv-drain" 
==12034==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12037==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-bdrv-drain /bdrv-drain/nested
PASS 2 test-bdrv-drain /bdrv-drain/multiparent
PASS 3 test-bdrv-drain /bdrv-drain/set_aio_context
---
PASS 39 test-bdrv-drain /bdrv-drain/attach/drain
PASS 2 ahci-test /x86_64/ahci/pci_spec
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-bdrv-graph-mod -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-bdrv-graph-mod" 
==12083==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-bdrv-graph-mod /bdrv-graph-mod/update-perm-tree
PASS 2 test-bdrv-graph-mod /bdrv-graph-mod/should-update-child
==12081==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-blockjob -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-blockjob" 
==12092==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-blockjob /blockjob/ids
PASS 2 test-blockjob /blockjob/cancel/created
PASS 3 test-blockjob /blockjob/cancel/running
---
PASS 8 test-blockjob /blockjob/cancel/concluded
PASS 3 ahci-test /x86_64/ahci/pci_enable
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-blockjob-txn -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-blockjob-txn" 
==12099==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-blockjob-txn /single/success
PASS 2 test-blockjob-txn /single/failure
PASS 3 test-blockjob-txn /single/cancel
---
PASS 5 test-blockjob-txn /pair/failure
PASS 6 test-blockjob-txn /pair/cancel
PASS 7 test-blockjob-txn /pair/fail-cancel-race
==12097==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-block-backend -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-block-backend" 
==12108==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-block-backend /block-backend/drain_aio_error
PASS 2 test-block-backend /block-backend/drain_all_aio_error
PASS 4 ahci-test /x86_64/ahci/hba_spec
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-block-iothread -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-block-iothread" 
==12115==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-block-iothread /sync-op/pread
PASS 2 test-block-iothread /sync-op/pwrite
PASS 3 test-block-iothread /sync-op/load_vmstate
---
PASS 14 test-block-iothread /propagate/basic
PASS 15 test-block-iothread /propagate/diamond
PASS 16 test-block-iothread /propagate/mirror
==12113==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-image-locking -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-image-locking" 
==12141==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-image-locking /image-locking/basic
PASS 2 test-image-locking /image-locking/set-perm-abort
PASS 5 ahci-test /x86_64/ahci/hba_enable
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-x86-cpuid -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-x86-cpuid" 
PASS 1 test-x86-cpuid /cpuid/topology/basic
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-xbzrle -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-xbzrle" 
==12145==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-xbzrle /xbzrle/uleb
PASS 2 test-xbzrle /xbzrle/encode_decode_zero
PASS 3 test-xbzrle /xbzrle/encode_decode_unchanged
---
PASS 15 test-vmstate /vmstate/array/ptr/prim/0/load
PASS 16 test-vmstate /vmstate/qtailq/save/saveq
PASS 17 test-vmstate /vmstate/qtailq/load/loadq
==12158==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-cutils -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-cutils" 
PASS 1 test-cutils /cutils/parse_uint/null
PASS 2 test-cutils /cutils/parse_uint/empty
---
PASS 9 test-int128 /int128/int128_gt
PASS 10 test-int128 /int128/int128_rshift
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/rcutorture -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="rcutorture" 
==12182==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 rcutorture /rcu/torture/1reader
PASS 8 ahci-test /x86_64/ahci/reset
==12219==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 rcutorture /rcu/torture/10readers
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-rcu-list -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-rcu-list" 
==12219==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd0951f000; bottom 0x7fdc38ffe000; size: 0x0020d0521000 (140933992448)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 9 ahci-test /x86_64/ahci/io/pio/lba28/simple/zero
PASS 1 test-rcu-list /rcu/qlist/single-threaded
==12232==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12232==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffdefb01000; bottom 0x7fb43bbfe000; size: 0x0049b3f03000 (316551475200)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 2 test-rcu-list /rcu/qlist/short-few
PASS 10 ahci-test /x86_64/ahci/io/pio/lba28/simple/low
==12265==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12265==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd76fe7000; bottom 0x7f89699fe000; size: 0x00740d5e9000 (498440507392)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 11 ahci-test /x86_64/ahci/io/pio/lba28/simple/high
==12271==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 test-rcu-list /rcu/qlist/long-many
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-rcu-simpleq -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-rcu-simpleq" 
==12271==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffee33c2000; bottom 0x7f742a3fe000; size: 0x008ab8fc4000 (595809026048)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 12 ahci-test /x86_64/ahci/io/pio/lba28/double/zero
PASS 1 test-rcu-simpleq /rcu/qsimpleq/single-threaded
==12284==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12284==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd1e2bf000; bottom 0x7f8e3a7fe000; size: 0x006ee3ac1000 (476266106880)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 2 test-rcu-simpleq /rcu/qsimpleq/short-few
PASS 13 ahci-test /x86_64/ahci/io/pio/lba28/double/low
==12317==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12317==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffcb2964000; bottom 0x7f4e5f3fe000; size: 0x00ae53566000 (748722479104)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 14 ahci-test /x86_64/ahci/io/pio/lba28/double/high
PASS 3 test-rcu-simpleq /rcu/qsimpleq/long-many
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-rcu-tailq -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-rcu-tailq" 
==12323==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12323==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffe7270d000; bottom 0x7f66d03fe000; size: 0x0097a230f000 (651261177856)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 1 test-rcu-tailq /rcu/qtailq/single-threaded
PASS 15 ahci-test /x86_64/ahci/io/pio/lba28/long/zero
==12342==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 test-rcu-tailq /rcu/qtailq/short-few
==12342==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd9736d000; bottom 0x7f8dbbdfe000; size: 0x006fdb56f000 (480421277696)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 16 ahci-test /x86_64/ahci/io/pio/lba28/long/low
==12369==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12369==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffeb9571000; bottom 0x7f07681fe000; size: 0x00f751373000 (1062219493376)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 3 test-rcu-tailq /rcu/qtailq/long-many
---
PASS 8 test-qdist /qdist/binning/shrink
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-qht -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-qht" 
PASS 17 ahci-test /x86_64/ahci/io/pio/lba28/long/high
==12384==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 18 ahci-test /x86_64/ahci/io/pio/lba28/short/zero
==12390==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 19 ahci-test /x86_64/ahci/io/pio/lba28/short/low
==12396==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 20 ahci-test /x86_64/ahci/io/pio/lba28/short/high
==12402==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12402==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffee35ce000; bottom 0x7f848abfe000; size: 0x007a589d0000 (525472694272)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 21 ahci-test /x86_64/ahci/io/pio/lba48/simple/zero
==12408==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12408==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffebcbfa000; bottom 0x7f7f1abfe000; size: 0x007fa1ffc000 (548178739200)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 22 ahci-test /x86_64/ahci/io/pio/lba48/simple/low
==12414==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12414==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffe623f8000; bottom 0x7f0d56bfe000; size: 0x00f10b7fa000 (1035280031744)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 23 ahci-test /x86_64/ahci/io/pio/lba48/simple/high
==12420==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12420==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd5b191000; bottom 0x7fbc305fe000; size: 0x00412ab93000 (279889653760)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 24 ahci-test /x86_64/ahci/io/pio/lba48/double/zero
==12426==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12426==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7fffae33f000; bottom 0x7fa6a7ffe000; size: 0x005906341000 (382356164608)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 25 ahci-test /x86_64/ahci/io/pio/lba48/double/low
==12432==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12432==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffe50dc8000; bottom 0x7f1e2e5fe000; size: 0x00e0227ca000 (962651267072)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 26 ahci-test /x86_64/ahci/io/pio/lba48/double/high
==12438==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12438==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7fffc5e7e000; bottom 0x7fe2f41fe000; size: 0x001cd1c80000 (123778629632)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 1 test-qht /qht/mode/default
PASS 2 test-qht /qht/mode/resize
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-qht-par -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-qht-par" 
PASS 27 ahci-test /x86_64/ahci/io/pio/lba48/long/zero
==12454==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12454==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffe03687000; bottom 0x7f42fbbfe000; size: 0x00bb07a89000 (803287371776)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 1 test-qht-par /qht/parallel/2threads-0%updates-1s
PASS 28 ahci-test /x86_64/ahci/io/pio/lba48/long/low
PASS 2 test-qht-par /qht/parallel/2threads-20%updates-1s
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-bitops -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-bitops" 
==12467==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-bitops /bitops/sextract32
PASS 2 test-bitops /bitops/sextract64
PASS 3 test-bitops /bitops/half_shuffle32
---
PASS 5 test-bitops /bitops/half_unshuffle32
PASS 6 test-bitops /bitops/half_unshuffle64
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-bitcnt -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-bitcnt" 
==12467==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffd9ed0a000; bottom 0x7ff6afb7c000; size: 0x0006ef18e000 (29781188608)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 1 test-bitcnt /bitcnt/ctpop8
---
PASS 8 test-keyval /keyval/visit/optional
PASS 9 test-keyval /keyval/visit/alternate
PASS 10 test-keyval /keyval/visit/any
==12506==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-write-threshold -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-write-threshold" 
PASS 1 test-write-threshold /write-threshold/not-set-on-init
PASS 2 test-write-threshold /write-threshold/set-get
---
PASS 3 test-crypto-hmac /crypto/hmac/prealloc
PASS 4 test-crypto-hmac /crypto/hmac/digest
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-crypto-cipher -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-crypto-cipher" 
==12526==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-crypto-cipher /crypto/cipher/aes-ecb-128
PASS 2 test-crypto-cipher /crypto/cipher/aes-ecb-192
PASS 3 test-crypto-cipher /crypto/cipher/aes-ecb-256
---
PASS 1 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/perfectserver
PASS 2 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/perfectclient
PASS 31 ahci-test /x86_64/ahci/io/pio/lba48/short/low
==12551==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodca1
PASS 32 ahci-test /x86_64/ahci/io/pio/lba48/short/high
==12557==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodca2
PASS 5 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodca3
PASS 6 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/badca1
---
PASS 9 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver1
PASS 33 ahci-test /x86_64/ahci/io/dma/lba28/fragmented
PASS 10 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver2
==12563==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 11 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver3
PASS 34 ahci-test /x86_64/ahci/io/dma/lba28/retry
==12569==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 12 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver4
PASS 35 ahci-test /x86_64/ahci/io/dma/lba28/simple/zero
==12575==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 13 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver5
PASS 36 ahci-test /x86_64/ahci/io/dma/lba28/simple/low
==12581==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 14 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver6
PASS 37 ahci-test /x86_64/ahci/io/dma/lba28/simple/high
==12587==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 15 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/goodserver7
PASS 16 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/badserver1
PASS 17 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/badserver2
---
PASS 38 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/missingserver
PASS 39 test-crypto-tlscredsx509 /qcrypto/tlscredsx509/missingclient
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-crypto-tlssession -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-crypto-tlssession" 
==12593==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 39 ahci-test /x86_64/ahci/io/dma/lba28/double/low
PASS 1 test-crypto-tlssession /qcrypto/tlssession/psk
==12604==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 test-crypto-tlssession /qcrypto/tlssession/basicca
PASS 40 ahci-test /x86_64/ahci/io/dma/lba28/double/high
PASS 3 test-crypto-tlssession /qcrypto/tlssession/differentca
PASS 4 test-crypto-tlssession /qcrypto/tlssession/altname1
==12610==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 test-crypto-tlssession /qcrypto/tlssession/altname2
PASS 41 ahci-test /x86_64/ahci/io/dma/lba28/long/zero
PASS 6 test-crypto-tlssession /qcrypto/tlssession/altname3
==12616==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 7 test-crypto-tlssession /qcrypto/tlssession/altname4
PASS 42 ahci-test /x86_64/ahci/io/dma/lba28/long/low
PASS 8 test-crypto-tlssession /qcrypto/tlssession/altname5
==12622==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 43 ahci-test /x86_64/ahci/io/dma/lba28/long/high
==12628==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 44 ahci-test /x86_64/ahci/io/dma/lba28/short/zero
==12634==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 45 ahci-test /x86_64/ahci/io/dma/lba28/short/low
==12641==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 9 test-crypto-tlssession /qcrypto/tlssession/altname6
PASS 46 ahci-test /x86_64/ahci/io/dma/lba28/short/high
==12647==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 10 test-crypto-tlssession /qcrypto/tlssession/wildcard1
PASS 47 ahci-test /x86_64/ahci/io/dma/lba48/simple/zero
==12653==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 11 test-crypto-tlssession /qcrypto/tlssession/wildcard2
PASS 12 test-crypto-tlssession /qcrypto/tlssession/wildcard3
PASS 13 test-crypto-tlssession /qcrypto/tlssession/wildcard4
PASS 48 ahci-test /x86_64/ahci/io/dma/lba48/simple/low
==12659==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 49 ahci-test /x86_64/ahci/io/dma/lba48/simple/high
==12665==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 14 test-crypto-tlssession /qcrypto/tlssession/wildcard5
PASS 50 ahci-test /x86_64/ahci/io/dma/lba48/double/zero
PASS 15 test-crypto-tlssession /qcrypto/tlssession/wildcard6
==12671==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 16 test-crypto-tlssession /qcrypto/tlssession/cachain
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-qga -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-qga" 
PASS 51 ahci-test /x86_64/ahci/io/dma/lba48/double/low
==12683==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-qga /qga/sync-delimited
PASS 2 test-qga /qga/sync
PASS 3 test-qga /qga/ping
---
PASS 17 test-qga /qga/fsfreeze-status
PASS 52 ahci-test /x86_64/ahci/io/dma/lba48/double/high
PASS 18 test-qga /qga/blacklist
==12690==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 19 test-qga /qga/config
PASS 20 test-qga /qga/guest-exec
PASS 21 test-qga /qga/guest-exec-invalid
---
PASS 24 test-qga /qga/guest-get-timezone
PASS 25 test-qga /qga/guest-get-users
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-timed-average -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-timed-average" 
==12703==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-timed-average /timed-average/average
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-util-filemonitor -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-util-filemonitor" 
PASS 1 test-util-filemonitor /util/filemonitor
---
PASS 4 test-io-channel-socket /io/channel/socket/ipv6-sync
PASS 5 test-io-channel-socket /io/channel/socket/ipv6-async
PASS 6 test-io-channel-socket /io/channel/socket/unix-sync
==12742==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 7 test-io-channel-socket /io/channel/socket/unix-async
PASS 8 test-io-channel-socket /io/channel/socket/unix-fd-pass
PASS 9 test-io-channel-socket /io/channel/socket/unix-listen-cleanup
---
PASS 3 test-io-channel-command /io/channel/command/echo/sync
PASS 4 test-io-channel-command /io/channel/command/echo/async
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-io-channel-buffer -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-io-channel-buffer" 
==12811==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-io-channel-buffer /io/channel/buf
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-base64 -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-base64" 
PASS 1 test-base64 /util/base64/good
---
PASS 3 test-crypto-afsplit /crypto/afsplit/sha256/big
PASS 4 test-crypto-afsplit /crypto/afsplit/sha1/1000
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-crypto-xts -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-crypto-xts" 
==12844==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-crypto-xts /crypto/xts/t-1-key-32-ptx-32/basic
PASS 2 test-crypto-xts /crypto/xts/t-1-key-32-ptx-32/split
PASS 3 test-crypto-xts /crypto/xts/t-1-key-32-ptx-32/unaligned
---
PASS 2 test-logging /logging/parse_path
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-replication -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-replication" 
PASS 57 ahci-test /x86_64/ahci/io/dma/lba48/short/low
==12870==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12873==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 test-replication /replication/primary/read
PASS 2 test-replication /replication/primary/write
PASS 58 ahci-test /x86_64/ahci/io/dma/lba48/short/high
---
PASS 4 test-replication /replication/primary/stop
PASS 5 test-replication /replication/primary/do_checkpoint
PASS 6 test-replication /replication/primary/get_error_all
==12880==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 7 test-replication /replication/secondary/read
PASS 59 ahci-test /x86_64/ahci/io/ncq/simple
PASS 8 test-replication /replication/secondary/write
==12886==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 60 ahci-test /x86_64/ahci/io/ncq/retry
==12870==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7fffdc662000; bottom 0x7f8dedbfc000; size: 0x0071eea66000 (489335185408)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 9 test-replication /replication/secondary/start
==12892==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 61 ahci-test /x86_64/ahci/flush/simple
==12916==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 10 test-replication /replication/secondary/stop
PASS 62 ahci-test /x86_64/ahci/flush/retry
==12922==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12927==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 11 test-replication /replication/secondary/do_checkpoint
PASS 12 test-replication /replication/secondary/get_error_all
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  tests/test-bufferiszero -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="test-bufferiszero" 
PASS 63 ahci-test /x86_64/ahci/flush/migrate
==12940==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12945==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 64 ahci-test /x86_64/ahci/migrate/sanity
==12954==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12959==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 65 ahci-test /x86_64/ahci/migrate/dma/simple
==12968==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12973==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 66 ahci-test /x86_64/ahci/migrate/dma/halted
==12982==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==12987==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 67 ahci-test /x86_64/ahci/migrate/ncq/simple
==12996==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==13001==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 68 ahci-test /x86_64/ahci/migrate/ncq/halted
==13010==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 69 ahci-test /x86_64/ahci/cdrom/eject
==13015==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 70 ahci-test /x86_64/ahci/cdrom/dma/single
==13021==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 71 ahci-test /x86_64/ahci/cdrom/dma/multi
==13027==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 72 ahci-test /x86_64/ahci/cdrom/pio/single
==13033==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
==13033==WARNING: ASan is ignoring requested __asan_handle_no_return: stack top: 0x7ffe7c5b9000; bottom 0x7f9495dfe000; size: 0x0069e67bb000 (454838431744)
False positive error reports may follow
For details see https://github.com/google/sanitizers/issues/189
PASS 73 ahci-test /x86_64/ahci/cdrom/pio/multi
==13039==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 74 ahci-test /x86_64/ahci/cdrom/pio/bcl
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/hd-geo-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="hd-geo-test" 
PASS 1 test-bufferiszero /cutils/bufferiszero
---
PASS 21 test-qgraph /qgraph/test_two_test_same_interface
PASS 22 test-qgraph /qgraph/test_test_in_path
PASS 23 test-qgraph /qgraph/test_double_edge
==13062==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 hd-geo-test /x86_64/hd-geo/ide/drive/cd_0
==13076==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 hd-geo-test /x86_64/hd-geo/ide/drive/mbr/blank
==13082==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 hd-geo-test /x86_64/hd-geo/ide/drive/mbr/lba
==13088==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 5 hd-geo-test /x86_64/hd-geo/ide/drive/mbr/chs
==13094==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 6 hd-geo-test /x86_64/hd-geo/ide/device/mbr/blank
==13100==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 7 hd-geo-test /x86_64/hd-geo/ide/device/mbr/lba
==13106==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 8 hd-geo-test /x86_64/hd-geo/ide/device/mbr/chs
==13112==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 9 hd-geo-test /x86_64/hd-geo/ide/device/user/chs
==13117==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 10 hd-geo-test /x86_64/hd-geo/ide/device/user/chst
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/boot-order-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="boot-order-test" 
PASS 1 boot-order-test /x86_64/boot-order/pc
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13185==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/pc/FACP'
Using expected file 'tests/data/acpi/pc/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13191==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/q35/FACP'
Using expected file 'tests/data/acpi/q35/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13197==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/pc/FACP.bridge'
Looking for expected file 'tests/data/acpi/pc/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13203==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/pc/FACP.ipmikcs'
Looking for expected file 'tests/data/acpi/pc/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13209==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/pc/FACP.cphp'
Looking for expected file 'tests/data/acpi/pc/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13216==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/pc/FACP.memhp'
Looking for expected file 'tests/data/acpi/pc/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13222==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/pc/FACP.numamem'
Looking for expected file 'tests/data/acpi/pc/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13228==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/pc/FACP.dimmpxm'
Looking for expected file 'tests/data/acpi/pc/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13237==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/q35/FACP.bridge'
Looking for expected file 'tests/data/acpi/q35/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13243==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/q35/FACP.mmio64'
Looking for expected file 'tests/data/acpi/q35/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13249==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/q35/FACP.ipmibt'
Looking for expected file 'tests/data/acpi/q35/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13255==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/q35/FACP.cphp'
Looking for expected file 'tests/data/acpi/q35/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13262==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/q35/FACP.memhp'
Looking for expected file 'tests/data/acpi/q35/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13268==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/q35/FACP.numamem'
Looking for expected file 'tests/data/acpi/q35/FACP'
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13274==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!

Looking for expected file 'tests/data/acpi/q35/FACP.dimmpxm'
Looking for expected file 'tests/data/acpi/q35/FACP'
---
PASS 1 i440fx-test /x86_64/i440fx/defaults
PASS 2 i440fx-test /x86_64/i440fx/pam
PASS 3 i440fx-test /x86_64/i440fx/firmware/bios
==13358==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 i440fx-test /x86_64/i440fx/firmware/pflash
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/fw_cfg-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="fw_cfg-test" 
PASS 1 fw_cfg-test /x86_64/fw_cfg/signature
---
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/drive_del-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="drive_del-test" 
PASS 1 drive_del-test /x86_64/drive_del/without-dev
PASS 2 drive_del-test /x86_64/drive_del/after_failed_device_add
==13446==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 drive_del-test /x86_64/blockdev/drive_del_device_del
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/wdt_ib700-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="wdt_ib700-test" 
PASS 1 wdt_ib700-test /x86_64/wdt_ib700/pause
---
PASS 1 usb-hcd-uhci-test /x86_64/uhci/pci/init
PASS 2 usb-hcd-uhci-test /x86_64/uhci/pci/port1
PASS 3 usb-hcd-uhci-test /x86_64/uhci/pci/hotplug
==13641==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 4 usb-hcd-uhci-test /x86_64/uhci/pci/hotplug/usb-storage
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/usb-hcd-xhci-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="usb-hcd-xhci-test" 
PASS 1 usb-hcd-xhci-test /x86_64/xhci/pci/init
PASS 2 usb-hcd-xhci-test /x86_64/xhci/pci/hotplug
==13650==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 usb-hcd-xhci-test /x86_64/xhci/pci/hotplug/usb-uas
PASS 4 usb-hcd-xhci-test /x86_64/xhci/pci/hotplug/usb-ccid
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/cpu-plug-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="cpu-plug-test" 
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13756==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 1 vmgenid-test /x86_64/vmgenid/vmgenid/set-guid
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13762==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 2 vmgenid-test /x86_64/vmgenid/vmgenid/set-guid-auto
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13768==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 vmgenid-test /x86_64/vmgenid/vmgenid/query-monitor
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$(( ${RANDOM:-0} % 255 + 1))}  QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 QTEST_QEMU_IMG=qemu-img tests/tpm-crb-swtpm-test -m=quick -k --tap < /dev/null | ./scripts/tap-driver.pl --test-name="tpm-crb-swtpm-test" 
SKIP 1 tpm-crb-swtpm-test /x86_64/tpm/crb-swtpm/test # SKIP swtpm not in PATH or missing --tpm2 support
---
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13873==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13878==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
PASS 3 migration-test /x86_64/migration/fd_proto
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13886==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize KVM: No such file or directory
qemu-system-x86_64: Back to tcg accelerator
==13891==WARNING: ASan doesn't fully support makecontext/swapcontext functions and may produce false positives in some cases!
**
ERROR:/tmp/qemu-test/src/tests/migration-test.c:1192:test_migrate_auto_converge: assertion failed (i + 1 == ARRAY_SIZE(expected_pcts)): (3 == 4)
ERROR - Bail out! ERROR:/tmp/qemu-test/src/tests/migration-test.c:1192:test_migrate_auto_converge: assertion failed (i + 1 == ARRAY_SIZE(expected_pcts)): (3 == 4)
make: *** [/tmp/qemu-test/src/tests/Makefile.include:899: check-qtest-x86_64] Error 1
make: *** Waiting for unfinished jobs....
Traceback (most recent call last):


The full log is available at
http://patchew.org/logs/20190718091726.9874-1-yury-kotov@yandex-team.ru/testing.asan/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v3 3/3] tests/migration: Add a test for auto converge
  2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 3/3] tests/migration: Add a test for auto converge Yury Kotov
@ 2019-07-22 17:35   ` Dr. David Alan Gilbert
  2019-07-23  8:54     ` Yury Kotov
  0 siblings, 1 reply; 8+ messages in thread
From: Dr. David Alan Gilbert @ 2019-07-22 17:35 UTC (permalink / raw)
  To: Yury Kotov
  Cc: Juan Quintela, Stefan Weil, Peter Crosthwaite, open list:Overall,
	yc-core, Paolo Bonzini, Richard Henderson

* Yury Kotov (yury-kotov@yandex-team.ru) wrote:
> Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru>

This looks OK to me, but have you tried it on a really really overloaded
host?
I worry that you might skip some of the percentage steps or not hit the
bandwidth on the small overloaded VMs we get in CI.

Dave

> ---
>  tests/migration-test.c | 119 +++++++++++++++++++++++++++++++++++++----
>  1 file changed, 108 insertions(+), 11 deletions(-)
> 
> diff --git a/tests/migration-test.c b/tests/migration-test.c
> index a4feb9545d..bb69517fc8 100644
> --- a/tests/migration-test.c
> +++ b/tests/migration-test.c
> @@ -241,6 +241,17 @@ static int64_t read_ram_property_int(QTestState *who, const char *property)
>      return result;
>  }
>  
> +static int64_t read_migrate_property_int(QTestState *who, const char *property)
> +{
> +    QDict *rsp_return;
> +    int64_t result;
> +
> +    rsp_return = migrate_query(who);
> +    result = qdict_get_try_int(rsp_return, property, 0);
> +    qobject_unref(rsp_return);
> +    return result;
> +}
> +
>  static uint64_t get_migration_pass(QTestState *who)
>  {
>      return read_ram_property_int(who, "dirty-sync-count");
> @@ -255,20 +266,22 @@ static void read_blocktime(QTestState *who)
>      qobject_unref(rsp_return);
>  }
>  
> +static bool check_migration_status(QTestState *who, const char *status)
> +{
> +    bool completed;
> +    char *current_status;
> +
> +    current_status = migrate_query_status(who);
> +    completed = strcmp(current_status, status) == 0;
> +    g_assert_cmpstr(current_status, !=, "failed");
> +    g_free(current_status);
> +    return completed;
> +}
> +
>  static void wait_for_migration_status(QTestState *who,
>                                        const char *goal)
>  {
> -    while (true) {
> -        bool completed;
> -        char *status;
> -
> -        status = migrate_query_status(who);
> -        completed = strcmp(status, goal) == 0;
> -        g_assert_cmpstr(status, !=,  "failed");
> -        g_free(status);
> -        if (completed) {
> -            return;
> -        }
> +    while (!check_migration_status(who, goal)) {
>          usleep(1000);
>      }
>  }
> @@ -1121,6 +1134,89 @@ static void test_migrate_fd_proto(void)
>      test_migrate_end(from, to, true);
>  }
>  
> +static void test_migrate_auto_converge(void)
> +{
> +    char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
> +    QTestState *from, *to;
> +    int i;
> +    int64_t remaining, downtime;
> +
> +    /*
> +     * We want the test to be fast enough, but stable.
> +     * Throttle percentages are chosen to cover all cases (init, increment, max)
> +     */
> +    static const int64_t expected_pcts[] = { 0, 1, 51, 98 };
> +    const int64_t max_bandwidth = 200000000; /* ~200Mb/s */
> +    const int64_t downtime_limit = 50; /* 50ms */
> +    /*
> +     * We migrate through unix-socket (> 500Mb/s).
> +     * Thus, expected migration speed ~= bandwidth limit (< 500Mb/s).
> +     * So, we can predict expected_threshold
> +     */
> +    const int64_t expected_threshold = max_bandwidth * downtime_limit / 1000;
> +
> +    if (test_migrate_start(&from, &to, uri, false, false)) {
> +        return;
> +    }
> +
> +    migrate_set_capability(from, "auto-converge", true);
> +    migrate_set_parameter_int(from, "cpu-throttle-initial", expected_pcts[1]);
> +    migrate_set_parameter_int(from, "cpu-throttle-increment",
> +                              expected_pcts[2] - expected_pcts[1]);
> +    migrate_set_parameter_int(from, "max-cpu-throttle", expected_pcts[3]);
> +
> +    migrate_set_parameter_int(from, "max-bandwidth", max_bandwidth);
> +    migrate_set_parameter_int(from, "downtime-limit", downtime_limit);
> +
> +    /* To check remaining size after precopy */
> +    migrate_set_capability(from, "pause-before-switchover", true);
> +
> +    /* Wait for the first serial output from the source */
> +    wait_for_serial("src_serial");
> +
> +    migrate(from, uri, "{}");
> +
> +    for (i = 0; i < ARRAY_SIZE(expected_pcts); i++) {
> +        int64_t pct;
> +        pct = read_migrate_property_int(from, "cpu-throttle-percentage");
> +        g_assert_cmpint(pct, ==, expected_pcts[i]);
> +        while (pct == expected_pcts[i] && !got_stop) {
> +            usleep(1000);
> +            pct = read_migrate_property_int(from, "cpu-throttle-percentage");
> +        }
> +        /* We break out of this loop only in paused state */
> +        if (got_stop || i + 1 == ARRAY_SIZE(expected_pcts)) {
> +            /* Check unexpected throttle percentage change */
> +            g_assert_true(got_stop);
> +            /* Check unexpected converge */
> +            g_assert_cmpint(i + 1, ==, ARRAY_SIZE(expected_pcts));
> +            g_assert_true(check_migration_status(from, "pre-switchover"));
> +        }
> +    }
> +
> +    remaining = read_ram_property_int(from, "remaining");
> +    g_assert_cmpint(remaining, <, expected_threshold);
> +
> +    wait_command(from, "{ 'execute': 'migrate-continue' , 'arguments':"
> +                       "  { 'state': 'pre-switchover' } }");
> +
> +    qtest_qmp_eventwait(to, "RESUME");
> +
> +    wait_for_serial("dest_serial");
> +    wait_for_migration_complete(from);
> +
> +    downtime = read_migrate_property_int(from, "downtime");
> +    /*
> +     * Actual downtime may be greater than downtime limit,
> +     * but the difference should be small enough (~20ms)
> +     */
> +    g_assert_cmpint(downtime, <, downtime_limit + 20);
> +
> +    g_free(uri);
> +
> +    test_migrate_end(from, to, true);
> +}
> +
>  int main(int argc, char **argv)
>  {
>      char template[] = "/tmp/migration-test-XXXXXX";
> @@ -1176,6 +1272,7 @@ int main(int argc, char **argv)
>      /* qtest_add_func("/migration/ignore_shared", test_ignore_shared); */
>      qtest_add_func("/migration/xbzrle/unix", test_xbzrle_unix);
>      qtest_add_func("/migration/fd_proto", test_migrate_fd_proto);
> +    qtest_add_func("/migration/auto_converge", test_migrate_auto_converge);
>  
>      ret = g_test_run();
>  
> -- 
> 2.22.0
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v3 3/3] tests/migration: Add a test for auto converge
  2019-07-22 17:35   ` Dr. David Alan Gilbert
@ 2019-07-23  8:54     ` Yury Kotov
  2019-07-23 10:23       ` Dr. David Alan Gilbert
  0 siblings, 1 reply; 8+ messages in thread
From: Yury Kotov @ 2019-07-23  8:54 UTC (permalink / raw)
  To: Dr. David Alan Gilbert
  Cc: Peter Crosthwaite, Stefan Weil, Juan Quintela, open list:Overall,
	yc-core, Paolo Bonzini, Richard Henderson

22.07.2019, 20:35, "Dr. David Alan Gilbert" <dgilbert@redhat.com>:
> * Yury Kotov (yury-kotov@yandex-team.ru) wrote:
>>  Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru>
>
> This looks OK to me, but have you tried it on a really really overloaded
> host?
> I worry that you might skip some of the percentage steps or not hit the
> bandwidth on the small overloaded VMs we get in CI.

No, I haven't tried. I saw patchew's logs and you're absolutely right - such
problem exists. Now I'm looking for a way to fix it.

>
> Dave
>
>>  ---
>>   tests/migration-test.c | 119 +++++++++++++++++++++++++++++++++++++----
>>   1 file changed, 108 insertions(+), 11 deletions(-)
>>
>>  diff --git a/tests/migration-test.c b/tests/migration-test.c
>>  index a4feb9545d..bb69517fc8 100644
>>  --- a/tests/migration-test.c
>>  +++ b/tests/migration-test.c
>>  @@ -241,6 +241,17 @@ static int64_t read_ram_property_int(QTestState *who, const char *property)
>>       return result;
>>   }
>>
>>  +static int64_t read_migrate_property_int(QTestState *who, const char *property)
>>  +{
>>  + QDict *rsp_return;
>>  + int64_t result;
>>  +
>>  + rsp_return = migrate_query(who);
>>  + result = qdict_get_try_int(rsp_return, property, 0);
>>  + qobject_unref(rsp_return);
>>  + return result;
>>  +}
>>  +
>>   static uint64_t get_migration_pass(QTestState *who)
>>   {
>>       return read_ram_property_int(who, "dirty-sync-count");
>>  @@ -255,20 +266,22 @@ static void read_blocktime(QTestState *who)
>>       qobject_unref(rsp_return);
>>   }
>>
>>  +static bool check_migration_status(QTestState *who, const char *status)
>>  +{
>>  + bool completed;
>>  + char *current_status;
>>  +
>>  + current_status = migrate_query_status(who);
>>  + completed = strcmp(current_status, status) == 0;
>>  + g_assert_cmpstr(current_status, !=, "failed");
>>  + g_free(current_status);
>>  + return completed;
>>  +}
>>  +
>>   static void wait_for_migration_status(QTestState *who,
>>                                         const char *goal)
>>   {
>>  - while (true) {
>>  - bool completed;
>>  - char *status;
>>  -
>>  - status = migrate_query_status(who);
>>  - completed = strcmp(status, goal) == 0;
>>  - g_assert_cmpstr(status, !=, "failed");
>>  - g_free(status);
>>  - if (completed) {
>>  - return;
>>  - }
>>  + while (!check_migration_status(who, goal)) {
>>           usleep(1000);
>>       }
>>   }
>>  @@ -1121,6 +1134,89 @@ static void test_migrate_fd_proto(void)
>>       test_migrate_end(from, to, true);
>>   }
>>
>>  +static void test_migrate_auto_converge(void)
>>  +{
>>  + char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
>>  + QTestState *from, *to;
>>  + int i;
>>  + int64_t remaining, downtime;
>>  +
>>  + /*
>>  + * We want the test to be fast enough, but stable.
>>  + * Throttle percentages are chosen to cover all cases (init, increment, max)
>>  + */
>>  + static const int64_t expected_pcts[] = { 0, 1, 51, 98 };
>>  + const int64_t max_bandwidth = 200000000; /* ~200Mb/s */
>>  + const int64_t downtime_limit = 50; /* 50ms */
>>  + /*
>>  + * We migrate through unix-socket (> 500Mb/s).
>>  + * Thus, expected migration speed ~= bandwidth limit (< 500Mb/s).
>>  + * So, we can predict expected_threshold
>>  + */
>>  + const int64_t expected_threshold = max_bandwidth * downtime_limit / 1000;
>>  +
>>  + if (test_migrate_start(&from, &to, uri, false, false)) {
>>  + return;
>>  + }
>>  +
>>  + migrate_set_capability(from, "auto-converge", true);
>>  + migrate_set_parameter_int(from, "cpu-throttle-initial", expected_pcts[1]);
>>  + migrate_set_parameter_int(from, "cpu-throttle-increment",
>>  + expected_pcts[2] - expected_pcts[1]);
>>  + migrate_set_parameter_int(from, "max-cpu-throttle", expected_pcts[3]);
>>  +
>>  + migrate_set_parameter_int(from, "max-bandwidth", max_bandwidth);
>>  + migrate_set_parameter_int(from, "downtime-limit", downtime_limit);
>>  +
>>  + /* To check remaining size after precopy */
>>  + migrate_set_capability(from, "pause-before-switchover", true);
>>  +
>>  + /* Wait for the first serial output from the source */
>>  + wait_for_serial("src_serial");
>>  +
>>  + migrate(from, uri, "{}");
>>  +
>>  + for (i = 0; i < ARRAY_SIZE(expected_pcts); i++) {
>>  + int64_t pct;
>>  + pct = read_migrate_property_int(from, "cpu-throttle-percentage");
>>  + g_assert_cmpint(pct, ==, expected_pcts[i]);
>>  + while (pct == expected_pcts[i] && !got_stop) {
>>  + usleep(1000);
>>  + pct = read_migrate_property_int(from, "cpu-throttle-percentage");
>>  + }
>>  + /* We break out of this loop only in paused state */
>>  + if (got_stop || i + 1 == ARRAY_SIZE(expected_pcts)) {
>>  + /* Check unexpected throttle percentage change */
>>  + g_assert_true(got_stop);
>>  + /* Check unexpected converge */
>>  + g_assert_cmpint(i + 1, ==, ARRAY_SIZE(expected_pcts));
>>  + g_assert_true(check_migration_status(from, "pre-switchover"));
>>  + }
>>  + }
>>  +
>>  + remaining = read_ram_property_int(from, "remaining");
>>  + g_assert_cmpint(remaining, <, expected_threshold);
>>  +
>>  + wait_command(from, "{ 'execute': 'migrate-continue' , 'arguments':"
>>  + " { 'state': 'pre-switchover' } }");
>>  +
>>  + qtest_qmp_eventwait(to, "RESUME");
>>  +
>>  + wait_for_serial("dest_serial");
>>  + wait_for_migration_complete(from);
>>  +
>>  + downtime = read_migrate_property_int(from, "downtime");
>>  + /*
>>  + * Actual downtime may be greater than downtime limit,
>>  + * but the difference should be small enough (~20ms)
>>  + */
>>  + g_assert_cmpint(downtime, <, downtime_limit + 20);
>>  +
>>  + g_free(uri);
>>  +
>>  + test_migrate_end(from, to, true);
>>  +}
>>  +
>>   int main(int argc, char **argv)
>>   {
>>       char template[] = "/tmp/migration-test-XXXXXX";
>>  @@ -1176,6 +1272,7 @@ int main(int argc, char **argv)
>>       /* qtest_add_func("/migration/ignore_shared", test_ignore_shared); */
>>       qtest_add_func("/migration/xbzrle/unix", test_xbzrle_unix);
>>       qtest_add_func("/migration/fd_proto", test_migrate_fd_proto);
>>  + qtest_add_func("/migration/auto_converge", test_migrate_auto_converge);
>>
>>       ret = g_test_run();
>>
>>  --
>>  2.22.0
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

Regards,
Yury


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v3 3/3] tests/migration: Add a test for auto converge
  2019-07-23  8:54     ` Yury Kotov
@ 2019-07-23 10:23       ` Dr. David Alan Gilbert
  0 siblings, 0 replies; 8+ messages in thread
From: Dr. David Alan Gilbert @ 2019-07-23 10:23 UTC (permalink / raw)
  To: Yury Kotov
  Cc: Peter Crosthwaite, Stefan Weil, Juan Quintela, open list:Overall,
	yc-core, Paolo Bonzini, Richard Henderson

* Yury Kotov (yury-kotov@yandex-team.ru) wrote:
> 22.07.2019, 20:35, "Dr. David Alan Gilbert" <dgilbert@redhat.com>:
> > * Yury Kotov (yury-kotov@yandex-team.ru) wrote:
> >>  Signed-off-by: Yury Kotov <yury-kotov@yandex-team.ru>
> >
> > This looks OK to me, but have you tried it on a really really overloaded
> > host?
> > I worry that you might skip some of the percentage steps or not hit the
> > bandwidth on the small overloaded VMs we get in CI.
> 
> No, I haven't tried. I saw patchew's logs and you're absolutely right - such
> problem exists. Now I'm looking for a way to fix it.

Yes, we've hit that type of thing before; make sure it's happy with 1
CPU that's already got 2 or 3 other things on it.

But as much as possible try and make it survive if it's really slow.

Dave

> >
> > Dave
> >
> >>  ---
> >>   tests/migration-test.c | 119 +++++++++++++++++++++++++++++++++++++----
> >>   1 file changed, 108 insertions(+), 11 deletions(-)
> >>
> >>  diff --git a/tests/migration-test.c b/tests/migration-test.c
> >>  index a4feb9545d..bb69517fc8 100644
> >>  --- a/tests/migration-test.c
> >>  +++ b/tests/migration-test.c
> >>  @@ -241,6 +241,17 @@ static int64_t read_ram_property_int(QTestState *who, const char *property)
> >>       return result;
> >>   }
> >>
> >>  +static int64_t read_migrate_property_int(QTestState *who, const char *property)
> >>  +{
> >>  + QDict *rsp_return;
> >>  + int64_t result;
> >>  +
> >>  + rsp_return = migrate_query(who);
> >>  + result = qdict_get_try_int(rsp_return, property, 0);
> >>  + qobject_unref(rsp_return);
> >>  + return result;
> >>  +}
> >>  +
> >>   static uint64_t get_migration_pass(QTestState *who)
> >>   {
> >>       return read_ram_property_int(who, "dirty-sync-count");
> >>  @@ -255,20 +266,22 @@ static void read_blocktime(QTestState *who)
> >>       qobject_unref(rsp_return);
> >>   }
> >>
> >>  +static bool check_migration_status(QTestState *who, const char *status)
> >>  +{
> >>  + bool completed;
> >>  + char *current_status;
> >>  +
> >>  + current_status = migrate_query_status(who);
> >>  + completed = strcmp(current_status, status) == 0;
> >>  + g_assert_cmpstr(current_status, !=, "failed");
> >>  + g_free(current_status);
> >>  + return completed;
> >>  +}
> >>  +
> >>   static void wait_for_migration_status(QTestState *who,
> >>                                         const char *goal)
> >>   {
> >>  - while (true) {
> >>  - bool completed;
> >>  - char *status;
> >>  -
> >>  - status = migrate_query_status(who);
> >>  - completed = strcmp(status, goal) == 0;
> >>  - g_assert_cmpstr(status, !=, "failed");
> >>  - g_free(status);
> >>  - if (completed) {
> >>  - return;
> >>  - }
> >>  + while (!check_migration_status(who, goal)) {
> >>           usleep(1000);
> >>       }
> >>   }
> >>  @@ -1121,6 +1134,89 @@ static void test_migrate_fd_proto(void)
> >>       test_migrate_end(from, to, true);
> >>   }
> >>
> >>  +static void test_migrate_auto_converge(void)
> >>  +{
> >>  + char *uri = g_strdup_printf("unix:%s/migsocket", tmpfs);
> >>  + QTestState *from, *to;
> >>  + int i;
> >>  + int64_t remaining, downtime;
> >>  +
> >>  + /*
> >>  + * We want the test to be fast enough, but stable.
> >>  + * Throttle percentages are chosen to cover all cases (init, increment, max)
> >>  + */
> >>  + static const int64_t expected_pcts[] = { 0, 1, 51, 98 };
> >>  + const int64_t max_bandwidth = 200000000; /* ~200Mb/s */
> >>  + const int64_t downtime_limit = 50; /* 50ms */
> >>  + /*
> >>  + * We migrate through unix-socket (> 500Mb/s).
> >>  + * Thus, expected migration speed ~= bandwidth limit (< 500Mb/s).
> >>  + * So, we can predict expected_threshold
> >>  + */
> >>  + const int64_t expected_threshold = max_bandwidth * downtime_limit / 1000;
> >>  +
> >>  + if (test_migrate_start(&from, &to, uri, false, false)) {
> >>  + return;
> >>  + }
> >>  +
> >>  + migrate_set_capability(from, "auto-converge", true);
> >>  + migrate_set_parameter_int(from, "cpu-throttle-initial", expected_pcts[1]);
> >>  + migrate_set_parameter_int(from, "cpu-throttle-increment",
> >>  + expected_pcts[2] - expected_pcts[1]);
> >>  + migrate_set_parameter_int(from, "max-cpu-throttle", expected_pcts[3]);
> >>  +
> >>  + migrate_set_parameter_int(from, "max-bandwidth", max_bandwidth);
> >>  + migrate_set_parameter_int(from, "downtime-limit", downtime_limit);
> >>  +
> >>  + /* To check remaining size after precopy */
> >>  + migrate_set_capability(from, "pause-before-switchover", true);
> >>  +
> >>  + /* Wait for the first serial output from the source */
> >>  + wait_for_serial("src_serial");
> >>  +
> >>  + migrate(from, uri, "{}");
> >>  +
> >>  + for (i = 0; i < ARRAY_SIZE(expected_pcts); i++) {
> >>  + int64_t pct;
> >>  + pct = read_migrate_property_int(from, "cpu-throttle-percentage");
> >>  + g_assert_cmpint(pct, ==, expected_pcts[i]);
> >>  + while (pct == expected_pcts[i] && !got_stop) {
> >>  + usleep(1000);
> >>  + pct = read_migrate_property_int(from, "cpu-throttle-percentage");
> >>  + }
> >>  + /* We break out of this loop only in paused state */
> >>  + if (got_stop || i + 1 == ARRAY_SIZE(expected_pcts)) {
> >>  + /* Check unexpected throttle percentage change */
> >>  + g_assert_true(got_stop);
> >>  + /* Check unexpected converge */
> >>  + g_assert_cmpint(i + 1, ==, ARRAY_SIZE(expected_pcts));
> >>  + g_assert_true(check_migration_status(from, "pre-switchover"));
> >>  + }
> >>  + }
> >>  +
> >>  + remaining = read_ram_property_int(from, "remaining");
> >>  + g_assert_cmpint(remaining, <, expected_threshold);
> >>  +
> >>  + wait_command(from, "{ 'execute': 'migrate-continue' , 'arguments':"
> >>  + " { 'state': 'pre-switchover' } }");
> >>  +
> >>  + qtest_qmp_eventwait(to, "RESUME");
> >>  +
> >>  + wait_for_serial("dest_serial");
> >>  + wait_for_migration_complete(from);
> >>  +
> >>  + downtime = read_migrate_property_int(from, "downtime");
> >>  + /*
> >>  + * Actual downtime may be greater than downtime limit,
> >>  + * but the difference should be small enough (~20ms)
> >>  + */
> >>  + g_assert_cmpint(downtime, <, downtime_limit + 20);
> >>  +
> >>  + g_free(uri);
> >>  +
> >>  + test_migrate_end(from, to, true);
> >>  +}
> >>  +
> >>   int main(int argc, char **argv)
> >>   {
> >>       char template[] = "/tmp/migration-test-XXXXXX";
> >>  @@ -1176,6 +1272,7 @@ int main(int argc, char **argv)
> >>       /* qtest_add_func("/migration/ignore_shared", test_ignore_shared); */
> >>       qtest_add_func("/migration/xbzrle/unix", test_xbzrle_unix);
> >>       qtest_add_func("/migration/fd_proto", test_migrate_fd_proto);
> >>  + qtest_add_func("/migration/auto_converge", test_migrate_auto_converge);
> >>
> >>       ret = g_test_run();
> >>
> >>  --
> >>  2.22.0
> > --
> > Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
> 
> Regards,
> Yury
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-07-23 10:24 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-18  9:17 [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct Yury Kotov
2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 1/3] qemu-thread: Add qemu_cond_timedwait Yury Kotov
2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 2/3] cpus: Fix throttling during vm_stop Yury Kotov
2019-07-18  9:17 ` [Qemu-devel] [PATCH v3 3/3] tests/migration: Add a test for auto converge Yury Kotov
2019-07-22 17:35   ` Dr. David Alan Gilbert
2019-07-23  8:54     ` Yury Kotov
2019-07-23 10:23       ` Dr. David Alan Gilbert
2019-07-18 15:33 ` [Qemu-devel] [PATCH v3 0/3] High downtime with 95+ throttle pct no-reply

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).