SlideShare una empresa de Scribd logo
1 de 7
Descargar para leer sin conexión
Memory Debugging in Parallel
Highlights:
                                    and Distributed Applications
    Challenges with memory
    debugging                       Author:
                                    Chris Gottbrath, Product Manager, TotalView
    Identifying and resolving       Technologies
    memory bugs in parallel and
    distributed applications
                                    Abstract:
                                    Memory bugs, essentially a mistake in the
    Using the Heap Interposition    management of heap memory, can occur in any
    Agent (HIA) to analyze memory   program that is being written, enhanced, or
    problems                        maintained. A memory bug can be caused by a
                                    number of factors, including failure to check for error
                                    conditions; relying on nonstandard behavior; memory
                                    leaks including failure to free memory; dangling
                                    references such as failure to clear pointers; array
                                    bounds violations; and memory corruption such as
                                    writing to memory not owned/over running array
                                    bounds. These can sometimes cause programs to
                                    crash or generate incorrect “random” results, or more
                                    frustratingly, they may lurk in the code base for long
                                    periods of time — only to manifest themselves at the
                                    worst possible time.

                                    Memory problems are difficult to track down with
                                    conventional tools on even a simple desktop
                                    architecture, and are much more vexing then
                                    encountered on a distributed parallel architecture. This
                                    paper will review the challenges of memory debugging,
                                    with special attention paid to the challenges of parallel
                                    development and debugging, introduce a tool that
                                    helps developers identify and resolve memory bugs in
                                    parallel and distributed applications, highlight its major
                                    features and provide usage tips.

                                    Published:
                                    June 2008
The Challenges of Memory Debugging in Parallel                important to note that analogous errors can also be made
Development                                                   with memory that is allocated using the C++ new
The fact that memory bugs can be introduced at any time       statement and the FORTRAN 90 allocate statement.
makes memory debugging a challenging task especially in
codes that are written collaboratively or that are being      Malloc Errors
maintained over a long period of time, where assumptions      Malloc errors occur when a program passes an invalid
about memory management can either change or not be           value to one of the operations in the C Heap Manager API.
communicated clearly. They can also lurk in a code base       This could potentially happen if the value of a pointer (the
for long periods of time since they are often not             address of a block) is copied into another pointer, and then
immediately fatal and can suddenly become an issue            at a later time, both pointers are passed to free(). In this
when a program is ported to a new architecture or scaled      case, the second free() is incorrect because the specified
up to a larger problem size, or when code is adapted and      pointer does not correspond to an allocated block. The
reused from one program to another.                           behavior of the program after such an operation is
                                                              undefined.
Memory bugs often manifest themselves in several ways:
either as a crash that always happens, a crash that           Dangling Pointers
sometimes happens (instability), or just as incorrect         A pointer can be said to be dangling when it references
results. Furthermore, they are difficult to track down with   memory that has already been deallocated. Any memory
commonly used development tools and techniques (such          access (either a read or a write) through a dangling pointer
as printf and traditional source code debuggers), which are   can lead to undefined behavior. Programs with dangling
not specifically designed to solve memory problems.           pointer bugs may sometimes appear to function without
                                                              any obvious errors — even for significant amounts of time
Adding parallelism to the mix makes things even harder        — if the memory that the dangling pointer points to
because parallel programs are often squeezed between          happens not to be recycled into a new allocation during the
two effects, meaning that these programs have to be very      time that it is accessed.
careful with memory. Parallel programs are also written in
situations where the problem set is “large,” so the program   Memory Bounds Violations
naturally ends up loading a very significant amount of data   Individual memory allocations that are returned by malloc()
and using a lot of memory. However, special purpose high-     represent discrete blocks of memory with defined sizes.
performance computing (HPC) systems often have less           Any access to memory immediately before the lowest
memory per node than one might ideally desire, as             address in the block or immediately after the highest
memory is expensive.                                          address in the block results in undefined behavior.

                                                              Read-Before-Write Errors
Classifying Memory Errors                                     Reading memory before it has been initialized is a
Programs typically make use of several different              common error. Some languages assign default values to
categories of memory that are managed in different ways.      uninitialized global memory, and many compilers can
These include stack memory, heap memory, shared               identify when local variables are read before being
memory, thread private memory and static or global            initialized. What is more difficult and generally can only be
memory. However, programmers are required to pay              done at random is detecting when memory accessed
special attention to memory that is allocated out of the      through a pointer is read before being initialized. Dynamic
heap memory. This is because the management of heap           memory is particularly affected, since this is always
memory is done explicitly in the program rather than          accessed through a pointer, and in most cases, the
implicitly at compile or run time.                            content of memory obtained from the memory manager is
                                                              undefined.
There are a number of ways that a program can fail to
make proper use of dynamically allocated heap memory. It
is useful to develop a simple categorization of these         Detecting Memory Leaks
mistakes for discussion; in this paper, they will be          Leaks occur when a program finishes using a block of
described in terms of the C malloc() API. However, it is      memory and discards all references to the block, but fails
to call free() to release it back to the heap manager for       within one GUI, and the ability to do script-based
reuse. The result is that the program is neither able to        debugging to use batch queue environments, make it well-
make use of the memory nor reallocate it for a new              suited for debugging these parallel and distributed
purpose.                                                        applications.

The impact of leaks depends on the nature of the                MemoryScape Architecture
application. In some cases the effects are very minor; in       MemoryScape accomplishes memory debugging on
others, where the rate of leakage is high enough or the         parallel and distributed applications through the modified
runtime of the program is long enough, leaks can                use of a technique called interposition. MemoryScape
significantly change the memory behavior and the                provides a library, called the Heap Interposition Agent
performance characteristics of the program. For long-           (HIA), that is inserted between the user’s application code
running applications or those where memory is limited,          and the malloc() subsystem. This library defines functions
even a small leakage rate can have a very serious               for each of the memory allocation API functions. It is these
cumulative and adverse effect. This somewhat                    functions that are initially called by the program whenever
paradoxically takes leaks all that much more annoying,          it allocates, reallocates, or frees a block of memory.
since they often linger in otherwise well-understood codes.
It can be quite challenging to manage dynamic memory in
complex applications to ensure that allocations are
released exactly once so that malloc and leak errors do
not occur.

