diff options
author | Dave Barach <dave@barachs.net> | 2018-06-27 10:49:17 -0400 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2018-06-27 20:51:08 +0000 |
commit | 0654dcc7b9370be6472f306d0a7b5ba9bf2b7962 (patch) | |
tree | 9897db3cf0b58a7085b555cc7a25183a1d0de527 /src/vppinfra/test_pool_iterate.c | |
parent | 6e74aa2b9877623c6130d7b2a43b7d8fd0a1b9f8 (diff) |
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 <dave@barachs.net>
Diffstat (limited to 'src/vppinfra/test_pool_iterate.c')
-rw-r--r-- | src/vppinfra/test_pool_iterate.c | 49 |
1 files changed, 48 insertions, 1 deletions
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; } |