source: README @ ed8b809

Revision ed8b809, 3.7 KB checked in by Hal Finkel <hfinkel@…>, 9 years ago (diff)

fixup the wrapping of mmap, etc.

  • Property mode set to 100644
Line 
1memlog - A Memory-Allocation Logging Tool
2
3This tool attempts to help you answer the question:
4  Why is my application using so much memory?
5
6** LINKING **
7
8How to use it depends on how your application is linked:
9
10For dynamically-linked applications, you can:
11
12 1. Use LD_PRELOAD: Set LD_PRELOAD=/path/to/memlog/libmemlog.so when you run
13    your application.
14
15 2. Link directly: Add the following to your linker flags:
16      -L/path/to/memlog -Wl,-rpath,/path/to/memlog -lmemlog
17
18For statically-linked applications, add the following to your linker flags:
19
20  -Wl,--wrap,malloc,--wrap,valloc,--wrap,realloc,--wrap,calloc,--wrap,memalign,--wrap,free \
21    -Wl,--wrap,posix_memalign,--wrap,mmap,--wrap,mmap64,--wrap,munmap \
22    /path/to/memlog/memlog_s.o -lpthread -ldl
23
24** RUNNING **
25
26When your application runs, you should find in your current directory files
27named 'HOST.PID.memlog', one for each process. These contain the raw tracing
28information, and are only somewhat human readable. You can create a ps/pdf
29file detailing the memory allocated when each process reached its peak memory
30use by running:
31
32  /path/to/memlog/memlog_analyze /path/to/HOST.PID.memlog
33
34this will generate files named HOST.PID.memlog.dot, HOST.PID.memlog.ps and
35HOST.PID.memlog.pdf. You'll probably find the pdf file most convenient for
36viewing. HOST.PID.memlog.txt is also generated, providing the same information
37in textual form.
38
39If you pass the --leaks option to memlog_analyze, it will provide data on
40allocations active at the end of the program (leaks) instead of those active
41when the peak memory usage is first reached.
42
43You might have many runs of the same application (or output from many ranks of
44an MPI job), and you'd like to pick the one for analysis with the highest
45memory usage. If you provide a glob pattern to memlog_analyze it will do this
46for you. Make sure you quote the glob pattern so that your shell does not
47expand it.
48
49  /path/to/memlog/memlog_analyze "/path/to/*.memlog"
50
51When running under common batch systems, the files are named
52JOB_ID.HOST.PID.memlog, and when running under the BG/Q CNK, the process's rank
53is used instead of the node-local PID.
54
55Note that te peak memory usage is determined by monitoring the processes's
56maximum resident set size, not just the total allocated heap memory.
57
58memlog_analyze takes, as a second optional parameter, the name of the output
59directory (the current directory is the default). If the directory does not
60exist, it will be created.
61
62memlog_analyze depends on dot (from the graphviz package) and ps2pdf (from the
63ghostscript package), plus various tools from the binutils package.
64
65** RELATED WORK **
66
67Why was memlog created? There are several other tools that can support this use
68case, but none of them would work in our environment properly. They were
69either too slow, not runnable under the BG/Q CNK, not thread safe, did not
70properly support big-endian PPC64, supported only either static or dynamic
71linking, did not collect full backtraces, or just did not produce
72sufficiently-informative peak-usage output.
73
74That having been said, some other tools that might interest you:
75  Valgrind Massif - http://valgrind.org/docs/manual/ms-manual.html
76  Google Performance Tools - http://google-perftools.googlecode.com/svn/trunk/doc/heapprofile.html
77  memtrail - https://github.com/jrfonseca/memtrail
78  LeakTracer - http://www.andreasen.org/LeakTracer/
79  glibc mtrace - http://www.gnu.org/s/hello/manual/libc/Allocation-Debugging.html
80  Heaptrack - http://milianw.de/blog/heaptrack-a-heap-memory-profiler-for-linux
81  MemProf - http://www.secretlabs.de/projects/memprof/
82
83The dot/pdf output produced by memlog was definitely inspired by that produced
84by Google's pprof tool in the aforementioned package.
85
Note: See TracBrowser for help on using the repository browser.