Leak detection can be done at any point in program
execution. As discussed, leaks occur when the program
ceases using a block of memory without calling free. It is
hard to define “ceasing to use” but an advanced memory
debugger is able to execute leak detection by looking to
see if the program retains a reference to specific memory
locations.

The MemoryScape Debugger
                                                                Figure.1 MemoryScape Heap Interposition Agent (HIA)
The MemoryScape memory debugger is an easy-to-use
                                                                Architecture. The HIA sits between the application and the
tool for developers. It has a lightweight architecture that     memory allocation layer in glibc.
requires no recompilation and has modest impact on the
runtime performance of the program. The interface is            The interposition technique used by MemoryScape was
designed around the concept of an inductive user                chosen in part because it provides for lightweight memory
interface, which guides the user through the task of            debugging. Low overheads are an important factor if the
memory debugging and provides easy-to-understand                performance of a program is not to suffer because of the
graphical displays, powerful analysis tools, and features to    presence of the HIA. In most cases, the runtime per-
support collaboration (making it easy to report a lurking       formance of a program being debugged with the HIA
memory bug to the library vendor, scientific collaborator, or   engaged will be similar to that where the HIA is absent.
colleague who wrote the code in question).                      This is absolutely critical for high-performance computing
                                                                applications, where a heavyweight approach that signi-
MemoryScape is designed to be used with parallel and            ficantly slowed the target program might very well make
multi-process target applications, providing both detailed      the runtime of programs exceed the patience of develop-
information about individual processes, as well as high         ers, administrators and job schedulers.
level memory usage statistics across all of the processes
that make up a large parallel application. MemoryScape’s        Interposition differs from simply replacing the malloc()
specialized features, including support for launching and       library with a debug malloc in that the interposition library
automatically attaching to all of the processes of a parallel   does not actually fulfill any of the operations itself — it
job, the ability to memory debug many processes from            arranges for the program’s malloc() API function calls to be
forwarded to the underlying heap manager that would             memory statistics window that provides overall memory
have been called in the absence of the HIA. The effect of       usage statistics in a number of graphical forms (line, bar
interposing with the HIA is that the program behaves in the     and pie charts) for one, all, or an arbitrary subset of the
same way that it would without the HIA — except that the        processes that make up the debugging session. The user
HIA is able to intercept all of the memory calls and perform    may drive the program to a specific breakpoint or barrier,
bookkeeping and “sanity checks” before and after the            or simply halt all the processes at an arbitrary point in
underlying function is called.                                  execution.

The HIA library’s bookkeeping builds up and maintains a         The set of processes that the user wishes to see statistical
record of all of the active allocations on the heap as the      information about may be selected, with the type of view
program runs. For each allocation in the heap, it records       that the user wants, by clicking “generate view.” The
not just the position and size of the block, but also a full    generated view represents the state of the program at that
function call stack representing what the program was           point in time. The user may use the debugger process
doing when the block was allocated. The “sanity checks”         controls to drive the program to a new point in execution
that the HIA performs are the kinds of things that allow the    and then update the view to look for changes. If any
HIA to detect malloc() errors such as freeing the same          processes look out of line, the user will likely want to look
block of memory twice or trying to reallocate a pointer that    more closely at the detailed status of the heap memory.
points to a stack address.
                                                                Using MemoryScape to Look at Heap Status
Depending on how it has been configured, the HIA can            MemoryScape provides a wide range of heap status
also detect whether some bounds errors have occurred.           reports, the most popular of which is the heap graphical
The information that the HIA collects is used by the            display. At any point where a process has been stopped, a
MemoryScape memory debugger to provide the user with            user can obtain a graphical view of the heap. This is
an accurate picture of the state of the heap.                   obtained by selecting the heap status tab, selecting one or
                                                                more processes, choosing the graphical view and clicking
MemoryScape Parallel Architecture                               “generate view.”
MemoryScape uses a behind-the-scenes, distributed
parallel architecture to manage runtime interaction with the
user’s parallel program. MemoryScape starts lightweight
debugging agent processes (called tvdsvr processes),
which run on the nodes of the cluster where the user’s
code is executing. These tvdsvr processes are each
responsible for the lowlevel interactions with the individual
local processes and the HIA module that is loaded into the
process that is being debugged. The tvdsvr processes
communicate directly with the MemoryScape front-end
process, using their own optimized protocol, which in most
cluster configurations is layered on top of TCP/IP.

MemoryScape Features

Using MemoryScape to Compare Memory Statistics
Many parallel and distributed applications have known or
expected behaviors in terms of memory usage. They may           Figure 2. MemoryScape Graphical Interface provides an
be structured so that all of the nodes should allocate the      interactive view of the heap. Colors indicate the status of
same amount of memory, or they may be structured so             memory allocations.
that memory usage should depend in some way on the
MPI COMMWORLD rank of the process. If such a pattern            The resulting display paints a picture of the heap memory
is expected or if the user wishes to simply examine the set     in the selected process. Each current heap memory
of processes to look for patterns, MemoryScape features a       allocation is represented by a green line extending across
the range of addresses that are part of the allocation. This    differ and the overwriting may occur in a different array.
gives the user a great way to see the composition of the        This leads to extremely frustrating “racy” bugs that
program’s heap memory at a glance. The view is inter-           manifest differently, 5 sometimes causing the program to
active; selecting a block highlights related allocations and    crash, sometimes resulting in bad data, and sometimes
presents the user with detailed information about both the      altering memory in a way that turns out to be completely
selected block and the full set of related blocks. The          harmless.
display can be filtered to dim allocations based on
properties such as size or the shared object they were          MemoryScape provides a mechanism that involves setting
allocated in. The display also supports setting a baseline      aside a bit of memory before and after heap memory
to let the user see which allocations and deallocations         blocks as they are allocated. Since this bit of memory,
occur before and after that baseline.                           called a guard block, is not part of the allocation, the
                                                                program should never read or write to that location. The
