Abstract
Modern software systems heavily use the memory heap. As systems grow more complex and compute with increasing amounts of data, it can be difficult for developers to understand how their programs actually use the bytes that they allocate on the heap and whether improvements are possible. To answer this question of heap usage efficiency, we have built a new, detailed heap profiler called Memoro. Memoro uses a combination of static instrumentation, subroutine interception, and runtime data collection to build a clear picture of exactly when and where a program performs heap allocation, and crucially how it actually uses that memory. Memoro also introduces a new visualization application that can distill collected data into scores and visual cues that allow developers to quickly pinpoint and eliminate inefficient heap usage in their software. Our evaluation and experience with several applications demonstrates that Memoro can reduce heap usage and produce runtime improvements of 10%.
- 2017. Google Perftools. https://github.com/gperftools/gperftoolsGoogle Scholar
- 2017. heaptrack: A heap memory profiler for Linux. https://github. com/KDE/heaptrackGoogle Scholar
- 2017. Massif. http://valgrind.org/docs/manual/ms-manual.htmlGoogle Scholar
- 2017. Memcached: A Distributed Memory Object Caching System. https://memcached.org . Accessed: 02-02-2018.Google Scholar
- Glenn Ammons and James R Larus. 1998. Improving Data-Flow Analysis with Path Profiles. In ACM SIGPLAN Notices, Vol. 33. ACM, 72–84. Google Scholar
Digital Library
- Derek W Barnett, Erik K Garrison, Aaron R Quinlan, Michael P Strömberg, and Gabor T Marth. 2011. BamTools: a C++ API and Toolkit for Analyzing and Managing BAM Files. Bioinformatics 27, 12 (2011), 1691–1692. Google Scholar
Digital Library
- Bruno Blanchet. 2003. Escape Analysis for JavaTM: Theory and Practice. ACM Transactions on Programming Languages and Systems 25, 6 (Nov. 2003), 713–775. Google Scholar
Digital Library
- Stuart Byma. 2017. Memoro. https://github.com/epfl-vlsc/memoro . Accessed: 01-11-2017.Google Scholar
- Adriana Chis, Nick Mitchell, Edith Schonberg, Gary Sevitsky, Patrick O’Sullivan, Trevor Parsons, and John Murphy. 2011. Patterns of Memory Inefficiency. ECOOP Object-Oriented Programming (2011), 383–407. Google Scholar
Digital Library
- Intel Corporation. 2017. Intel 64 and IA-32 Architectures Software Developer’s Manual. https://www.intel. com/content/dam/www/public/us/en/documents/manuals/ 64-ia-32-architectures-software-developer-vol-3b-part-2-manual. pdf . Accessed: 01-11-2017.Google Scholar
- Bruno Dufour, Barbara G. Ryder, and Gary Sevitsky. 2007. Blended Analysis for Performance Understanding of Framework-based Applications. In International Symposium on Software Testing and Analysis (ISSTA ’07). ACM, New York, NY, USA, 118–128. Google Scholar
Digital Library
- Sanjay Ghemawat and Jeff Dean. 2017. LevelDB. https://github.com/ google/leveldb . Accessed: 02-02-2018.Google Scholar
- Brendan Gregg. 2017. Flame Graphs. http://www.brendangregg.com/ flamegraphs.html . Accessed: 01-11-2017.Google Scholar
- Brendan Gregg. 2017. Memory Flame Graphs. http://www. brendangregg.com/FlameGraphs/memoryflamegraphs.html . Accessed: 01-11-2017.Google Scholar
- Google Inc. 2017. Protocol Buffers. https://developers.google.com/ protocol-buffers/ . Accessed: 01-11-2017.Google Scholar
- Chris Lattner and Vikram Adve. 2004. LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation. In Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization. IEEE Computer Society, 75. Google Scholar
Digital Library
- Jacob Leverich. 2014. Mutilate: A High-Performance Memcached Load Generator.Google Scholar
- Heng Li, Bob Handsaker, Alec Wysoker, Tim Fennell, Jue Ruan, Nils Homer, Gabor Marth, Goncalo Abecasis, and Richard Durbin. 2009. The Sequence Alignment/Map Format and SAMtools. Bioinformatics 25, 16 (2009), 2078–2079. Google Scholar
Digital Library
- LLVM. 2017. Clang: A C Language Family Frontend for LLVM. https: //clang.llvm.org/ . Accessed: 01-11-2017.Google Scholar
- Svetozar Miucin, Conor Brady, and Alexandra Fedorova. 2016. DINA-MITE: A Modern Approach to Memory Performance Profiling. CoRR abs/1606.00396 (2016). arXiv: 1606.00396 http://arxiv.org/abs/1606. 00396Google Scholar
- Nicholas Nethercote and Julian Seward. {n. d.}. Valgrind: A Framework for Heavyweight Dynamic Binary Instrumentation. In Proceedings of the 28th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI ’07). ACM, New York, NY, USA, 89–100. Google Scholar
Digital Library
- Tony Printezis and Richard Jones. 2002. GCspy: An Adaptable Heap Visualisation Framework. Vol. 37. ACM. Google Scholar
Digital Library
- Konstantin Serebryany, Derek Bruening, Alexander Potapenko, and Dmitriy Vyukov. 2012. AddressSanitizer: A Fast Address Sanity Checker.. In USENIX Annual Technical Conference. 309–318. Google Scholar
Digital Library
- Ran Shaham, Elliot K. Kolodner, and Mooly Sagiv. 2001. Heap Profiling for Space-efficient Java. In Proceedings of the ACM SIGPLAN 2001 Conference on Programming Language Design and Implementation (PLDI ’01). ACM, New York, NY, USA, 104–113. Google Scholar
Digital Library
- Milos Tosic. 2017. MTuner: a C/C++ memory profiler and memory leak finder for Windows, PlayStation 4, PlayStation 3, etc. https: //github.com/milostosic/MTunerGoogle Scholar
- Valgrind. 2017. DHAT. http://valgrind.org/docs/manual/dh-manual. htmlGoogle Scholar
Index Terms
Detailed heap profiling
Recommendations
Detailed heap profiling
ISMM 2018: Proceedings of the 2018 ACM SIGPLAN International Symposium on Memory ManagementModern software systems heavily use the memory heap. As systems grow more complex and compute with increasing amounts of data, it can be difficult for developers to understand how their programs actually use the bytes that they allocate on the heap and ...
Diagnosing memory leaks using graph mining on heap dumps
KDD '10: Proceedings of the 16th ACM SIGKDD international conference on Knowledge discovery and data miningMemory leaks are caused by software programs that prevent the reclamation of memory that is no longer in use. They can cause significant slowdowns, exhaustion of available storage space and, eventually, application crashes. Detecting memory leaks is ...
Controlling garbage collection and heap growth to reduce the execution time of Java applications
In systems that support garbage collection, a tension exists between collecting garbage too frequently and not collecting it frequently enough. Garbage collection that occurs too frequently may introduce unnecessary overheads at the risk of not ...







Comments