pahole - Finding holes in kernel structs

Sam Leffler sam at freebsd.org
Thu Feb 12 08:42:21 PST 2009


Max Laier wrote:
> On Thursday 12 February 2009 15:08:22 Andrew Brampton wrote:
>   
>> 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.
>>     
>
> Interesting tool ...
>   

Someone should be able to do the same thing with coverity but it's 
obviously less effort to use something that exists.  If I recall this 
and related tools like sparse use dwarf symbols which we don't generate 
by default.  But with dtrace support I think we now can in fact generate 
the symbols easily so maybe someone can look at porting the tools...

>   
>>               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.
>>     
>
> That's the tricky part.  Rearranging the structs itself is not that difficult, 
> but identifying which should be rearranged and if, how ... that's the problem.  
> The fact that gaps might be different for 64 vs. 32 bit architectures has 
> already been mentioned.
>
> In addition one needs to keep in mind that changing a struct layout is a ABI 
> change.  So if we do identify structs that we want to change we should do them 
> all at once to keep the different versions down to a minimum.
>
> So to answer your first question, submitting 101 patches to rearrange 101 
> structs is certainly a wasted effort.  However, if you take a good look at the 
> 2000 holes, identify an interesting subset and submit a patch to fix that 
> subset ... that would be a worthwhile effort ... IMHO.
>
>   
The other thing to keep in mind is that structure layout can have a 
noticeable effect on cache locality.  Arbitrarily rearranging structure 
members can generate many more cache misses so one should sanity check 
changes w/ something like hwpmc.  However as noted because layout may be 
platform-dependent even if something shows no change on x86 it may be a 
loss on another architecture and finding that performance drop may be 
really hard.

    Sam




More information about the freebsd-hackers mailing list