]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
OPTIM: ebtree: pack the struct eb_node to avoid holes on 64-bit
authorWilly Tarreau <w@1wt.eu>
Sat, 7 Dec 2013 00:09:04 +0000 (01:09 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 7 Dec 2013 00:36:08 +0000 (01:36 +0100)
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.

ebtree/ebtree.h

index e5bcb5038643da552e4f9f35e1bb48572b255db5..39226e3fb58a8bbe22ee4a4be1865ea379d15eab 100644 (file)
@@ -377,7 +377,7 @@ struct eb_node {
        eb_troot_t    *leaf_p;  /* leaf node's parent */
        short int      bit;     /* link's bit position. */
        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> */
 #define eb_entry(ptr, type, member) container_of(ptr, type, member)