Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add overhead of all DBs and rehashing dict count to info. #12913

Merged
merged 30 commits into from
Mar 1, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
828d9c5
Add db overhead and rehashing dict count to info.
CharlesChen888 Jan 5, 2024
49701d3
Remove part of the test.
CharlesChen888 Jan 5, 2024
577fae0
Change to show ht0 and ht1.
CharlesChen888 Jan 24, 2024
b94bb8e
Skip in external server tests.
CharlesChen888 Jan 24, 2024
388ec76
Change metric.
CharlesChen888 Jan 24, 2024
3883112
Change metric's name.
CharlesChen888 Jan 25, 2024
c02cd25
Update tests.
CharlesChen888 Jan 25, 2024
941b0cc
Clear hashtable overhead when dict is cleared.
CharlesChen888 Jan 26, 2024
9adba36
Dedict ht0 from metric when clearin…
CharlesChen888 Jan 29, 2024
54e0443
Simplify clearHashtableOverhead.
CharlesChen888 Jan 29, 2024
9f29d61
Merge branch 'unstable' into add-db-meta-data-to-info
CharlesChen888 Feb 19, 2024
397bcf9
Maintain rehashing overhead info inside kvstore.
CharlesChen888 Feb 19, 2024
6269232
Remove unecessary include. Calculate memory inside kvstore. Count ove…
CharlesChen888 Feb 20, 2024
6936a6f
Merge branch 'unstable' into add-db-meta-data-to-info
CharlesChen888 Feb 21, 2024
37921b8
Fix reply map len. Add metric to memory stats.
CharlesChen888 Feb 21, 2024
1ff269b
Remove unnecessary calculation.
CharlesChen888 Feb 21, 2024
f3dc2d1
Modify reply schema.
CharlesChen888 Feb 21, 2024
dfe61be
Change metirc name to avoid reply schema linter check.
CharlesChen888 Feb 21, 2024
fd1d3a4
Modify metric name in test.
CharlesChen888 Feb 21, 2024
d78c41f
Remove unnecessary return. Make test more robust.
CharlesChen888 Feb 22, 2024
98d8a78
Optimize test "Redis can resize empty dict".
CharlesChen888 Feb 22, 2024
a73ae1c
Remove unnecessary adding key.
CharlesChen888 Feb 22, 2024
d6a0c87
Add prefix to metirc name to prevent misunderstanding.
CharlesChen888 Feb 23, 2024
f5efa23
Optimize memory stats display.
CharlesChen888 Feb 23, 2024
628c7db
Revert "Optimize memory stats display."
CharlesChen888 Feb 27, 2024
62f3dfe
Optimize memory stats display using bucket count.
CharlesChen888 Feb 27, 2024
3a2680e
Clear metrics in kvstoreEmpty.
CharlesChen888 Feb 27, 2024
8112d56
Memory stats display only dbs with allocated dicts.
CharlesChen888 Feb 29, 2024
d3d6f2c
Rename everything again.
CharlesChen888 Feb 29, 2024
daa580a
Merge branch 'unstable' into add-db-meta-data-to-info
CharlesChen888 Feb 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 11 additions & 12 deletions src/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -430,10 +430,11 @@ void dictRehashingStarted(dict *d, dbKeyType keyType) {
listAddNodeTail(server.rehashing, d);
metadata->rehashing_node = listLast(server.rehashing);

if (!server.cluster_enabled) return;
unsigned long long from, to;
dictRehashingInfo(d, &from, &to);
server.db[0].sub_dict[keyType].bucket_count += to; /* Started rehashing (Add the new ht size) */
server.db_bucket_overhead_ht1 += to;
if (!server.cluster_enabled) return;
server.db[0].sub_dict[keyType].bucket_count += to; /* Started rehashing (Add the new ht size) */
}

/* Remove dictionary from the rehashing list.
Expand All @@ -447,9 +448,12 @@ void dictRehashingCompleted(dict *d, dbKeyType keyType) {
metadata->rehashing_node = NULL;
}

if (!server.cluster_enabled) return;
unsigned long long from, to;
dictRehashingInfo(d, &from, &to);
server.db_bucket_overhead_ht1 -= to;
server.db_bucket_overhead_ht0 -= from;
server.db_bucket_overhead_ht0 += to;
if (!server.cluster_enabled) return;
server.db[0].sub_dict[keyType].bucket_count -= from; /* Finished rehashing (Remove the old ht size) */
}