Using MemoryScape to Detect Leaks                               HIA can arrange for the guard blocks to be initialized with
MemoryScape performs heap memory leak detection by              a pattern and check the guard blocks (any time the user
driving the program to a known state (a breakpoint, for         asks for a check and again anytime an individual block is
example) or by simply halting the processes of a running        deallocated) for a change in this pattern. Any changes
parallel application using the “halt” command in the GUI or     mean that the program wrote past the bounds of the array.
the CLI. By selecting the leak detection tab in the memory
debugging window, one or more of the processes in the           Collaboration Features in MemoryScape
parallel job can be selected to generate the leak report.       MemoryScape provides users with two forms of memory
                                                                reporting that help distributed development teams
The resulting report will list all of the heap allocations in   collaborate effectively to troubleshoot problems and
the program for which there are no longer any valid             improve product quality. Heap memory views can be
references anywhere in the program’s registers, or              exported as an HTML file that can be read by a web
accessible memory. A block of memory that the program is        browser. These HTML files include JavaScript applets that
not storing a reference to anywhere is highly unlikely to       provide the user with the ability to interact with the report in
subsequently be subject to a free() call and is extremely       his browser in a similar way to the way that the report can
likely to be a leak. Leaks can also be observed in the heap     be interacted with on screen — allowing the reader to drill
graphical display discussed above by toggling the               down into sections of the report that are interesting and
checkbox labeled “Detect Leaks” in which leaked blocks          survey the rest of the report at a summary level.
will be displayed in red on the graphical display.
                                                                MemoryScape also supports the creation of a memory
Using MemoryScape to Detect Heap Bounds                         debugging data file. This is a binary representation of all of
Violations                                                      the data that MemoryScape has about a process. These
One of the classes of memory errors mentioned above that        files can be loaded back in at a later date and interacted
is often difficult to diagnose is when an error in the          with just like live processes. This gives developers the
program logic causes the program to write beyond the            ability to store representations of processes for later
bounds of a block of memory allocated on the heap. The          comparison and examination.
malloc API makes no guarantee about the relative spacing
or alignment of memory blocks returned in separate              Memory debugging data files can also be loaded by the
memory allocations - or about what the memory before or         memory module of the TotalView® Source Code
after any given block may be used for. The result of reads      Debugger. This allows sophisticated users to apply even
and writes before the beginning of a block of memory or         more powerful and precise debugging techniques that take
after the end of the block of memory is undefined.              advantage of the idea of having memory debugging and
                                                                access to all the variables and state data for live
In practice, blocks are often contiguous with other blocks      processes.
of program data. Therefore, if the program writes past the
end of an array, it is usually overwriting the contents of      MemoryScape Usage Tips
some other unrelated allocation. If the program is re-run       As discussed, MemoryScape detects many instances
and the same error occurs, the ordering of allocations may      where a program has erroneously written outside the
bounds of heap arrays. Developers and scientists can           command line version that is specifically designed to be
compliment MemoryScape’s heap bounds checking with             incorporated into an automatic testing framework.
compiler-generated bounds checking code for arrays that        Development teams that use MemoryScape in this way
are allocated automatically on the heap or in global           can detect, analyze and remove new memory errors as
program memory. A number of compilers, including the           soon as they are introduced in development — before they
Intel™ Fortran Compiler and the open source gfortran           have any impact in production.
compiler, can generate bounds checking code auto-
matically with a compile line option (for example, -check-     Future MemoryScape Product Plans
bounds for ifort and -fbounds-check for gfortran).             Areas for future development of MemoryScape include
                                                               improved integration of the product into the TotalView
For developers with more advanced memory debugging             Workbench Manager application. The Workbench provides
needs, the TotalView Debugger provides a way of                a site for sharing configuration and session data between
debugging memory problems that allows the user to              the different development tools that a developer may need.
examine memory information within the source code              The Workbench provides an extensible base from which
context of the program. When doing memory debugging            users can access recent debugging, memory debugging
using the TotalView source code debugger, the user can         and performance analysis sessions. Because integrated
examine data structures that might contain pointers into       development environments (IDEs) are popular but not
the heap memory within the program. When memory                universally embraced, the Workbench can be used from
debugging is enabled, these pointers are annotated with        within an IDE but does not require it. Future versions of the
information about the status of the memory block being         MemoryScape product will more than likely share state
pointed to.                                                    and information about programs, input values and
                                                               parameters, memory data files, etc. with the Workbench.
One advanced technique available to users who are using
the TotalView source code debugger in conjunction with         Other areas of future MemoryScape development include
the memory debugger involves the use of watchpoints.           improved support for analyzing the historical usage of
                                                               memory within the application so that developers can
Watchpoints are a debugger feature that allows the             generate an accurate understanding of the memory usage
process to be stopped at the moment a given block of           behavior of the program. Perhaps the most frequently
memory is written to. When a pointer is writing “wildly”       requested area of enhancement is in regards to providing
across memory (into space that is completely unrelated to      developers with additional options for detecting and
where the pointer is supposed to be writing), it can be very   reporting memory reads and writes beyond the extent of
hard to pin down.                                              heap allocations. TotalView Technologies is actively
                                                               investigating possible enhancements that might allow
Guard blocks can be used together with watchpoints to          developers to trade off runtime performance for more
track down this exceptionally subtle type of error. The        detailed information in this area.
troubleshooting takes two passes. On the first pass
through the program, guard blocks are used to identify a       Conclusion
specific block of memory that is erroneously written to.       Memory bugs can occur in any program that is being
Then, on the second pass through the program, a watch-         written, enhanced or maintained. These types of bugs are
point is set at that precise address. The watchpoint should    often a source of great frustration for developers because
trigger twice: once when the block of memory is painted by     they can be introduced at any time and are caused by a
the memory debugger and the second time when the block         number of different factors. They can also lurk in a code
of memory is overwritten by the wild pointer.                  base for long periods of time and tend to manifest in
                                                               several ways.
