mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 01:50:45 -04:00
Switch qpzone to rdatavec
Replaces rdataslab with rdatavec inside qpzone.c. This leads to a 19.92% reduction of used memory across perflab workloads.
This commit is contained in:
parent
f465976536
commit
4eb0b23efc
6 changed files with 259 additions and 309 deletions
|
|
@ -17,6 +17,7 @@
|
|||
#include <isc/urcu.h>
|
||||
|
||||
#include <dns/nsec3.h>
|
||||
#include <dns/rdatavec.h>
|
||||
#include <dns/types.h>
|
||||
|
||||
#ifdef STRONG_RWLOCK_CHECK
|
||||
|
|
@ -97,7 +98,7 @@ struct dns_gluelist {
|
|||
isc_mem_t *mctx;
|
||||
|
||||
const dns_dbversion_t *version;
|
||||
dns_slabheader_t *header;
|
||||
dns_vecheader_t *header;
|
||||
|
||||
struct dns_glue *glue;
|
||||
|
||||
|
|
|
|||
|
|
@ -87,7 +87,6 @@ struct dns_rdatasetmethods {
|
|||
void (*getownercase)(const dns_rdataset_t *rdataset, dns_name_t *name);
|
||||
isc_result_t (*addglue)(dns_rdataset_t *rdataset,
|
||||
dns_dbversion_t *version, dns_message_t *msg);
|
||||
dns_slabheader_t *(*getheader)(const dns_rdataset_t *rdataset);
|
||||
};
|
||||
|
||||
#define DNS_RDATASET_MAGIC ISC_MAGIC('D', 'N', 'S', 'R')
|
||||
|
|
@ -636,16 +635,6 @@ dns_trust_totext(dns_trust_t trust);
|
|||
* Display trust in textual form.
|
||||
*/
|
||||
|
||||
dns_slabheader_t *
|
||||
dns_rdataset_getheader(const dns_rdataset_t *rdataset);
|
||||
/*%<
|
||||
* Return a pointer to the slabheader for a slab rdataset. If 'rdataset'
|
||||
* is not a slab rdataset or if the slab is raw (lacking a header), return
|
||||
* NULL.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'rdataset' is a valid rdataset.
|
||||
*/
|
||||
|
||||
isc_stdtime_t
|
||||
dns_rdataset_minresign(dns_rdataset_t *rdataset);
|
||||
|
|
|
|||
504
lib/dns/qpzone.c
504
lib/dns/qpzone.c
File diff suppressed because it is too large
Load diff
|
|
@ -588,17 +588,6 @@ dns_rdataset_trimttl(dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset,
|
|||
sigrdataset->ttl = ttl;
|
||||
}
|
||||
|
||||
dns_slabheader_t *
|
||||
dns_rdataset_getheader(const dns_rdataset_t *rdataset) {
|
||||
REQUIRE(DNS_RDATASET_VALID(rdataset));
|
||||
|
||||
if (rdataset->methods->getheader != NULL) {
|
||||
return (rdataset->methods->getheader)(rdataset);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
isc_stdtime_t
|
||||
dns_rdataset_minresign(dns_rdataset_t *rdataset) {
|
||||
dns_rdata_t rdata = DNS_RDATA_INIT;
|
||||
|
|
|
|||
|
|
@ -92,7 +92,6 @@ dns_rdatasetmethods_t dns_rdataslab_rdatasetmethods = {
|
|||
.expire = rdataset_expire,
|
||||
.clearprefetch = rdataset_clearprefetch,
|
||||
.getownercase = rdataset_getownercase,
|
||||
.getheader = rdataset_getheader,
|
||||
};
|
||||
|
||||
/*% Note: the "const void *" are just to make qsort happy. */
|
||||
|
|
@ -126,7 +125,7 @@ makeslab(dns_rdataset_t *rdataset, isc_mem_t *mctx, isc_region_t *region,
|
|||
* new buffer.
|
||||
*/
|
||||
if (rdataset->methods == &dns_rdataslab_rdatasetmethods) {
|
||||
dns_slabheader_t *header = dns_rdataset_getheader(rdataset);
|
||||
dns_slabheader_t *header = rdataset_getheader(rdataset);
|
||||
buflen = dns_rdataslab_size(header);
|
||||
|
||||
rawbuf = isc_mem_get(mctx, buflen);
|
||||
|
|
@ -1120,7 +1119,7 @@ rdataset_getclosest(dns_rdataset_t *rdataset, dns_name_t *name,
|
|||
|
||||
static void
|
||||
rdataset_settrust(dns_rdataset_t *rdataset, dns_trust_t trust) {
|
||||
dns_slabheader_t *header = dns_rdataset_getheader(rdataset);
|
||||
dns_slabheader_t *header = rdataset_getheader(rdataset);
|
||||
|
||||
rdataset->trust = trust;
|
||||
atomic_store(&header->trust, trust);
|
||||
|
|
@ -1128,21 +1127,21 @@ rdataset_settrust(dns_rdataset_t *rdataset, dns_trust_t trust) {
|
|||
|
||||
static void
|
||||
rdataset_expire(dns_rdataset_t *rdataset DNS__DB_FLARG) {
|
||||
dns_slabheader_t *header = dns_rdataset_getheader(rdataset);
|
||||
dns_slabheader_t *header = rdataset_getheader(rdataset);
|
||||
|
||||
dns_db_expiredata(header->node, header);
|
||||
}
|
||||
|
||||
static void
|
||||
rdataset_clearprefetch(dns_rdataset_t *rdataset) {
|
||||
dns_slabheader_t *header = dns_rdataset_getheader(rdataset);
|
||||
dns_slabheader_t *header = rdataset_getheader(rdataset);
|
||||
|
||||
DNS_SLABHEADER_CLRATTR(header, DNS_SLABHEADERATTR_PREFETCH);
|
||||
}
|
||||
|
||||
static void
|
||||
rdataset_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) {
|
||||
dns_slabheader_t *header = dns_rdataset_getheader(rdataset);
|
||||
dns_slabheader_t *header = rdataset_getheader(rdataset);
|
||||
uint8_t mask = (1 << 7);
|
||||
uint8_t bits = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -33,11 +33,11 @@
|
|||
#include <dns/qp.h>
|
||||
#include <dns/rdatalist.h>
|
||||
#include <dns/rdataset.h>
|
||||
#include <dns/rdataslab.h>
|
||||
#include <dns/rdatavec.h>
|
||||
#include <dns/rdatastruct.h>
|
||||
#define KEEP_BEFORE
|
||||
|
||||
#include "rdataslab_p.h"
|
||||
#include "rdatavec_p.h"
|
||||
|
||||
/* Include the main file */
|
||||
|
||||
|
|
@ -187,17 +187,16 @@ ownercase_test_one(const char *str1, const char *str2) {
|
|||
.common.mctx = isc_g_mctx,
|
||||
};
|
||||
qpznode_t node = { .methods = &qpznode_methods, .locknum = 0 };
|
||||
dns_slabheader_t header = {
|
||||
dns_vecheader_t header = {
|
||||
.node = (dns_dbnode_t *)&node,
|
||||
};
|
||||
unsigned char *raw = (unsigned char *)(&header) + sizeof(header);
|
||||
dns_rdataset_t rdataset = {
|
||||
.magic = DNS_RDATASET_MAGIC,
|
||||
.slab = { .db = (dns_db_t *)qpdb,
|
||||
.node = (dns_dbnode_t *)&node,
|
||||
.raw = raw,
|
||||
.vec = { .db = (dns_db_t *)qpdb,
|
||||
.node = (dns_dbnode_t *)&node,
|
||||
.header = &header,
|
||||
},
|
||||
.methods = &dns_rdataslab_rdatasetmethods,
|
||||
.methods = &dns_rdatavec_rdatasetmethods,
|
||||
};
|
||||
isc_buffer_t b;
|
||||
dns_fixedname_t fname1, fname2;
|
||||
|
|
@ -216,7 +215,7 @@ ownercase_test_one(const char *str1, const char *str2) {
|
|||
assert_int_equal(result, ISC_R_SUCCESS);
|
||||
|
||||
/* Store the case from name1 */
|
||||
dns_slabheader_setownercase(&header, name1);
|
||||
dns_vecheader_setownercase(&header, name1);
|
||||
|
||||
assert_true(CASESET(&header));
|
||||
|
||||
|
|
@ -361,17 +360,16 @@ ISC_RUN_TEST_IMPL(setownercase) {
|
|||
.common.mctx = isc_g_mctx,
|
||||
};
|
||||
qpznode_t node = { .methods = &qpznode_methods, .locknum = 0 };
|
||||
dns_slabheader_t header = {
|
||||
dns_vecheader_t header = {
|
||||
.node = (dns_dbnode_t *)&node,
|
||||
};
|
||||
unsigned char *raw = (unsigned char *)(&header) + sizeof(header);
|
||||
dns_rdataset_t rdataset = {
|
||||
.magic = DNS_RDATASET_MAGIC,
|
||||
.slab = { .db = (dns_db_t *)qpdb,
|
||||
.node = (dns_dbnode_t *)&node,
|
||||
.raw = raw,
|
||||
.vec = { .db = (dns_db_t *)qpdb,
|
||||
.node = (dns_dbnode_t *)&node,
|
||||
.header = &header,
|
||||
},
|
||||
.methods = &dns_rdataslab_rdatasetmethods,
|
||||
.methods = &dns_rdatavec_rdatasetmethods,
|
||||
};
|
||||
const char *str1 =
|
||||
"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
|
||||
|
|
|
|||
Loading…
Reference in a new issue