From: Zbigniew Jędrzejewski-Szmek Date: Fri, 14 May 2021 15:28:48 +0000 (+0200) Subject: resolved: optimize layout of DnsTransaction X-Git-Tag: v249-rc1~203^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9aeb1a541bbb08616af1b4e5495d4bd4bfed6490;p=thirdparty%2Fsystemd.git resolved: optimize layout of DnsTransaction /* size: 296, cachelines: 5, members: 46 */ /* sum members: 278, holes: 5, sum holes: 17 */ /* sum bitfield members: 4 bits, bit holes: 1, sum bit holes: 4 bits */ ↓ /* size: 280, cachelines: 5, members: 46 */ /* sum members: 278, holes: 1, sum holes: 1 */ /* sum bitfield members: 4 bits, bit holes: 1, sum bit holes: 4 bits */ --- diff --git a/src/resolve/resolved-dns-transaction.h b/src/resolve/resolved-dns-transaction.h index c2d73cbedc5..498cabb7e50 100644 --- a/src/resolve/resolved-dns-transaction.h +++ b/src/resolve/resolved-dns-transaction.h @@ -57,17 +57,6 @@ struct DnsTransaction { uint64_t query_flags; - DnsTransactionState state; - - uint16_t id; - - bool tried_stream:1; - - bool initial_jitter_scheduled:1; - bool initial_jitter_elapsed:1; - - bool probing:1; - DnsPacket *sent, *received; DnsAnswer *answer; @@ -77,6 +66,8 @@ struct DnsTransaction { uint32_t answer_nsec_ttl; int answer_errno; /* if state is DNS_TRANSACTION_ERRNO */ + DnsTransactionState state; + /* SD_RESOLVED_AUTHENTICATED here indicates whether the primary answer is authenticated, i.e. whether * the RRs from answer which directly match the question are authenticated, or, if there are none, * whether the NODATA or NXDOMAIN case is. It says nothing about additional RRs listed in the answer, @@ -93,8 +84,6 @@ struct DnsTransaction { sd_event_source *timeout_event_source; unsigned n_attempts; - unsigned n_picked_servers; - /* UDP connection logic, if we need it */ int dns_udp_fd; sd_event_source *dns_udp_event_source; @@ -114,6 +103,15 @@ struct DnsTransaction { DnsServerFeatureLevel clamp_feature_level_servfail; DnsServerFeatureLevel clamp_feature_level_nxdomain; + uint16_t id; + + bool tried_stream:1; + + bool initial_jitter_scheduled:1; + bool initial_jitter_elapsed:1; + + bool probing:1; + /* Query candidates this transaction is referenced by and that * shall be notified about this specific transaction * completing. */ @@ -133,11 +131,15 @@ struct DnsTransaction { * created in order to request DNSKEY or DS RRs. */ Set *dnssec_transactions; + unsigned n_picked_servers; + unsigned block_gc; LIST_FIELDS(DnsTransaction, transactions_by_scope); LIST_FIELDS(DnsTransaction, transactions_by_stream); LIST_FIELDS(DnsTransaction, transactions_by_key); + + /* Note: fields should be ordered to minimize alignment gaps. Use pahole! */ }; int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key, DnsPacket *bypass, uint64_t flags);