Jun 29 2007
Stuffing my pahole
There was an interesting utility mentioned on IRC the other day
Pahole. What’s Pahole? Well, it’s an application that can tell you about holes in your structures. (And yes, if you’re not a programmer you probably really don’t care and can stop reading, heh.)
There’s an LWN Article about the initial release of Pahole and Nathan point to another excellent article. So, between the two of these I managed to get it working.
I’m using Ubuntu here and had to install a few utilities/libraries for everything to run successfully. I installed:
- cmake
- libdw-dev
- libebl-dev
After that following the instructions everything compiled fine. I ended up with the libdwarf stuff in /usr/local which I didn’t like, and pahole didn’t like either, so I moved it to /usr/local/lib and re-ran /sbin/ldconfig. Everything seems to be working as expected.
With everything installed I ran it on ewl:
pahole -V ewl_widget.o
and got…..nothing. After a bit of fiddling I realized I had removed the -g last time I compiled Ewl. Once I’d re-compiled Ewl with -g and re-ran the above command I got the expected output:
struct Ewl_Widget {
Ewl_Object object; /* 0 76 */
/* --- cacheline 1 boundary (64 bytes) was 12 bytes ago --- */
Ewl_Widget * parent; /* 76 4 */
Ewl_Callback_Chain callbacks[25]; /* 80 200 */
/* --- cacheline 4 boundary (256 bytes) was 24 bytes ago --- */
Ewl_Attach_List * attach; /* 280 4 */
void * smart_object; /* 284 4 */
void * fx_clip_box; /* 288 4 */
void * theme_object; /* 292 4 */
const char * theme_path; /* 296 4 */
const char * theme_group; /* 300 4 */
const char * theme_state; /* 304 4 */
const char * appearance; /* 308 4 */
const char * inheritance; /* 312 4 */
int layer; /* 316 4 */
/* --- cacheline 5 boundary (320 bytes) --- */
int toplayered; /* 320 4 */
Ecore_Hash * theme; /* 324 4 */
Ewl_Pair_List theme_text; /* 328 8 */
/* size: 336, cachelines: 6 */
/* last cacheline: 16 bytes */
};
Which, surprisingly , had no holes in it.
After that I ran it on /usr/local/lib/libewl.so.1.0.0 to see what everything looked like and came out with this. There are a few structs with holes in them, but nothing that we can actually fill.
If you want pahole to give you information on filling holes you can run:
pahole -RC Ewl_Widget /usr/local/lib/libewl.so.1.0.0
and it would try to fill any holes in the Ewl_Widget structure.
All in all, a pretty cool little utility. I’ll have to keep it around and check Ewl every now and then to make sure we aren’t wasting any memory.
June 29th, 2007 at 21:54
OMG, I hang out with computer nerds too often. I think I almost understood that.
June 30th, 2007 at 02:05
hahaha
October 22nd, 2009 at 10:19
[...] look at ELF files (i.e. you’re under Linux, or working on a certain console), there’s pahole. Not only does it point out padding (or ‘holes in your structure’), it’s also [...]
November 1st, 2009 at 11:24
[...] this note on Rachel’s blog and found out there’s tool similar to Cruncher, just for ELF, named pahole. It has a nifty feature of showing cacheline boundaries. Had a little bit of spare time this [...]