Expand Down Expand Up @@ -2742,6 +2746,8 @@ void initServer(void) {
listSetFreeMethod(server.db[j].defrag_later,(void (*)(void*))sdsfree);
}
server.rehashing = listCreate();
server.db_bucket_overhead_ht0 = 0;
server.db_bucket_overhead_ht1 = 0;
evictionPoolAlloc(); /* Initialize the LRU keys pool. */
server.pubsub_channels = dictCreate(&keylistDictType);
server.pubsub_patterns = dictCreate(&keylistDictType);
Expand Down Expand Up @@ -5681,13 +5687,6 @@ sds genRedisInfoString(dict *section_dict, int all_sections, int everything) {
bytesToHuman(used_memory_rss_hmem,sizeof(used_memory_rss_hmem),server.cron_malloc_stats.process_rss);
bytesToHuman(maxmemory_hmem,sizeof(maxmemory_hmem),server.maxmemory);

size_t databases_overhead_main = 0;
size_t databases_overhead_expires = 0;
for (size_t i = 0; i < mh->num_dbs; i++) {
databases_overhead_main += mh->db[i].overhead_ht_main;
databases_overhead_expires += mh->db[i].overhead_ht_expires;
}

if (sections++) info = sdscat(info,"\r\n");
info = sdscatprintf(info, "# Memory\r\n" FMTARGS(
"used_memory:%zu\r\n", zmalloc_used,
Expand Down Expand Up @@ -5742,8 +5741,8 @@ sds genRedisInfoString(dict *section_dict, int all_sections, int everything) {
"mem_cluster_links:%zu\r\n", mh->cluster_links,
"mem_aof_buffer:%zu\r\n", mh->aof_buffer,
"mem_allocator:%s\r\n", ZMALLOC_LIB,
"mem_databases_overhead_main:%zu\r\n", databases_overhead_main,
"mem_databases_overhead_expires:%zu\r\n", databases_overhead_expires,
"mem_db_bucket_overhead_ht0:%zu\r\n", server.db_bucket_overhead_ht0 * sizeof(dictEntry*),
"mem_db_bucket_overhead_ht1:%zu\r\n", server.db_bucket_overhead_ht1 * sizeof(dictEntry*),
oranagra marked this conversation as resolved.
Show resolved Hide resolved
"databases_rehashing_dict_count:%lu\r\n", listLength(server.rehashing),
"active_defrag_running:%d\r\n", server.active_defrag_running,
"lazyfree_pending_objects:%zu\r\n", lazyfreeGetPendingObjectsCount(),
Expand Down
2 changes: 2 additions & 0 deletions src/server.h
Original file line number Diff line number Diff line change
Expand Up @@ -1574,6 +1574,8 @@ struct redisServer {
int in_fork_child; /* indication that this is a fork child */
redisDb *db;
list *rehashing; /* List of dictionaries in DBs that are currently rehashing. */
size_t db_bucket_overhead_ht0; /* The overhead of storing keys. */
size_t db_bucket_overhead_ht1; /* The overhead of rehashing. */
dict *commands; /* Command table */
dict *orig_commands; /* Command table before command renaming. */
aeEventLoop *el;
Expand Down
43 changes: 25 additions & 18 deletions tests/unit/info.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -401,24 +401,31 @@ start_server {tags {"info" "external:skip"}} {
fail "pubsub clients did not clear"
}
}
}
}

test {memory: database overhead and rehashing dict count} {
r flushall
set info_mem [r info memory]
assert_equal [getInfoProperty $info_mem mem_databases_overhead_main] {0}
assert_equal [getInfoProperty $info_mem mem_databases_overhead_expires] {0}
assert_equal [getInfoProperty $info_mem databases_rehashing_dict_count] {0}
r set a b ex 10
set info_mem [r info memory]
assert {[getInfoProperty $info_mem mem_databases_overhead_main] > {0}}
assert {[getInfoProperty $info_mem mem_databases_overhead_expires] > {0}}
assert_equal [getInfoProperty $info_mem databases_rehashing_dict_count] {0}
r select 3
for {set i 0} {$i < 40} {incr i} {
r set key$i 123
}
set info_mem [r info memory]
assert_equal [getInfoProperty $info_mem databases_rehashing_dict_count] {1}
}
start_server {tags {"info"}} {
test {memory: database overhead and rehashing dict count} {
r flushall
set info_mem [r info memory]
assert_equal [getInfoProperty $info_mem mem_db_bucket_overhead_ht0] {0}
assert_equal [getInfoProperty $info_mem mem_db_bucket_overhead_ht1] {0}
assert_equal [getInfoProperty $info_mem databases_rehashing_dict_count] {0}
r set a b
set info_mem [r info memory]
assert_equal [getInfoProperty $info_mem mem_db_bucket_overhead_ht0] {32}
assert_equal [getInfoProperty $info_mem mem_db_bucket_overhead_ht1] {0}
assert_equal [getInfoProperty $info_mem databases_rehashing_dict_count] {0}
# set 4 more keys to trigger rehashing, and get the info within a transaction to make
# sure the rehashing is not completed
r multi
r set b c
r set c d
r set d e
r set e f
r info memory
set info_mem [lindex [r exec] 4]
assert_equal [getInfoProperty $info_mem databases_rehashing_dict_count] {1}
assert_equal [getInfoProperty $info_mem mem_db_bucket_overhead_ht1] {64}
}
}
Loading