[ovs-dev] [PATCH] test-atomic: Stop testing when running slow.

Jarno Rajahalme jrajahalme at nicira.com
Tue Jan 13 21:03:31 UTC 2015


On Jan 12, 2015, at 11:48 PM, Motonori Shindo <motonori at shin.do> wrote:

> Jarno,
> 
> Thanks for the patch. With this patch, I confirmed that I no longer encounter the problem I reported before. Just curious but where is VLOG_INFO() written to in this case?

Thanks for the report.

The blog output goes to stderr by default. The test case expects no output, so any output will fail the test case.

  Jarno

> 
> ---
> Motonori Shindo
> 
> 
> 2015-01-13 6:27 GMT+09:00 Jarno Rajahalme <jrajahalme at nicira.com>:
> When the test suite is run on an OS with 1 core (e.g., a VM with one
> core assigned to it), some of the atomic memory model tests take a
> long time, with the effect that the test seems stuck.
> 
> This patch stops these tests after one second and only fails the test
> if there has not been any significant progress, allowing the test to
> pass also when running only with one core.
> 
> Reported-by: Motonori Shindo <motonori at shin.do>
> Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
> ---
>  tests/test-atomic.c |   40 ++++++++++++++++++++++++++++++++++++----
>  1 file changed, 36 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/test-atomic.c b/tests/test-atomic.c
> index dcd0a73..0f7f2c0 100644
> --- a/tests/test-atomic.c
> +++ b/tests/test-atomic.c
> @@ -17,9 +17,13 @@
>  #include <config.h>
>  #undef NDEBUG
>  #include "ovs-atomic.h"
> -#include "util.h"
>  #include "ovstest.h"
>  #include "ovs-thread.h"
> +#include "timeval.h"
> +#include "util.h"
> +#include "openvswitch/vlog.h"
> +
> +VLOG_DEFINE_THIS_MODULE(test_atomic);
> 
>  #define TEST_ATOMIC_TYPE(ATOMIC_TYPE, BASE_TYPE)        \
>      {                                                   \
> @@ -186,6 +190,7 @@ atomic_consumer(void * arg1 OVS_UNUSED)
>  {
>      struct atomic_aux *old_aux = NULL;
>      uint64_t count;
> +    long long int stop_time = time_msec() + 1000;
> 
>      do {
>          struct atomic_aux *aux;
> @@ -202,7 +207,14 @@ atomic_consumer(void * arg1 OVS_UNUSED)
>          ovs_assert(b == count + 42);
> 
>          old_aux = aux;
> -    } while (count < ATOMIC_ITEM_COUNT - 1);
> +    } while (count < ATOMIC_ITEM_COUNT - 1 && time_msec() < stop_time);
> +
> +    if (time_msec() >= stop_time) {
> +        if (count < 10) {
> +            VLOG_INFO("atomic_consumer test stopped due to excessive runtime. "
> +                      "Count = %"PRIu64, count);
> +        }
> +    }
> 
>      return NULL;
>  }
> @@ -249,6 +261,8 @@ atomic_reader(void *aux_)
>      struct atomic_aux *aux = aux_;
>      uint64_t count;
>      uint64_t data;
> +    long long int now = time_msec();
> +    long long int stop_time = now + 1000;
> 
>      do {
>          /* Non-synchronized add. */
> @@ -256,7 +270,15 @@ atomic_reader(void *aux_)
> 
>          do {
>              atomic_read_explicit(&aux->data64, &data, memory_order_acquire);
> -        } while (!data);
> +        } while (!data && (now = time_msec()) < stop_time);
> +
> +        if (now >= stop_time) {
> +            if (count < 10) {
> +                VLOG_INFO("atomic_reader test stopped due to excessive "
> +                          "runtime. Count = %"PRIu64, count);
> +            }
> +            break;
> +        }
> 
>          ovs_assert(data == a && data == aux->b && a == aux->b);
> 
> @@ -277,12 +299,22 @@ atomic_writer(void *aux_)
>      uint64_t old_count;
>      uint64_t data;
>      size_t i;
> +    long long int now = time_msec();
> +    long long int stop_time = now + 1000;
> 
>      for (i = 0; i < ATOMIC_ITEM_COUNT; i++) {
>          /* Wait for the reader to be done with the data. */
>          do {
>              atomic_read_explicit(&aux->data64, &data, memory_order_acquire);
> -        } while (data);
> +        } while (data && (now = time_msec()) < stop_time);
> +
> +        if (now >= stop_time) {
> +            if (i < 10) {
> +                VLOG_INFO("atomic_writer test stopped due to excessive "
> +                          "runtime, Count = %"PRIuSIZE, i);
> +            }
> +            break;
> +        }
> 
>          a = i + 1;
>          atomic_add_explicit(&aux->count, 1, &old_count, memory_order_relaxed);
> --
> 1.7.10.4
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
> 




More information about the dev mailing list