While most users will want to use MemoryScape inter-
actively as outlined above, ongoing development                This makes memory debugging a challenging task,
introduces the possibility that new memory bugs may be         especially in parallel and distributed programs that include
introduced at any point. Development teams are                 a significant amount of data and use a lot of memory.
encouraged to add heap memory tests to their ongoing           Commonly used development tools and techniques are not
testing strategy. MemoryScape includes a non-interactive       specifically designed to solve memory problems and can
make the process of finding and fixing memory bugs an                              MemoryScape’s specialized features, including the ability
even more complex process.                                                         to compare memory statistics, look at heap status and
                                                                                   detect memory leaks, make it uniquely well-suited for
MemoryScape is an easy-to-use memory debugging tool                                debugging these parallel and distributed applications.
that helps developers identify and resolve memory bugs.




To learn more, contact us at memoryscape@totalviewtech.com , or visit us at www.totalviewtech.com.




This is a preliminary document and may be changed prior to final commercial release of the technology described herein. This White Paper is for
informational purposes only. TotalView Technologies shall not be liable for technical or editorial errors or omissions contained herein.
TotalView Technologies makes no warranties, express, implied or statutory, as to the information contained herein. No part of this document may be
reproduced, stored or transmitted in any form or by any means without the express written permission of TotalView Technologies, LLC.

TotalView Technologies may have trademarks, patents, copyrights, or other intellectual property rights covering subject matter in this document. The delivery
of this document does not give the recipient any license to these trademarks, patents, copyrights, or other intellectual property.

Copyright 2008 TotalView Technologies, LLC. All rights reserved.

All other trademarks are property of their respective owners.

Más contenido relacionado

Similar a TotalView - Memory debugging in parallel and distributed applications

Building of systems of automatic C/C++ code logging
Building of systems of automatic C/C++ code loggingBuilding of systems of automatic C/C++ code logging
Building of systems of automatic C/C++ code loggingPVS-Studio
 
A Catalog Of Common Bugs In C Programming
A Catalog Of Common Bugs In C   ProgrammingA Catalog Of Common Bugs In C   Programming
A Catalog Of Common Bugs In C ProgrammingAllison Koehn
 
Debuggers in system software
Debuggers in system softwareDebuggers in system software
Debuggers in system softwaregayathri ravi
 
Information Management 2marks with answer
Information Management 2marks with answerInformation Management 2marks with answer
Information Management 2marks with answersuchi2480
 
What
WhatWhat
Whatanity
 
198970820 p-oooooooooo
198970820 p-oooooooooo198970820 p-oooooooooo
198970820 p-oooooooooohomeworkping4
 
Security Applications For Emulation
Security Applications For EmulationSecurity Applications For Emulation
Security Applications For EmulationSilvio Cesare
 
Randori design goals and justification
Randori design goals and justificationRandori design goals and justification
Randori design goals and justificationmichael.labriola
 
10 Code Anti-Patterns to Avoid in Software Development.pdf
10 Code Anti-Patterns to Avoid in Software Development.pdf10 Code Anti-Patterns to Avoid in Software Development.pdf
10 Code Anti-Patterns to Avoid in Software Development.pdfAhmed Salama
 
Stnotes doc 5
Stnotes doc 5Stnotes doc 5
Stnotes doc 5Alok Jain
 
Buffer overflow explained
Buffer overflow explainedBuffer overflow explained
Buffer overflow explainedTeja Babu
 
The pragmatic programmer
The pragmatic programmerThe pragmatic programmer
The pragmatic programmerLeylimYaln
 
A New Paradigm In Linux Debug From Viosoft Corporation
A New Paradigm In Linux Debug From Viosoft CorporationA New Paradigm In Linux Debug From Viosoft Corporation
A New Paradigm In Linux Debug From Viosoft Corporationart_lee
 
Automated Java Code Generation (ICDIM 2006)
Automated Java Code Generation (ICDIM 2006)Automated Java Code Generation (ICDIM 2006)
Automated Java Code Generation (ICDIM 2006)IT Industry
 
Top technical mistakes that programers do
Top technical mistakes that programers doTop technical mistakes that programers do
Top technical mistakes that programers doNalaka Gamage
 

Similar a TotalView - Memory debugging in parallel and distributed applications (20)

Building of systems of automatic C/C++ code logging
Building of systems of automatic C/C++ code loggingBuilding of systems of automatic C/C++ code logging
Building of systems of automatic C/C++ code logging
 
PROBLEM SOLVING
PROBLEM SOLVINGPROBLEM SOLVING
PROBLEM SOLVING
 
Vp all slides
Vp   all slidesVp   all slides
Vp all slides
 
A Catalog Of Common Bugs In C Programming
A Catalog Of Common Bugs In C   ProgrammingA Catalog Of Common Bugs In C   Programming
A Catalog Of Common Bugs In C Programming
 
Debuggers in system software
Debuggers in system softwareDebuggers in system software
Debuggers in system software
 
Information Management 2marks with answer
Information Management 2marks with answerInformation Management 2marks with answer
Information Management 2marks with answer
 
What
WhatWhat
What
 
Programming
ProgrammingProgramming
Programming
 
198970820 p-oooooooooo
198970820 p-oooooooooo198970820 p-oooooooooo
198970820 p-oooooooooo
 
Security Applications For Emulation
Security Applications For EmulationSecurity Applications For Emulation
Security Applications For Emulation
 
Randori design goals and justification
Randori design goals and justificationRandori design goals and justification
Randori design goals and justification
 
