[ovs-dev] [PATCH] hmap: Improve debug log message when reporting unusually large buckets.
Ben Pfaff
blp at ovn.org
Mon Mar 25 23:56:44 UTC 2019
I was seeing a lot of these messages, including a lot of them suppressed
by rate-limiting, and I wondered whether any really big messages were
being suppressed. By reporting the largest bucket, instead of just every
large bucket, it becomes more likely that the truly too-large buckets get
reported.
(The problem I saw was a false alarm.)
Signed-off-by: Ben Pfaff <blp at ovn.org>
---
lib/hmap.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/lib/hmap.c b/lib/hmap.c
index 1ba4a5716a78..20161698af5d 100644
--- a/lib/hmap.c
+++ b/lib/hmap.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2009, 2010, 2012, 2013, 2015 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2012, 2013, 2015, 2019 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -103,6 +103,7 @@ resize(struct hmap *hmap, size_t new_mask, const char *where)
tmp.buckets[i] = NULL;
}
}
+ int max_count = 0;
for (i = 0; i <= hmap->mask; i++) {
struct hmap_node *node, *next;
int count = 0;
@@ -111,15 +112,20 @@ resize(struct hmap *hmap, size_t new_mask, const char *where)
hmap_insert_fast(&tmp, node, node->hash);
count++;
}
- if (count > 5) {
- static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(10, 10);
- COVERAGE_INC(hmap_pathological);
- VLOG_DBG_RL(&rl, "%s: %d nodes in bucket (%"PRIuSIZE" nodes, %"PRIuSIZE" buckets)",
- where, count, hmap->n, hmap->mask + 1);
+ if (count > max_count) {
+ max_count = count;
}
}
hmap_swap(hmap, &tmp);
hmap_destroy(&tmp);
+
+ if (max_count > 5) {
+ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(10, 10);
+ COVERAGE_INC(hmap_pathological);
+ VLOG_DBG_RL(&rl, "%s: %d nodes in bucket "
+ "(%"PRIuSIZE" nodes, %"PRIuSIZE" buckets)",
+ where, max_count, hmap->n, hmap->mask + 1);
+ }
}
static size_t
--
2.20.1
More information about the dev
mailing list