Compare commits

...

1 Commits

Author SHA1 Message Date
alessio
1bedd892fc Remove zero initialization of large buffers
Profiles show that an high amount of CPU time spent in memset.
By removing zero initalization of certain large buffers we improve
performance in certain authoritative workloads.
2025-02-03 11:23:24 +01:00
4 changed files with 62 additions and 34 deletions

View File

@@ -1789,10 +1789,9 @@ dns_qpchain_init(dns_qpreadable_t qpr, dns_qpchain_t *chain) {
REQUIRE(QP_VALID(qp));
REQUIRE(chain != NULL);
*chain = (dns_qpchain_t){
.magic = QPCHAIN_MAGIC,
.qp = qp,
};
chain->magic = QPCHAIN_MAGIC;
chain->qp = qp;
chain->len = 0;
}
unsigned int
@@ -1825,10 +1824,11 @@ dns_qpiter_init(dns_qpreadable_t qpr, dns_qpiter_t *qpi) {
dns_qpreader_t *qp = dns_qpreader(qpr);
REQUIRE(QP_VALID(qp));
REQUIRE(qpi != NULL);
*qpi = (dns_qpiter_t){
.qp = qp,
.magic = QPITER_MAGIC,
};
qpi->qp = qp;
qpi->sp = 0;
qpi->magic = QPITER_MAGIC;
qpi->stack[qpi->sp] = NULL;
}
/*

View File

@@ -1598,11 +1598,17 @@ qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
now = isc_stdtime_now();
}
search = (qpc_search_t){
.qpdb = (qpcache_t *)db,
.options = options,
.now = now,
};
search.qpdb = (qpcache_t *)db;
search.options = options;
/*
* qpchain - Init by dns_qp_lookup
* qpiter - Init by dns_qp_lookup
*/
search.need_cleanup = false;
search.now = now;
search.zonecut = NULL;
search.zonecut_header = NULL;
search.zonecut_sigheader = NULL;
TREE_RDLOCK(&search.qpdb->tree_lock, &tlocktype);

View File

@@ -3379,13 +3379,23 @@ qpzone_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version,
close_version = true;
}
search = (qpz_search_t){
.qpdb = (qpzonedb_t *)db,
.version = (qpz_version_t *)version,
.serial = ((qpz_version_t *)version)->serial,
.options = options,
};
search.qpdb = (qpzonedb_t *)db;
search.version = (qpz_version_t *)version;
search.qpr = (dns_qpread_t) {};
search.serial = ((qpz_version_t *)version)->serial;
search.options = options;
/*
* qpchain -- init in dns_qp_lookup
* qpiter -- init in dns_qp_lookup
*/
search.copy_name = false;
search.need_cleanup = false;
search.wild = false;
search.zonecut = NULL;
search.zonecut_header = NULL;
search.zonecut_sigheader = NULL;
dns_fixedname_init(&search.zonecut_name);
search.now = 0;
if ((options & DNS_DBFIND_FORCENSEC3) != 0) {
dns_qpmulti_query(qpdb->nsec3, &search.qpr);

View File

@@ -54,11 +54,20 @@ dns_rdataset_init(dns_rdataset_t *rdataset) {
REQUIRE(rdataset != NULL);
*rdataset = (dns_rdataset_t){
.magic = DNS_RDATASET_MAGIC,
.link = ISC_LINK_INITIALIZER,
.count = DNS_RDATASET_COUNT_UNDEFINED,
};
rdataset->magic = DNS_RDATASET_MAGIC;
ISC_LINK_INIT(rdataset, link);
rdataset->count = DNS_RDATASET_COUNT_UNDEFINED;
rdataset->methods = NULL;
rdataset->rdclass = 0;
rdataset->type = 0;
rdataset->ttl = 0;
rdataset->trust = 0;
rdataset->covers = 0;
rdataset->attributes = 0;
/* TODO should rdataset->count be initialized to zero? */
rdataset->resign = 0;
}
void
@@ -70,11 +79,18 @@ dns_rdataset_invalidate(dns_rdataset_t *rdataset) {
REQUIRE(DNS_RDATASET_VALID(rdataset));
REQUIRE(rdataset->methods == NULL);
*rdataset = (dns_rdataset_t){
.magic = 0,
.link = ISC_LINK_INITIALIZER,
.count = DNS_RDATASET_COUNT_UNDEFINED,
};
rdataset->magic = 0;
ISC_LINK_INIT(rdataset, link);
rdataset->count = DNS_RDATASET_COUNT_UNDEFINED;
rdataset->rdclass = 0;
rdataset->type = 0;
rdataset->ttl = 0;
rdataset->trust = 0;
rdataset->covers = 0;
rdataset->attributes = 0;
/* TODO should rdataset->count be initialized to zero? */
rdataset->resign = 0;
}
void
@@ -89,11 +105,7 @@ dns__rdataset_disassociate(dns_rdataset_t *rdataset DNS__DB_FLARG) {
if (rdataset->methods->disassociate != NULL) {
(rdataset->methods->disassociate)(rdataset DNS__DB_FLARG_PASS);
}
*rdataset = (dns_rdataset_t){
.magic = DNS_RDATASET_MAGIC,
.link = ISC_LINK_INITIALIZER,
.count = DNS_RDATASET_COUNT_UNDEFINED,
};
dns_rdataset_init(rdataset);
}
bool