[cfe-dev] Proposal: Type-Aware Memory Profiling
Dai Mikurube
dmikurube at chromium.org
Tue Jan 8 01:21:44 PST 2013
Hi Sean,
Thanks for your suggestion. DTrace sounds reasonable. I may implement the
general (described) way at first, but will try DTrace as a next step.
On Tue, Jan 8, 2013 at 8:50 AM, Sean Silva <silvas at purdue.edu> wrote:
> On Mac, you should hook this into DTrace and let DTrace handle all the
> data collection and filtering. This would save you the trouble of
> having to relink the browser, and would have basically no slowdown
> when disabled (just the overhead of argument shuffling + call + ret
> (and even this could be reduced)). That would be really convenient so
> that you could e.g. trace the memory allocation patterns of only a
> particular webpage, or easily iterate (like, 5 sec. iteration time) an
> analysis, filtering/aggregating on type, size, call stack, pid,
> thread, or anything else that DTrace can look at + whatever else you
> expose to it.
>
> -- Sean Silva
>
> On Mon, Jan 7, 2013 at 6:01 AM, Dai Mikurube <dmikurube at chromium.org>
> wrote:
> > Hello,
> >
> > Does anyone have additional opinions about it? If none, I think I'll
> create
> > a bug entry and start working on it soon.
> >
> >
> > On Fri, Dec 7, 2012 at 1:47 AM, Dai Mikurube <dmikurube at chromium.org>
> wrote:
> >>
> >> Thanks for your interest.
> >>
> >> Does "the context information" mean like a call site (__FILE__ and
> >> __LINE__)? If so, yes, preserving them may be useful. It might be a
> good
> >> idea if it is committed to the Clang tree. I didn't implement it in the
> >> prototype just because I didn't use it -- we're using calling stacks
> >> instead.
> >>
> >>
> >> On Thu, Dec 6, 2012 at 5:24 PM, Onewastedlife <onewastedlife at gmail.com>
> >> wrote:
> >>>
> >>> Interesting.. Why would you not preserve the context information as
> well?
> >>>
> >>> Regard,
> >>> Ramneek
> >>>
> >>> On Dec 6, 2012, at 11:28 PM, Dai Mikurube <dmikurube at chromium.org>
> wrote:
> >>>
> >>> Hi cfe-dev,
> >>>
> >>> I'd like to propose a way of Type-Aware Memory Profiling in Clang. It
> was
> >>> one of the lightning talks at the DevMtg by Nico Weber on behalf of me.
> >>> Slides and Video were recently published.
> >>> * http://llvm.org/devmtg/2012-11/Weber_TypeAwareMemoryProfiling.pdf
> >>> *
> >>>
> http://llvm.org/devmtg/2012-11/videos/Weber_TypeAwareMemoryProfiling.mp4
> >>>
> >>> Object's type information is useful to profile memory usage in a
> process.
> >>> Type info is, however, hard to use in C++ programs. Our proposal is
> to make
> >>> it easy by compiler's help. We implemented an early prototype, and the
> >>> prototype has been working in Chromium project for a couple of months.
> >>>
> >>>
> >>> What do you think? I wonder if I could have your opinions about it.
> The
> >>> details are discussed in this document.
> >>>
> https://docs.google.com/document/d/1zyJ3FJhheJ5iSxYaMXARkZcR61tx6r44euMJbWw8jFY/edit
> >>>
> >>> tl;dr, we did it by user-defined intercepting functions for operator
> new
> >>> and delete. If a developer defines a function __op_new_intercept__
> (and if
> >>> a compiler option is given!), the function intercepts operator new
> calls.
> >>>
> >>>
> >>> An example follows :
> >>>
> >>> $ cat typeaware.cc
> >>> #include <stdio.h>
> >>> #include <typeinfo>
> >>>
> >>> struct Klass {
> >>> int x, y, z;
> >>> };
> >>>
> >>> void* __op_new_intercept__(
> >>> void* address, std::size_t size, const std::type_info& type) {
> >>> printf("Allocated %lu bytes for %s at %016p.\n",
> >>> size, type.name(), address);
> >>> return address;
> >>> }
> >>>
> >>> void* __op_delete_intercept__(
> >>> void* address, std::size_t size, const std::type_info& type) {
> >>> printf("Deallocated %lu bytes for %s at %016p.\n",
> >>> size, type.name(), address);
> >>> return address;
> >>> }
> >>>
> >>> int main() {
> >>> int *i;
> >>> Klass *k;
> >>> i = new int(3);
> >>> k = new Klass();
> >>> delete k;
> >>> delete i;
> >>> return 0;
> >>> }
> >>>
> >>> $ clang++ -fintercept-allocation-functions typeaware.cc
> >>>
> >>> $ ./a.out
> >>> Allocated 4 bytes for i at 0x000000022df010.
> >>> Allocated 12 bytes for 5Klass at 0x000000022df030.
> >>> Deallocated 12 bytes for 5Klass at 0x000000022df030.
> >>> Deallocated 4 bytes for i at 0x000000022df010.
> >>>
> >>> --
> >>> Dai MIKURUBE
> >>> dmikurube at chromium.org
> >>>
> >>> _______________________________________________
> >>> cfe-dev mailing list
> >>> cfe-dev at cs.uiuc.edu
> >>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
> >>
> >>
> >>
> >>
> >> --
> >> Dai MIKURUBE
> >> dmikurube at chromium.org
> >>
> >
> >
> >
> > --
> > Dai MIKURUBE
> > dmikurube at chromium.org
> >
> > _______________________________________________
> > cfe-dev mailing list
> > cfe-dev at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
> >
>
--
Dai MIKURUBE
dmikurube at chromium.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130108/0eaaf022/attachment.html>
More information about the cfe-dev
mailing list