diff options
author | Costa Tsaousis <costa@netdata.cloud> | 2022-05-03 00:31:19 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-03 00:31:19 +0300 |
commit | 87c0cc2d6049c46f38b9c866668a0a24a3e962c0 (patch) | |
tree | 066c18bc90894e89ce46dc0b2e104c61018e830c /daemon | |
parent | 47fa3d708902fb001b2e88e4145d2a451549cd8e (diff) |
One way allocator to double the speed of parallel context queries (#12787)
* one way allocator to speed up context queries
* fixed a bug while expanding memory pages
* reworked for clarity and finally fixed the bug of allocating memory beyond the page size
* further optimize allocation step to minimize the number of allocations made
* implement strdup with memcpy instead of strcpy
* added documentation
* prevent an uninitialized use of owa
* added callocz() interface
* integrate onewayalloc everywhere - apart sql queries
* one way allocator is now used in context queries using archived charts in sql
* align on the size of pointers
* forgotten freez()
* removed not needed memcpys
* give unique names to global variables to avoid conflicts with system definitions
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/unit_test.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/daemon/unit_test.c b/daemon/unit_test.c index 7a52735d50..2fc16e2d07 100644 --- a/daemon/unit_test.c +++ b/daemon/unit_test.c @@ -1732,7 +1732,8 @@ static int test_dbengine_check_rrdr(RRDSET *st[CHARTS], RRDDIM *rd[CHARTS][DIMS] update_every = REGION_UPDATE_EVERY[current_region]; long points = (time_end - time_start) / update_every; for (i = 0 ; i < CHARTS ; ++i) { - RRDR *r = rrd2rrdr(st[i], points, time_start + update_every, time_end, RRDR_GROUPING_AVERAGE, 0, 0, NULL, NULL, 0); + ONEWAYALLOC *owa = onewayalloc_create(0); + RRDR *r = rrd2rrdr(owa, st[i], points, time_start + update_every, time_end, RRDR_GROUPING_AVERAGE, 0, 0, NULL, NULL, 0); if (!r) { fprintf(stderr, " DB-engine unittest %s: empty RRDR ### E R R O R ###\n", st[i]->name); return ++errors; @@ -1766,8 +1767,9 @@ static int test_dbengine_check_rrdr(RRDSET *st[CHARTS], RRDDIM *rd[CHARTS][DIMS] } } } - rrdr_free(r); + rrdr_free(owa, r); } + onewayalloc_destroy(owa); } return errors; } @@ -1851,7 +1853,8 @@ int test_dbengine(void) long points = (time_end[REGIONS - 1] - time_start[0]) / update_every; // cover all time regions with RRDR long point_offset = (time_start[current_region] - time_start[0]) / update_every; for (i = 0 ; i < CHARTS ; ++i) { - RRDR *r = rrd2rrdr(st[i], points, time_start[0] + update_every, time_end[REGIONS - 1], RRDR_GROUPING_AVERAGE, 0, 0, NULL, NULL, 0); + ONEWAYALLOC *owa = onewayalloc_create(0); + RRDR *r = rrd2rrdr(owa, st[i], points, time_start[0] + update_every, time_end[REGIONS - 1], RRDR_GROUPING_AVERAGE, 0, 0, NULL, NULL, 0); if (!r) { fprintf(stderr, " DB-engine unittest %s: empty RRDR ### E R R O R ###\n", st[i]->name); ++errors; @@ -1888,8 +1891,9 @@ int test_dbengine(void) } } } - rrdr_free(r); + rrdr_free(owa, r); } + onewayalloc_destroy(owa); } error_out: rrd_wrlock(); |