From 0654dcc7b9370be6472f306d0a7b5ba9bf2b7962 Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Wed, 27 Jun 2018 10:49:17 -0400 Subject: Tune pool_get / pool_put Stop spending cycles repeatedly tail-trimming the pool free element bitmap; possibly at the expense of slightly hurting pool_foreach peformance. Change-Id: I8a7f3e7b26c71d7496ba9393b2a167dc7f538355 Signed-off-by: Dave Barach --- src/vppinfra/test_pool_iterate.c | 49 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) (limited to 'src/vppinfra/test_pool_iterate.c') diff --git a/src/vppinfra/test_pool_iterate.c b/src/vppinfra/test_pool_iterate.c index 27ce4bb37b7..406a2a577c2 100644 --- a/src/vppinfra/test_pool_iterate.c +++ b/src/vppinfra/test_pool_iterate.c @@ -28,17 +28,45 @@ main (int argc, char *argv[]) { int i; uword next; + u32 last_len = 0; u32 *tp = 0; u32 *junk; for (i = 0; i < 70; i++) - pool_get (tp, junk); + { + pool_get (tp, junk); + if (vec_len (tp) > last_len) + { + last_len = vec_len (tp); + fformat (stdout, "vec_len (tp) now %d\n", last_len); + } + } (void) junk; /* compiler warning */ pool_put_index (tp, 1); pool_put_index (tp, 65); + for (i = 0; i < 70; i++) + { + int is_free; + + is_free = pool_is_free_index (tp, i); + + if (is_free == 0) + { + if (i == 1 || i == 65) + clib_warning ("oops, free index %d reported busy", i); + } + else + { + if (i != 1 && i != 65) + clib_warning ("oops, busy index %d reported free", i); + } + } + + fformat (stdout, "vec_len (tp) is %d\n", vec_len (tp)); + next = ~0; do { @@ -47,6 +75,25 @@ main (int argc, char *argv[]) } while (next != ~0); + /* *INDENT-OFF* */ + pool_foreach (junk, tp, + ({ + int is_free; + + is_free = pool_is_free_index (tp, junk - tp); + if (is_free == 0) + { + if (i == 1 || i == 65) + clib_warning ("oops, free index %d reported busy", i); + } + else + { + if (i != 1 && i != 65) + clib_warning ("oops, busy index %d reported free", i); + } + })); + /* *INDENT-ON* */ + return 0; } -- cgit 1.2.3-korg