10 Code Anti-Patterns to Avoid in Software Development.pdf
10 Code Anti-Patterns to Avoid in Software Development.pdf10 Code Anti-Patterns to Avoid in Software Development.pdf
10 Code Anti-Patterns to Avoid in Software Development.pdf
 
Stnotes doc 5
Stnotes doc 5Stnotes doc 5
Stnotes doc 5
 
java Features
java Featuresjava Features
java Features
 
Buffer overflow explained
Buffer overflow explainedBuffer overflow explained
Buffer overflow explained
 
The pragmatic programmer
The pragmatic programmerThe pragmatic programmer
The pragmatic programmer
 
Dsohowto
DsohowtoDsohowto
Dsohowto
 
A New Paradigm In Linux Debug From Viosoft Corporation
A New Paradigm In Linux Debug From Viosoft CorporationA New Paradigm In Linux Debug From Viosoft Corporation
A New Paradigm In Linux Debug From Viosoft Corporation
 
Automated Java Code Generation (ICDIM 2006)
Automated Java Code Generation (ICDIM 2006)Automated Java Code Generation (ICDIM 2006)
Automated Java Code Generation (ICDIM 2006)
 
Top technical mistakes that programers do
Top technical mistakes that programers doTop technical mistakes that programers do
Top technical mistakes that programers do
 

Más de IBM India Smarter Computing

TSL03104USEN Exploring VMware vSphere Storage API for Array Integration on th...
TSL03104USEN Exploring VMware vSphere Storage API for Array Integration on th...TSL03104USEN Exploring VMware vSphere Storage API for Array Integration on th...
TSL03104USEN Exploring VMware vSphere Storage API for Array Integration on th...IBM India Smarter Computing
 
A Comparison of PowerVM and Vmware Virtualization Performance
A Comparison of PowerVM and Vmware Virtualization PerformanceA Comparison of PowerVM and Vmware Virtualization Performance
A Comparison of PowerVM and Vmware Virtualization PerformanceIBM India Smarter Computing
 
IBM pureflex system and vmware vcloud enterprise suite reference architecture
IBM pureflex system and vmware vcloud enterprise suite reference architectureIBM pureflex system and vmware vcloud enterprise suite reference architecture
IBM pureflex system and vmware vcloud enterprise suite reference architectureIBM India Smarter Computing
 

Más de IBM India Smarter Computing (20)

All-flash Needs End to End Storage Efficiency
All-flash Needs End to End Storage EfficiencyAll-flash Needs End to End Storage Efficiency
All-flash Needs End to End Storage Efficiency
 
TSL03104USEN Exploring VMware vSphere Storage API for Array Integration on th...
TSL03104USEN Exploring VMware vSphere Storage API for Array Integration on th...TSL03104USEN Exploring VMware vSphere Storage API for Array Integration on th...
TSL03104USEN Exploring VMware vSphere Storage API for Array Integration on th...
 
IBM FlashSystem 840 Product Guide
IBM FlashSystem 840 Product GuideIBM FlashSystem 840 Product Guide
IBM FlashSystem 840 Product Guide
 
IBM System x3250 M5
IBM System x3250 M5IBM System x3250 M5
IBM System x3250 M5
 
IBM NeXtScale nx360 M4
IBM NeXtScale nx360 M4IBM NeXtScale nx360 M4
IBM NeXtScale nx360 M4
 
IBM System x3650 M4 HD
IBM System x3650 M4 HDIBM System x3650 M4 HD
IBM System x3650 M4 HD
 
IBM System x3300 M4
IBM System x3300 M4IBM System x3300 M4
IBM System x3300 M4
 
IBM System x iDataPlex dx360 M4
IBM System x iDataPlex dx360 M4IBM System x iDataPlex dx360 M4
IBM System x iDataPlex dx360 M4
 
IBM System x3500 M4
IBM System x3500 M4IBM System x3500 M4
IBM System x3500 M4
 
IBM System x3550 M4
IBM System x3550 M4IBM System x3550 M4
IBM System x3550 M4
 
IBM System x3650 M4
IBM System x3650 M4IBM System x3650 M4
IBM System x3650 M4
 
IBM System x3500 M3
IBM System x3500 M3IBM System x3500 M3
IBM System x3500 M3
 
IBM System x3400 M3
IBM System x3400 M3IBM System x3400 M3
IBM System x3400 M3
 
IBM System x3250 M3
IBM System x3250 M3IBM System x3250 M3
IBM System x3250 M3
 
IBM System x3200 M3
IBM System x3200 M3IBM System x3200 M3
IBM System x3200 M3
 
IBM PowerVC Introduction and Configuration
IBM PowerVC Introduction and ConfigurationIBM PowerVC Introduction and Configuration
IBM PowerVC Introduction and Configuration
 
A Comparison of PowerVM and Vmware Virtualization Performance
A Comparison of PowerVM and Vmware Virtualization PerformanceA Comparison of PowerVM and Vmware Virtualization Performance
A Comparison of PowerVM and Vmware Virtualization Performance
 
IBM pureflex system and vmware vcloud enterprise suite reference architecture
IBM pureflex system and vmware vcloud enterprise suite reference architectureIBM pureflex system and vmware vcloud enterprise suite reference architecture
IBM pureflex system and vmware vcloud enterprise suite reference architecture
 
X6: The sixth generation of EXA Technology
X6: The sixth generation of EXA TechnologyX6: The sixth generation of EXA Technology
X6: The sixth generation of EXA Technology
 
Stephen Leonard IBM Big Data and cloud
Stephen Leonard IBM Big Data and cloudStephen Leonard IBM Big Data and cloud
Stephen Leonard IBM Big Data and cloud
 

Último

Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 

Último (20)

Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

