Oh OK, I absolutely missed the point about statistical profiler. I see a lot more clearly now, thanks for your explanation.
The interpretation is quite hard then, it will require some experience ;) On 12 September 2012 10:55, Vyacheslav Egorov <[email protected]> wrote: > > I feel like the bold line is interesting, and I'm tempted to interpret > it as > > "fibo() takes 76.5% of the whole CPU", but it's not so simple. > > Please read the comment about the profile: > > Note: percentage shows a share of a particular caller in the total > amount of its parent calls. > > In any case with with statistical profiler "function Foo takes X ticks > out of Y ticks recorded total" should be read as "profiler looked at > the program Y times and in X times he saw function Foo near the top of > the stack". Statistical profiler results do not translate into > information about event loop blocking or CPU cycles spent by > functions. > > -- > Vyacheslav Egorov > > > On Wed, Sep 12, 2012 at 9:50 AM, Nicolas Chambrier <[email protected]> > wrote: > > I'll show you what I've done to train until now, so you may better > > understand what I'm looking for in case I'm not very clear ^^ > > > > > > So I wrote a basic script: > > > > function hello() { > > console.log('.'); > > } > > > > function fibo(n, cb) { > > if (n === 0) { > > process.nextTick(cb.bind(null, 0)); > > } else if (n === 1) { > > process.nextTick(cb.bind(null, 1)); > > } else { > > var n1, n2; > > process.nextTick(fibo.bind(null, n-1, function(n){ n1 = n; next(); > })); > > process.nextTick(fibo.bind(null, n-2, function(n){ n2 = n; next(); > })); > > function next() { > > if (typeof n1 === 'undefined' || typeof n2 === 'undefined') { > > return; > > } > > process.nextTick(cb.bind(null, n1+n2)); > > } > > } > > } > > > > var interval = setInterval(hello, 100); > > > > fibo(24, function (n) { > > clearInterval(interval); > > console.log(n); > > }); > > > > It produces following output, where I can see how the event loop is > blocked, > > and the whole point is to detect who is blocking it (here it's obviously > > fibo() but I train for less obvious cases ;)) > > > > $ time node fibo.js > > ] 9:43 > > . > > . > > . > > . > > . > > 46368 > > node fibo.js 0,95s user 0,06s system 99% cpu 1,021 total > > > > nprof produces the following output: > > > > Statistical profiling result from v8.log, (914 ticks, 0 unaccounted, 0 > > excluded). > > … > > [Bottom up (heavy) profile]: > > Note: percentage shows a share of a particular caller in the total > > amount of its parent calls. > > Callers occupying less than 2.0% are not shown. > > > > ticks parent name > > 741 81.1% /usr/local/bin/node > > 187 25.2% LazyCompile: bind native v8natives.js:1456 > > 143 76.5% LazyCompile: *fibo /home/nchambrier/Bureau/fibo.js:5 > > 143 100.0% Function: ~d native v8natives.js:1480 > > 142 99.3% LazyCompile: > > *startup.processNextTick.process._tickCallback node.js:185 > > 44 23.5% Function: ~next /home/nchambrier/Bureau/fibo.js:14 > > 30 68.2% Function: ~process.nextTick.fibo.bind.n2 > > /home/nchambrier/Bureau/fibo.js:12 > > 30 100.0% Function: ~d native v8natives.js:1480 > > 30 100.0% LazyCompile: > > *startup.processNextTick.process._tickCallback node.js:185 > > 14 31.8% Function: ~<anonymous> > > /home/nchambrier/Bureau/fibo.js:13 > > 14 100.0% Function: ~d native v8natives.js:1480 > > 14 100.0% LazyCompile: > > *startup.processNextTick.process._tickCallback node.js:185 > > … > > > > I feel like the bold line is interesting, and I'm tempted to interpret > it as > > "fibo() takes 76.5% of the whole CPU", but it's not so simple. > > > > I'll give another try to valgrind, just in case. > > > > > > > > Le mercredi 12 septembre 2012 09:35:39 UTC+2, Nicolas Chambrier a écrit : > >> > >> Thanks for your answers. nprof and node-tick-processor have worked > >> properly and I could retrieve information from v8.log. Now I just have > to > >> learn how to use it, it's not as obvious as I could imagine: still no > >> function name for example :( I've made a dumb script with a fibo + other > >> functions, and I can't see how to make the profiler tell me "fibo() is > >> taking all your CPU". If you have any good resources to learn that, I'd > be > >> glad ;) > >> > >> Thanks too for the "look" module, I'll give a try it sounds really > >> interesting. > >> > >> I only profiled PHP and Java apps until now, and outputs are very clear, > >> maybe this difficulty is generic to C++ apps ? > >> > >> > >> > >> > >> Le mercredi 12 septembre 2012 02:45:04 UTC+2, Andrey a écrit : > >>> > >>> Try node-tick-processor to read your v8.log - > >>> https://github.com/sidorares/node-tick > >>> > >>> On Wednesday, 12 September 2012 02:39:26 UTC+10, Nicolas Chambrier > wrote: > >>>> > >>>> Hello, > >>>> > >>>> I'm desperately trying to profile my application, like I used to do > with > >>>> other languages where I could output some file I could pass to > kcachegrind > >>>> which would show me when and where the runtime executed my code. > >>>> > >>>> I'm running Ubuntu or Debian VM, whatever I've tried several methods: > >>>> > >>>> Using dtrace on SmartOS: OK I can run dtrace, but I'm absolutely lost > on > >>>> SmartOS and I need many bricks like Redis and MongoDB I'm not sure > how to > >>>> install properly (I've compiled everything, which was a pita). Plus > I'm not > >>>> a sysadmin, which makes me waste ages each time I need to configure > >>>> anything. Not forgetting the most recent provided zone (node-1.3.3) > includes > >>>> node v0.6.8. Dafuq ? > >>>> Using node --prof seemed very promising: simple, everything is > embedded, > >>>> cool :) I can generate a v8.log, OK. But then when I run > >>>> "deps/v8/tools/linux-tick-processor" on it, I get no output, just an > exit > >>>> code 126. No idea what it means, I couldn't find information about > this :( > >>>> Using valgrind I can output a callgrind file I can then use with > >>>> kcachegrind. It's cool and I get real values, I can practically see > the call > >>>> chain, but I can't see my real function names. Instead I get some > >>>> hexadecimal names, v8:: and node:: internals. That makes it quite > useless > >>>> for me :( > >>>> nodetime is great, but I'd really like a tool that doesn't rely on > >>>> external service. Even if I finally stick with this solution, I need > to have > >>>> an alternative. > >>>> > >>>> > >>>> Does someone know where error 126 comes from in linux-tick-processor ? > >>>> > >>>> Does what I'm looking for only exist: a profiler that would output > stack > >>>> and durations with the actual function names ? And easy to use on > Linux x] > >>>> > >>>> > >>>> Thanks a lot for all the information you can provide! I really want to > >>>> get through that this time ;) > > > > -- > > Job Board: http://jobs.nodejs.org/ > > Posting guidelines: > > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > > You received this message because you are subscribed to the Google > > Groups "nodejs" group. > > To post to this group, send email to [email protected] > > To unsubscribe from this group, send email to > > [email protected] > > For more options, visit this group at > > http://groups.google.com/group/nodejs?hl=en?hl=en > > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > -- Nicolas Chambrier, aka naholyr Blog : http://naholyr.fr Formateur Clever Institut : http://clever-institut.com/formateur/nicolas-chambrier -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en
