Date: Thu, 12 Feb 2009 14:08:22 +0000 From: Andrew Brampton <brampton+freebsd-hackers@gmail.com> To: freebsd-hackers@freebsd.org Subject: pahole - Finding holes in kernel structs Message-ID: <d41814900902120608i4b54c86fp9f565bbeead5a476@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?d41814900902120608i4b54c86fp9f565bbeead5a476>