mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
Reorder some class variables to fill in gaps in structure packing
The big hitters: Dict: Fills in four 4-byte holes in the structure. This shrinks Dictionary from 136 bytes to 114 bytes. Desc: Fills in a 6-byte hole in the structure. This shrinks ODesc from 152 bytes to 144 bytes. Frame: Moves and combines 4 bool variables from a few places into one single 4-byte block. This resolves all of the holes at once. This shrinks Frame from 216 bytes to 192 bytes and removes one cache line. Func: Moves one int32_t variable to fill in a 4-byte hole. This shrinks Func from 112 bytes to 104 bytes. ID: Moves two bool variables to fill in a 3-byte hole. This leaves behind a 1-byte hole, but removes a 6-byte pad from the end of the structure. This shrinks ID from 144 bytes to 136 bytes. Other changes: RuleHdrTest: Fills in one 4-byte hole in the structure. This shrinks RuleHdrTest from 248 bytes to 240 bytes. RuleEndpointState: Moves one bool variable down in the structure to reduce a 7-byte hole. This unfortunately causes a 3-byte hole later in the structure but there’s no easy way to filll it in. This does shrink RuleEndpointState from 128 bytes to 120 bytes though. ScannedFile: Moves two bool values to reduce a 4-byte hole by 2 bytes. This shrinks ScannedFile from 64 bytes to 56 bytes. Brofiler: Moves one char value to reduce a 4-byte hole by 1 byte. This shrinks Brofiler from 96 bytes to 88 bytes and removes one cache line. DbgBreakpoint: Moves some values around to fill in a 4-byte hole and reduce a second. A 2-byte hole still exists, but the structure shrinks from 632 bytes to 624 bytes. It’s possible on this one that one of the int32_t values could be an int16_t and remove the last 2-byte gap. ParseLocationRec: Moves one int to fill in a 4-byte hole. This shrinks ParseLocationRec from 32 bytes to 24 bytes. DebugCmdInfo: Moves one bool variable to shift a few others up. This results in a 6-byte pad at the end of the structure but removes a 7-byte hole in the middle. This shrinks DebugCmdInfo from 56 bytes to 48 bytes. FragReassembler: Moves one variable down to fill in a 4-byte hole. This shrinks FragReassembler from 272 bytes to 264 bytes. nb_dns_result: Moves ones uint32_t variable to fill in a 4-byte hole, also removing a 4-byte pad from the end of the structure. This shrinks nb_dns_result from 32 bytes to 24 bytes. nb_dns_entry: Moves one short value to fill in a 2-byte hole, also removing a 6-byte hole. This shrinks nb_dns_entry from 1064 bytes to 1056 bytes.
This commit is contained in:
parent
e66148a13a
commit
2964093e5d
16 changed files with 45 additions and 43 deletions
|
@ -56,7 +56,12 @@ private:
|
|||
* Indicates whether new statments will not be considered as part of
|
||||
* coverage statistics because it was marked with the @no-test tag.
|
||||
*/
|
||||
unsigned int ignoring;
|
||||
uint32_t ignoring;
|
||||
|
||||
/**
|
||||
* The character to use to delimit Brofiler output files. Default is '\t'.
|
||||
*/
|
||||
char delim;
|
||||
|
||||
/**
|
||||
* This maps Stmt location-desc pairs to the total number of times that
|
||||
|
@ -66,11 +71,6 @@ private:
|
|||
*/
|
||||
map<pair<string, string>, uint64_t> usage_map;
|
||||
|
||||
/**
|
||||
* The character to use to delimit Brofiler output files. Default is '\t'.
|
||||
*/
|
||||
char delim;
|
||||
|
||||
/**
|
||||
* A canonicalization routine for Stmt descriptions containing characters
|
||||
* that don't agree with the output format of Brofiler.
|
||||
|
|
|
@ -163,11 +163,11 @@ protected:
|
|||
|
||||
struct AsyncRequest {
|
||||
double time;
|
||||
bool is_txt;
|
||||
bool processed;
|
||||
IPAddr host;
|
||||
string name;
|
||||
CallbackList callbacks;
|
||||
bool is_txt;
|
||||
bool processed;
|
||||
|
||||
AsyncRequest() : time(0.0), is_txt(false), processed(false) { }
|
||||
|
||||
|
|
|
@ -63,21 +63,21 @@ protected:
|
|||
void PrintHitMsg(); // display reason when the breakpoint hits
|
||||
|
||||
Kind kind;
|
||||
bool enabled; // ### comment this and next
|
||||
bool temporary;
|
||||
int BPID;
|
||||
int32_t BPID;
|
||||
|
||||
char description[512];
|
||||
string function_name; // location
|
||||
const char* source_filename;
|
||||
int source_line;
|
||||
int32_t source_line;
|
||||
bool enabled; // ### comment this and next
|
||||
bool temporary;
|
||||
|
||||
Stmt* at_stmt;
|
||||
double at_time; // break when the virtual time is this
|
||||
|
||||
// Support for conditional and N'th time breakpoints.
|
||||
int repeat_count; // if positive, break after this many hits
|
||||
int hit_count; // how many times it's been hit (w/o breaking)
|
||||
int32_t repeat_count; // if positive, break after this many hits
|
||||
int32_t hit_count; // how many times it's been hit (w/o breaking)
|
||||
|
||||
string condition; // condition to evaluate; nil for none
|
||||
};
|
||||
|
|
|
@ -18,9 +18,9 @@ class Stmt;
|
|||
enum ParseLocationRecType { plrUnknown, plrFileAndLine, plrFunction };
|
||||
struct ParseLocationRec {
|
||||
ParseLocationRecType type;
|
||||
int32_t line;
|
||||
Stmt* stmt;
|
||||
const char* filename;
|
||||
int line;
|
||||
};
|
||||
|
||||
class StmtLocMapping;
|
||||
|
|
|
@ -30,14 +30,13 @@ public:
|
|||
protected:
|
||||
DebugCmd cmd;
|
||||
|
||||
int num_names;
|
||||
int32_t num_names;
|
||||
std::vector<const char*> names;
|
||||
const char* const helpstring;
|
||||
|
||||
// Whether executing this should restart execution of the script.
|
||||
bool resume_execution;
|
||||
|
||||
const char* const helpstring;
|
||||
|
||||
// Does entering a blank line repeat this command?
|
||||
bool repeatable;
|
||||
};
|
||||
|
|
10
src/Desc.h
10
src/Desc.h
|
@ -190,15 +190,17 @@ protected:
|
|||
|
||||
bool utf8; // whether valid utf-8 sequences may pass through unescaped
|
||||
bool escape; // escape unprintable characters in output?
|
||||
typedef std::set<std::string> escape_set;
|
||||
bool is_short;
|
||||
bool want_quotes;
|
||||
|
||||
int indent_with_spaces;
|
||||
|
||||
using escape_set = std::set<std::string>;
|
||||
escape_set escape_sequences; // additional sequences of chars to escape
|
||||
|
||||
BroFile* f; // or the file we're using.
|
||||
|
||||
int indent_level;
|
||||
int indent_with_spaces;
|
||||
bool is_short;
|
||||
bool want_quotes;
|
||||
bool do_flush;
|
||||
bool include_stats;
|
||||
|
||||
|
|
|
@ -162,17 +162,18 @@ private:
|
|||
int num_buckets = 0;
|
||||
int num_entries = 0;
|
||||
int max_num_entries = 0;
|
||||
int thresh_entries = 0;
|
||||
uint64_t cumulative_entries = 0;
|
||||
double den_thresh = 0.0;
|
||||
int thresh_entries = 0;
|
||||
|
||||
// Resizing table (replicates tbl above).
|
||||
PList<DictEntry>** tbl2 = nullptr;
|
||||
int num_buckets2 = 0;
|
||||
int num_entries2 = 0;
|
||||
int max_num_entries2 = 0;
|
||||
double den_thresh2 = 0;
|
||||
|
||||
int thresh_entries2 = 0;
|
||||
double den_thresh2 = 0;
|
||||
|
||||
hash_t tbl_next_ind = 0;
|
||||
|
||||
|
|
|
@ -44,11 +44,11 @@ protected:
|
|||
|
||||
u_char* proto_hdr;
|
||||
IP_Hdr* reassembled_pkt;
|
||||
uint16_t proto_hdr_len;
|
||||
NetSessions* s;
|
||||
uint64_t frag_size; // size of fully reassembled fragment
|
||||
uint16_t next_proto; // first IPv6 fragment header's next proto field
|
||||
FragReassemblerKey key;
|
||||
uint16_t next_proto; // first IPv6 fragment header's next proto field
|
||||
uint16_t proto_hdr_len;
|
||||
|
||||
FragTimer* expire_timer;
|
||||
};
|
||||
|
|
10
src/Frame.h
10
src/Frame.h
|
@ -261,6 +261,11 @@ private:
|
|||
/** The number of vals that can be stored in this frame. */
|
||||
int size;
|
||||
|
||||
bool weak_closure_ref = false;
|
||||
bool break_before_next_stmt;
|
||||
bool break_on_return;
|
||||
bool delayed;
|
||||
|
||||
/** Associates ID's offsets with values. */
|
||||
Val** frame;
|
||||
|
||||
|
@ -270,7 +275,6 @@ private:
|
|||
|
||||
/** The enclosing frame of this frame. */
|
||||
Frame* closure;
|
||||
bool weak_closure_ref = false;
|
||||
|
||||
/** ID's used in this frame from the enclosing frame. */
|
||||
id_list outer_ids;
|
||||
|
@ -289,12 +293,8 @@ private:
|
|||
/** The next statement to be evaluted in the context of this frame. */
|
||||
Stmt* next_stmt;
|
||||
|
||||
bool break_before_next_stmt;
|
||||
bool break_on_return;
|
||||
|
||||
IntrusivePtr<trigger::Trigger> trigger;
|
||||
const CallExpr* call;
|
||||
bool delayed;
|
||||
|
||||
std::vector<BroFunc*> functions_with_closure_frame_reference;
|
||||
};
|
||||
|
|
|
@ -111,9 +111,9 @@ protected:
|
|||
vector<Body> bodies;
|
||||
IntrusivePtr<Scope> scope;
|
||||
Kind kind;
|
||||
uint32_t unique_id;
|
||||
IntrusivePtr<BroType> type;
|
||||
string name;
|
||||
uint32_t unique_id;
|
||||
static vector<Func*> unique_ids;
|
||||
};
|
||||
|
||||
|
|
4
src/ID.h
4
src/ID.h
|
@ -122,6 +122,8 @@ protected:
|
|||
const char* name;
|
||||
IDScope scope;
|
||||
bool is_export;
|
||||
bool infer_return_type;
|
||||
bool weak_ref;
|
||||
IntrusivePtr<BroType> type;
|
||||
bool is_const, is_enum_const, is_type, is_option;
|
||||
int offset;
|
||||
|
@ -130,6 +132,4 @@ protected:
|
|||
// contains list of functions that are called when an option changes
|
||||
std::multimap<int, IntrusivePtr<Func>> option_handlers;
|
||||
|
||||
bool infer_return_type;
|
||||
bool weak_ref;
|
||||
};
|
||||
|
|
|
@ -93,17 +93,18 @@ struct ScannedFile {
|
|||
dev_t dev;
|
||||
ino_t inode;
|
||||
int include_level;
|
||||
string name;
|
||||
bool skipped; // This ScannedFile was @unload'd.
|
||||
bool prefixes_checked; // If loading prefixes for this file has been tried.
|
||||
string name;
|
||||
|
||||
ScannedFile(dev_t arg_dev, ino_t arg_inode, int arg_include_level,
|
||||
const string& arg_name, bool arg_skipped = false,
|
||||
bool arg_prefixes_checked = false)
|
||||
: dev(arg_dev), inode(arg_inode),
|
||||
include_level(arg_include_level),
|
||||
name(arg_name), skipped(arg_skipped),
|
||||
prefixes_checked(arg_prefixes_checked)
|
||||
skipped(arg_skipped),
|
||||
prefixes_checked(arg_prefixes_checked),
|
||||
name(arg_name)
|
||||
{ }
|
||||
};
|
||||
|
||||
|
|
|
@ -102,6 +102,7 @@ private:
|
|||
|
||||
uint32_t id; // For debugging, each HdrTest gets an unique ID
|
||||
static uint32_t idcounter;
|
||||
int32_t level; // level within the tree
|
||||
|
||||
// The following are all set by RuleMatcher::BuildRulesTree().
|
||||
friend class RuleMatcher;
|
||||
|
@ -132,8 +133,6 @@ private:
|
|||
|
||||
RuleHdrTest* sibling; // linkage within HdrTest tree
|
||||
RuleHdrTest* child;
|
||||
|
||||
int level; // level within the tree
|
||||
};
|
||||
|
||||
typedef PList<RuleHdrTest> rule_hdr_test_list;
|
||||
|
@ -173,7 +172,6 @@ private:
|
|||
|
||||
typedef PList<Matcher> matcher_list;
|
||||
|
||||
bool is_orig;
|
||||
analyzer::Analyzer* analyzer;
|
||||
RuleEndpointState* opposite;
|
||||
analyzer::pia::PIA* pia;
|
||||
|
@ -188,6 +186,7 @@ private:
|
|||
bstr_list matched_text;
|
||||
|
||||
int payload_size;
|
||||
bool is_orig;
|
||||
|
||||
int_list matched_rules; // Rules for which all conditions have matched
|
||||
};
|
||||
|
|
|
@ -691,7 +691,7 @@ class CompositeHash;
|
|||
class HashKey;
|
||||
class Frame;
|
||||
|
||||
class TableVal : public Val, public notifier::Modifiable {
|
||||
class TableVal final : public Val, public notifier::Modifiable {
|
||||
public:
|
||||
explicit TableVal(IntrusivePtr<TableType> t, IntrusivePtr<Attributes> attrs = nullptr);
|
||||
~TableVal() override;
|
||||
|
|
|
@ -61,10 +61,10 @@ extern int recvfrom(int, void *, int, int, struct sockaddr *, int *);
|
|||
struct nb_dns_entry {
|
||||
struct nb_dns_entry *next;
|
||||
char name[NS_MAXDNAME + 1];
|
||||
u_short id;
|
||||
int qtype; /* query type */
|
||||
int atype; /* address family */
|
||||
int asize; /* address size */
|
||||
u_short id;
|
||||
void *cookie;
|
||||
};
|
||||
|
||||
|
|
|
@ -11,8 +11,8 @@ struct nb_dns_info;
|
|||
struct nb_dns_result {
|
||||
void *cookie;
|
||||
int host_errno;
|
||||
struct hostent *hostent;
|
||||
uint32_t ttl;
|
||||
struct hostent *hostent;
|
||||
};
|
||||
|
||||
typedef unsigned int nb_uint32_t;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue