mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-12-04 01:01:00 +01:00
The current guid struct size is 56 bytes. Once reduced using compact
trees, it goes down to 32 (almost half). We're not on a critical path
and size matters here, so better switch to this.
It's worth noting that the name part could also be stored in the
guid_node at the end to save 8 extra byte (no pointer needed anymore),
however the purpose of this struct is to be embedded into other ones,
which is not compatible with having a dynamic size.
Affected struct sizes in bytes:
Before After Diff
server 4032 4032 0*
proxy 3184 3160 -24
listener 752 728 -24
*: struct server is full of holes and padding (176 bytes) and is
64-byte aligned. Moving the guid_node elsewhere such as after sess_conn
reduces it to 3968, or one less cache line. There's no point in moving
anything now because forthcoming patches will arrange other parts.
28 lines
712 B
C
28 lines
712 B
C
#ifndef _HAPROXY_GUID_H
|
|
#define _HAPROXY_GUID_H
|
|
|
|
#include <haproxy/api-t.h>
|
|
#include <haproxy/guid-t.h>
|
|
#include <haproxy/thread-t.h>
|
|
|
|
__decl_thread(extern HA_RWLOCK_T guid_lock);
|
|
|
|
void guid_init(struct guid_node *node);
|
|
int guid_insert(enum obj_type *obj_type, const char *uid, char **errmsg);
|
|
void guid_remove(struct guid_node *guid);
|
|
struct guid_node *guid_lookup(const char *uid);
|
|
|
|
/* Returns the actual text key associated to <guid> node or NULL if not
|
|
* set
|
|
*/
|
|
static inline const char *guid_get(const struct guid_node *guid)
|
|
{
|
|
return guid->key;
|
|
}
|
|
|
|
int guid_is_valid_fmt(const char *uid, char **errmsg);
|
|
char *guid_name(const struct guid_node *guid);
|
|
int guid_count(void);
|
|
|
|
#endif /* _HAPROXY_GUID_H */
|