TotalView - Memory debugging in parallel and distributed applications

  • 1. Memory Debugging in Parallel Highlights: and Distributed Applications Challenges with memory debugging Author: Chris Gottbrath, Product Manager, TotalView Identifying and resolving Technologies memory bugs in parallel and distributed applications Abstract: Memory bugs, essentially a mistake in the Using the Heap Interposition management of heap memory, can occur in any Agent (HIA) to analyze memory program that is being written, enhanced, or problems maintained. A memory bug can be caused by a number of factors, including failure to check for error conditions; relying on nonstandard behavior; memory leaks including failure to free memory; dangling references such as failure to clear pointers; array bounds violations; and memory corruption such as writing to memory not owned/over running array bounds. These can sometimes cause programs to crash or generate incorrect “random” results, or more frustratingly, they may lurk in the code base for long periods of time — only to manifest themselves at the worst possible time. Memory problems are difficult to track down with conventional tools on even a simple desktop architecture, and are much more vexing then encountered on a distributed parallel architecture. This paper will review the challenges of memory debugging, with special attention paid to the challenges of parallel development and debugging, introduce a tool that helps developers identify and resolve memory bugs in parallel and distributed applications, highlight its major features and provide usage tips. Published: June 2008
  • 2. The Challenges of Memory Debugging in Parallel important to note that analogous errors can also be made Development with memory that is allocated using the C++ new The fact that memory bugs can be introduced at any time statement and the FORTRAN 90 allocate statement. makes memory debugging a challenging task especially in codes that are written collaboratively or that are being Malloc Errors maintained over a long period of time, where assumptions Malloc errors occur when a program passes an invalid about memory management can either change or not be value to one of the operations in the C Heap Manager API. communicated clearly. They can also lurk in a code base This could potentially happen if the value of a pointer (the for long periods of time since they are often not address of a block) is copied into another pointer, and then immediately fatal and can suddenly become an issue at a later time, both pointers are passed to free(). In this when a program is ported to a new architecture or scaled case, the second free() is incorrect because the specified up to a larger problem size, or when code is adapted and pointer does not correspond to an allocated block. The reused from one program to another. behavior of the program after such an operation is undefined. Memory bugs often manifest themselves in several ways: either as a crash that always happens, a crash that Dangling Pointers sometimes happens (instability), or just as incorrect A pointer can be said to be dangling when it references results. Furthermore, they are difficult to track down with memory that has already been deallocated. Any memory commonly used development tools and techniques (such access (either a read or a write) through a dangling pointer as printf and traditional source code debuggers), which are can lead to undefined behavior. Programs with dangling not specifically designed to solve memory problems. pointer bugs may sometimes appear to function without any obvious errors — even for significant amounts of time Adding parallelism to the mix makes things even harder — if the memory that the dangling pointer points to because parallel programs are often squeezed between happens not to be recycled into a new allocation during the two effects, meaning that these programs have to be very time that it is accessed. careful with memory. Parallel programs are also written in situations where the problem set is “large,” so the program Memory Bounds Violations naturally ends up loading a very significant amount of data Individual memory allocations that are returned by malloc() and using a lot of memory. However, special purpose high- represent discrete blocks of memory with defined sizes. performance computing (HPC) systems often have less Any access to memory immediately before the lowest memory per node than one might ideally desire, as address in the block or immediately after the highest memory is expensive. address in the block results in undefined behavior. Read-Before-Write Errors Classifying Memory Errors Reading memory before it has been initialized is a Programs typically make use of several different common error. Some languages assign default values to categories of memory that are managed in different ways. uninitialized global memory, and many compilers can These include stack memory, heap memory, shared identify when local variables are read before being memory, thread private memory and static or global initialized. What is more difficult and generally can only be memory. However, programmers are required to pay done at random is detecting when memory accessed special attention to memory that is allocated out of the through a pointer is read before being initialized. Dynamic heap memory. This is because the management of heap memory is particularly affected, since this is always memory is done explicitly in the program rather than accessed through a pointer, and in most cases, the implicitly at compile or run time. content of memory obtained from the memory manager is undefined. There are a number of ways that a program can fail to make proper use of dynamically allocated heap memory. It is useful to develop a simple categorization of these Detecting Memory Leaks mistakes for discussion; in this paper, they will be Leaks occur when a program finishes using a block of described in terms of the C malloc() API. However, it is memory and discards all references to the block, but fails
  • 3. to call free() to release it back to the heap manager for within one GUI, and the ability to do script-based reuse. The result is that the program is neither able to debugging to use batch queue environments, make it well- make use of the memory nor reallocate it for a new suited for debugging these parallel and distributed purpose. applications. The impact of leaks depends on the nature of the MemoryScape Architecture application. In some cases the effects are very minor; in MemoryScape accomplishes memory debugging on others, where the rate of leakage is high enough or the parallel and distributed applications through the modified runtime of the program is long enough, leaks can use of a technique called interposition. MemoryScape significantly change the memory behavior and the provides a library, called the Heap Interposition Agent performance characteristics of the program. For long- (HIA), that is inserted between the user’s application code running applications or those where memory is limited, and the malloc() subsystem. This library defines functions even a small leakage rate can have a very serious for each of the memory allocation API functions. It is these cumulative and adverse effect. This somewhat functions that are initially called by the program whenever paradoxically takes leaks all that much more annoying, it allocates, reallocates, or frees a block of memory. since they often linger in otherwise well-understood codes. It can be quite challenging to manage dynamic memory in complex applications to ensure that allocations are released exactly once so that malloc and leak errors do not occur. Leak detection can be done at any point in program execution. As discussed, leaks occur when the program ceases using a block of memory without calling free. It is hard to define “ceasing to use” but an advanced memory debugger is able to execute leak detection by looking to see if the program retains a reference to specific memory locations. The MemoryScape Debugger Figure.1 MemoryScape Heap Interposition Agent (HIA) The MemoryScape memory debugger is an easy-to-use Architecture. The HIA sits between the application and the tool for developers. It has a lightweight architecture that memory allocation layer in glibc. requires no recompilation and has modest impact on the runtime performance of the program. The interface is The interposition technique used by MemoryScape was designed around the concept of an inductive user chosen in part because it provides for lightweight memory interface, which guides the user through the task of debugging. Low overheads are an important factor if the memory debugging and provides easy-to-understand performance of a program is not to suffer because of the graphical displays, powerful analysis tools, and features to presence of the HIA. In most cases, the runtime per- support collaboration (making it easy to report a lurking formance of a program being debugged with the HIA memory bug to the library vendor, scientific collaborator, or engaged will be similar to that where the HIA is absent. colleague who wrote the code in question). This is absolutely critical for high-performance computing applications, where a heavyweight approach that signi- MemoryScape is designed to be used with parallel and ficantly slowed the target program might very well make multi-process target applications, providing both detailed the runtime of programs exceed the patience of develop- information about individual processes, as well as high ers, administrators and job schedulers. level memory usage statistics across all of the processes that make up a large parallel application. MemoryScape’s Interposition differs from simply replacing the malloc() specialized features, including support for launching and library with a debug malloc in that the interposition library automatically attaching to all of the processes of a parallel does not actually fulfill any of the operations itself — it job, the ability to memory debug many processes from arranges for the program’s malloc() API function calls to be
  • 4. forwarded to the underlying heap manager that would memory statistics window that provides overall memory have been called in the absence of the HIA. The effect of usage statistics in a number of graphical forms (line, bar interposing with the HIA is that the program behaves in the and pie charts) for one, all, or an arbitrary subset of the same way that it would without the HIA — except that the processes that make up the debugging session. The user HIA is able to intercept all of the memory calls and perform may drive the program to a specific breakpoint or barrier, bookkeeping and “sanity checks” before and after the or simply halt all the processes at an arbitrary point in underlying function is called. execution. The HIA library’s bookkeeping builds up and maintains a The set of processes that the user wishes to see statistical record of all of the active allocations on the heap as the information about may be selected, with the type of view program runs. For each allocation in the heap, it records that the user wants, by clicking “generate view.” The not just the position and size of the block, but also a full generated view represents the state of the program at that function call stack representing what the program was point in time. The user may use the debugger process doing when the block was allocated. The “sanity checks” controls to drive the program to a new point in execution that the HIA performs are the kinds of things that allow the and then update the view to look for changes. If any HIA to detect malloc() errors such as freeing the same processes look out of line, the user will likely want to look block of memory twice or trying to reallocate a pointer that more closely at the detailed status of the heap memory. points to a stack address. Using MemoryScape to Look at Heap Status Depending on how it has been configured, the HIA can MemoryScape provides a wide range of heap status also detect whether some bounds errors have occurred. reports, the most popular of which is the heap graphical The information that the HIA collects is used by the display. At any point where a process has been stopped, a MemoryScape memory debugger to provide the user with user can obtain a graphical view of the heap. This is an accurate picture of the state of the heap. obtained by selecting the heap status tab, selecting one or more processes, choosing the graphical view and clicking MemoryScape Parallel Architecture “generate view.” MemoryScape uses a behind-the-scenes, distributed parallel architecture to manage runtime interaction with the user’s parallel program. MemoryScape starts lightweight debugging agent processes (called tvdsvr processes), which run on the nodes of the cluster where the user’s code is executing. These tvdsvr processes are each responsible for the lowlevel interactions with the individual local processes and the HIA module that is loaded into the process that is being debugged. The tvdsvr processes communicate directly with the MemoryScape front-end process, using their own optimized protocol, which in most cluster configurations is layered on top of TCP/IP. MemoryScape Features Using MemoryScape to Compare Memory Statistics Many parallel and distributed applications have known or expected behaviors in terms of memory usage. They may Figure 2. MemoryScape Graphical Interface provides an be structured so that all of the nodes should allocate the interactive view of the heap. Colors indicate the status of same amount of memory, or they may be structured so memory allocations. that memory usage should depend in some way on the MPI COMMWORLD rank of the process. If such a pattern The resulting display paints a picture of the heap memory is expected or if the user wishes to simply examine the set in the selected process. Each current heap memory of processes to look for patterns, MemoryScape features a allocation is represented by a green line extending across
  • 5. the range of addresses that are part of the allocation. This differ and the overwriting may occur in a different array. gives the user a great way to see the composition of the This leads to extremely frustrating “racy” bugs that program’s heap memory at a glance. The view is inter- manifest differently, 5 sometimes causing the program to active; selecting a block highlights related allocations and crash, sometimes resulting in bad data, and sometimes presents the user with detailed information about both the altering memory in a way that turns out to be completely selected block and the full set of related blocks. The harmless. display can be filtered to dim allocations based on properties such as size or the shared object they were MemoryScape provides a mechanism that involves setting allocated in. The display also supports setting a baseline aside a bit of memory before and after heap memory to let the user see which allocations and deallocations blocks as they are allocated. Since this bit of memory, occur before and after that baseline. called a guard block, is not part of the allocation, the program should never read or write to that location. The Using MemoryScape to Detect Leaks HIA can arrange for the guard blocks to be initialized with MemoryScape performs heap memory leak detection by a pattern and check the guard blocks (any time the user driving the program to a known state (a breakpoint, for asks for a check and again anytime an individual block is example) or by simply halting the processes of a running deallocated) for a change in this pattern. Any changes parallel application using the “halt” command in the GUI or mean that the program wrote past the bounds of the array. the CLI. By selecting the leak detection tab in the memory debugging window, one or more of the processes in the Collaboration Features in MemoryScape parallel job can be selected to generate the leak report. MemoryScape provides users with two forms of memory reporting that help distributed development teams The resulting report will list all of the heap allocations in collaborate effectively to troubleshoot problems and the program for which there are no longer any valid improve product quality. Heap memory views can be references anywhere in the program’s registers, or exported as an HTML file that can be read by a web accessible memory. A block of memory that the program is browser. These HTML files include JavaScript applets that not storing a reference to anywhere is highly unlikely to provide the user with the ability to interact with the report in subsequently be subject to a free() call and is extremely his browser in a similar way to the way that the report can likely to be a leak. Leaks can also be observed in the heap be interacted with on screen — allowing the reader to drill graphical display discussed above by toggling the down into sections of the report that are interesting and checkbox labeled “Detect Leaks” in which leaked blocks survey the rest of the report at a summary level. will be displayed in red on the graphical display. MemoryScape also supports the creation of a memory Using MemoryScape to Detect Heap Bounds debugging data file. This is a binary representation of all of Violations the data that MemoryScape has about a process. These One of the classes of memory errors mentioned above that files can be loaded back in at a later date and interacted is often difficult to diagnose is when an error in the with just like live processes. This gives developers the program logic causes the program to write beyond the ability to store representations of processes for later bounds of a block of memory allocated on the heap. The comparison and examination. malloc API makes no guarantee about the relative spacing or alignment of memory blocks returned in separate Memory debugging data files can also be loaded by the memory allocations - or about what the memory before or memory module of the TotalView® Source Code after any given block may be used for. The result of reads Debugger. This allows sophisticated users to apply even and writes before the beginning of a block of memory or more powerful and precise debugging techniques that take after the end of the block of memory is undefined. advantage of the idea of having memory debugging and access to all the variables and state data for live In practice, blocks are often contiguous with other blocks processes. of program data. Therefore, if the program writes past the end of an array, it is usually overwriting the contents of MemoryScape Usage Tips some other unrelated allocation. If the program is re-run As discussed, MemoryScape detects many instances and the same error occurs, the ordering of allocations may where a program has erroneously written outside the
  • 6. bounds of heap arrays. Developers and scientists can command line version that is specifically designed to be compliment MemoryScape’s heap bounds checking with incorporated into an automatic testing framework. compiler-generated bounds checking code for arrays that Development teams that use MemoryScape in this way are allocated automatically on the heap or in global can detect, analyze and remove new memory errors as program memory. A number of compilers, including the soon as they are introduced in development — before they Intel™ Fortran Compiler and the open source gfortran have any impact in production. compiler, can generate bounds checking code auto- matically with a compile line option (for example, -check- Future MemoryScape Product Plans bounds for ifort and -fbounds-check for gfortran). Areas for future development of MemoryScape include improved integration of the product into the TotalView For developers with more advanced memory debugging Workbench Manager application. The Workbench provides needs, the TotalView Debugger provides a way of a site for sharing configuration and session data between debugging memory problems that allows the user to the different development tools that a developer may need. examine memory information within the source code The Workbench provides an extensible base from which context of the program. When doing memory debugging users can access recent debugging, memory debugging using the TotalView source code debugger, the user can and performance analysis sessions. Because integrated examine data structures that might contain pointers into development environments (IDEs) are popular but not the heap memory within the program. When memory universally embraced, the Workbench can be used from debugging is enabled, these pointers are annotated with within an IDE but does not require it. Future versions of the information about the status of the memory block being MemoryScape product will more than likely share state pointed to. and information about programs, input values and parameters, memory data files, etc. with the Workbench. One advanced technique available to users who are using the TotalView source code debugger in conjunction with Other areas of future MemoryScape development include the memory debugger involves the use of watchpoints. improved support for analyzing the historical usage of memory within the application so that developers can Watchpoints are a debugger feature that allows the generate an accurate understanding of the memory usage process to be stopped at the moment a given block of behavior of the program. Perhaps the most frequently memory is written to. When a pointer is writing “wildly” requested area of enhancement is in regards to providing across memory (into space that is completely unrelated to developers with additional options for detecting and where the pointer is supposed to be writing), it can be very reporting memory reads and writes beyond the extent of hard to pin down. heap allocations. TotalView Technologies is actively investigating possible enhancements that might allow Guard blocks can be used together with watchpoints to developers to trade off runtime performance for more track down this exceptionally subtle type of error. The detailed information in this area. troubleshooting takes two passes. On the first pass through the program, guard blocks are used to identify a Conclusion specific block of memory that is erroneously written to. Memory bugs can occur in any program that is being Then, on the second pass through the program, a watch- written, enhanced or maintained. These types of bugs are point is set at that precise address. The watchpoint should often a source of great frustration for developers because trigger twice: once when the block of memory is painted by they can be introduced at any time and are caused by a the memory debugger and the second time when the block number of different factors. They can also lurk in a code of memory is overwritten by the wild pointer. base for long periods of time and tend to manifest in several ways. While most users will want to use MemoryScape inter- actively as outlined above, ongoing development This makes memory debugging a challenging task, introduces the possibility that new memory bugs may be especially in parallel and distributed programs that include introduced at any point. Development teams are a significant amount of data and use a lot of memory. encouraged to add heap memory tests to their ongoing Commonly used development tools and techniques are not testing strategy. MemoryScape includes a non-interactive specifically designed to solve memory problems and can
  • 7. make the process of finding and fixing memory bugs an MemoryScape’s specialized features, including the ability even more complex process. to compare memory statistics, look at heap status and detect memory leaks, make it uniquely well-suited for MemoryScape is an easy-to-use memory debugging tool debugging these parallel and distributed applications. that helps developers identify and resolve memory bugs. To learn more, contact us at memoryscape@totalviewtech.com , or visit us at www.totalviewtech.com. This is a preliminary document and may be changed prior to final commercial release of the technology described herein. This White Paper is for informational purposes only. TotalView Technologies shall not be liable for technical or editorial errors or omissions contained herein. TotalView Technologies makes no warranties, express, implied or statutory, as to the information contained herein. No part of this document may be reproduced, stored or transmitted in any form or by any means without the express written permission of TotalView Technologies, LLC. TotalView Technologies may have trademarks, patents, copyrights, or other intellectual property rights covering subject matter in this document. The delivery of this document does not give the recipient any license to these trademarks, patents, copyrights, or other intellectual property. Copyright 2008 TotalView Technologies, LLC. All rights reserved. All other trademarks are property of their respective owners.