pahole - Finding holes in kernel structs

Andrew Brampton brampton+freebsd-hackers at gmail.com
Thu Feb 12 06:08:25 PST 2009


I found this useful tool called pahole[1]. It basically finds holes
within structs, so for example on my 64bit machine this struct:

struct test {
   int foo;
   const char *bar;
   int blah;
}

Would have a hole between foo and bar of 4 bytes because both for and
bar have been aligned on a 8 byte boundary, and the struct would also
have 4 bytes of padding on the end. However, if I simply moved blah
between foo and bar then the struct has shrunk by 8 bytes, which could
be a good thing. This could also help keep structs within single cache
lines, and just generally keep memory usage to a minimum when the
struct is used many times (for example in an array).

So I ran the tool pahole over a 7.1 FreeBSD Kernel, and found that
many of the struct had holes, and some of which could be rearranged to
fill the gap. I've made the list available here[2]. So my questions
are two fold:

1) Is it worth my time trying to rearrange structs? If so do you think
many of my patches would be accepted?

2) Is there a way to find out the most heavily used structs? There are
~3600 structs, and ~2000 holes, it might be a waste of my time fixing
the structs which are only used once.

thanks
Andrew

[1] http://lwn.net/Articles/206805/
[2] http://bramp.net/projects/kernel.pahole.bz2 (~260kB)


More information about the freebsd-hackers mailing list