You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
btf: avoid constructing strings for named type index
The most common use case of a Spec is to look up a type by its name.
For this purpose we maintain a map[essentialName][]TypeID. This
requires allocating a string for each named type, which causes a
very large overhead when parsing BTF.
In reality, only a very small number of the
named types will ever be looked up. The intuition here is that a
couple of structs in the kernel contain most of the interesting
information, for example struct sk_buff.
Move as much of the cost of looking up a type by name to the actual
lookup. Instead of spending a lot of time constructing an index up
front we only maintaing an index going from the hash of a name to
a type ID.
1. We can compute the hash on a byte slice and therefore avoid
allocating a string.
2. Storing the index as a (hash, id) tuple allows us to store it
in a slice. Lookups are just a binary search into the index.
3. Hash collisions do not introduce additional complexity because
types can already share the same name. At the same time the
common case of a 1:1 mapping from name to type is fast.
Signed-off-by: Lorenz Bauer <[email protected]>
0 commit comments