OPTIM: ebtree: pack the struct eb_node to avoid holes on 64-bit

struct eb_node is 36 bytes on a 64-bit machine. It's thus rounded
up to 40 bytes, and when forming a struct eb32_node, another 4 bytes
are added, rounded up to 48 bytes. We waste 8 bytes of space on 48
bytes because of alignments. It's basically the same with memory
blocks and immediate strings.

By packing the structure, eb32_node is down to 40 bytes. This saves
16 bytes per struct task and 20 bytes per struct stksess, used to
store each stick-table key.
This commit is contained in:
Willy Tarreau 2013-12-07 01:09:04 +01:00
parent 37e340ce4b
commit f82eb02830

View File

@ -377,7 +377,7 @@ struct eb_node {
eb_troot_t *leaf_p; /* leaf node's parent */ eb_troot_t *leaf_p; /* leaf node's parent */
short int bit; /* link's bit position. */ short int bit; /* link's bit position. */
short unsigned int pfx; /* data prefix length, always related to leaf */ short unsigned int pfx; /* data prefix length, always related to leaf */
}; } __attribute__((packed));
/* Return the structure of type <type> whose member <member> points to <ptr> */ /* Return the structure of type <type> whose member <member> points to <ptr> */
#define eb_entry(ptr, type, member) container_of(ptr, type, member) #define eb_entry(ptr, type, member) container_of(ptr, type, member)