From f82eb0283046db906dd5845cd6ee2a26bdc70314 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sat, 7 Dec 2013 01:09:04 +0100 Subject: [PATCH] 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. --- ebtree/ebtree.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebtree/ebtree.h b/ebtree/ebtree.h index e5bcb5038..39226e3fb 100644 --- a/ebtree/ebtree.h +++ b/ebtree/ebtree.h @@ -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 whose member points to */ #define eb_entry(ptr, type, member) container_of(ptr, type, member)