glibc standard library User-Space Markers
glibc includes support for SystemTap user-space markers and are enabled in current versions of Fedora and Red Hat Enterprise Linux 7. The markers allow SystemTap to probe glibc memory allocation, thread management, slow math functions, lock operations, and dynamic linking. Below are SystemTap commands to list out the various glibc events available on Fedora.
To list out the probe points in glibc for non-local goto probes and memory allocation use the following command:
$ stap -L 'process("/usr/lib*/*.so").provider("libc").mark("*")'
To list out the pthread probe points in glibc use:
$ stap -L 'process("/usr/lib*/*.so").provider("libpthread").mark("*")'
To list out the probe points related to the glibc's [[https://www.gnu.org/software/libc/manual/html_node/Mathematical-Function-Probes.html#Mathematical-Function-Probes |math library probes] use:
$ stap -L 'process("/usr/lib*/*.so").provider("libm").mark("*")'
To list out the runtime linker (rtld) probe points in glibc's loader use:
$ stap -L 'process("/usr/lib*/*.so").provider("rtld").mark("*")'
Using glibc User-Space Markers
To use the glibc user-space markers on Fedora you will need:
- RPMs:
- glibc
- systemtap-client
- Membership to the stapdev group (or root access)
Examples and Demonstrations of Markers
The SystemTap glibc-malloc.stp example shows information about memory use for a process. Below is short run of glibc-malloc.stp showing the memory activity for emacs opening a large text file. The output below shows that there are multiple threads setup, each with its own arena for memory allocation. On exit from emacs the amount allocated for each arena is shown to be 132KB.
$ cd /usr/share/systemtap/examples/ $ stap memory/glibc-malloc.stp -c "emacs ../testsuite/systemtap.log" 5481: New heap 5481: Created new arena 5482: New heap 5482: Created new arena 5483: New heap 5483: Created new arena 5478: New thresholds: mmap: 790528 bytes, trim: 1581056 bytes malloc information for pid 5478 Contention: Active arenas: 5481 -> 0x7fdbe8000020 5482 -> 0x7fdbe0000020 5483 -> 0x7fdbd8000020 Allocated heaps: 0x7fdbe8000000 -> 135168 bytes 0x7fdbe0000000 -> 135168 bytes 0x7fdbd8000000 -> 135168 bytes Total sbrk: 11800576 bytes Mmap threshold in the end: 772 kb