"run them with appropriate --trace-* commands (e.g --trace-deopt) and then set breakpoints in in places in code where traces are generated",
when you are saying "set breakpoints", is that in javascript code or v8 code ? If for v8, how can I know where traces are generated? My way is to search the output string, set breakpoint, run and view backtrace dumped from gdb. Any better way? For javascript, I only know how to set breakpoint in Chrome with developer tools, but with "d8" commend line, I am still wondering where and how to do that? where can I find more stuff like "OptimizeFunctionOnNextCall", their prototypes and documents. Thanks very much On Mon, Apr 15, 2013 at 3:48 AM, Dmitry Lomov <[email protected]> wrote: > I do not think we have too much learning material on v8 available > (frankly, not even internally :) ). > > If you haven't seen them already, Andy Wingo's articles are helpful to > many people: http://wingolog.org/tags/v8 > You mentioned that you are using it already, but just in case you haven't > seen it, various debug printing options on v8 are very useful (--print-code > --code-comments, print-opt-code and many others). > > One useful way to approach this might be to write some examples that you > think should cause certain behaviors (e.g. deoptimizations), run them with > appropriate --trace-* commands (e.g --trace-deopt) and then set breakpoints > in in places in code where traces are generated. > > There are some debugging intrinsics as well, such as > %OptimizeFunctionOnNextCall. E.g. if you want to see what an optimized > (hydrogenized) code for the function will look like, the following is > useful: > > function f(x, y) { > return x+y; > } > f(1,2); > f(3,4); > %OptimizeFunctionOnNextCall(f); > f(5,6); > > and run this with --allow-natives-syntax --print-opt-code --code-comments. > This will show you the hydrogen code for function f. > > In case you do not know it, CodeSearch on cs.chromium.org contains (as > part of chromium project) a cross-referenced browser-navigable source code > for v8, see for example: > > https://code.google.com/p/chromium/codesearch#chromium/src/v8/include/v8.h&q=v8&sq=package:chromium&l=1 > > I personally find it very useful. > > Hope this helps and best of luck! > Dmitry > > > On Sun, Apr 14, 2013 at 11:29 PM, Yue Xing <[email protected]> wrote: > >> Sure, I will. You are very helpful, really. >> >> A very silly question, I am a newbie to v8, so my ways to try to >> understand v8 is: >> >> 1) build and run benchmark (with flags), which gives me some feeling >> about v8; >> >> 2) read blogs and see video, which gives me basic ideas; >> >> 3) refer to the code, however, the code is too much for me, and I want to >> quickly grab how all the parts work together (for example, I see there are >> hydrogen, ic, lithium, even build graph and build optimized graph, however, >> I still now how all the things work together); >> >> 4) refer to "git log" to see the changes, still very hard; >> >> Could you give me some suggestions that I can see how the parts work >> together? All I can think (maybe my next step) is to use gdb to step >> through function calls, which is tooo inefficient as to huge v8. >> >> Sincerely, >> Amy >> >> >> >> On Sun, Apr 14, 2013 at 2:16 PM, Jakob Kummerow >> <[email protected]>wrote: >> >>> On Sun, Apr 14, 2013 at 11:09 PM, Yue Xing <[email protected]> wrote: >>> >>>> Jakob, Thanks very much! It helps a lot. >>>> >>>> One more question related to your answer, my understanding about >>>> de-optimization is that it happens during execution time when some guard is >>>> compromised, then the de-opt instruction(s) are invoked. In the >>>> compilation/optimization time, the de-opt instruction(s) are inserted at >>>> potential points. Is this correct? >>>> >>> >>> Yes. >>> >>> >>>> I read through the hydrogen.cc and I saw some checkXXX instructions. >>>> Are those also used for the potential de-opt points? >>>> >>> >>> Yes. >>> But you won't see all possible deoptimizations explicitly on the >>> Hydrogen level. Look for uses of DeoptimizeIf() in >>> src/$ARCH/lithium-codegen-$ARCH.cc for more. >>> >>> >>>> Sincerely, >>>> Amy >>>> >>>> >>>> On Sun, Apr 14, 2013 at 1:22 PM, Jakob Kummerow <[email protected] >>>> > wrote: >>>> >>>>> There's no direct relationship between AddSimulate() and >>>>> FinishExitWithDeoptimization(). Both are helper methods to add certain >>>>> HInstructions to the Hydrogen instruction graph. >>>>> >>>>> Simulates are "safe points" or "snapshots" of the compiler's >>>>> "environment", which reflects the execution state of the program, live >>>>> values on the stack and such. Simulates have associated program counter >>>>> addresses in both optimized and unoptimized code that can be translated to >>>>> each other. When a deoptimization happens, execution resumes at the >>>>> address >>>>> in unoptimized code that corresponds to the last simulate *(or basic >>>>> block entry)* before the deopt point. That's why there must generally >>>>> be a simulate after each instruction with observable side effects, i.e. >>>>> after anything that can't just be skipped or re-executed. >>>>> >>>>> FinishExitWithDeoptimization() is just one of many ways of creating >>>>> potential deoptimization points. Its purpose is situations like "insert an >>>>> instruction to compare the hidden class of this object; if it's class A >>>>> jump to block X which will handle that, if it's B jump to block Y; >>>>> otherwise insert an unconditional Deopt instruction and then finish the >>>>> current block". >>>>> >>>>> "The deoptimization stuff" is tricky business involving replacing the >>>>> current stack of the optimized code with what the unoptimized code >>>>> expects. >>>>> If you're interested in the details, you should look at the source code. >>>>> >>>>> ICs are not related to deoptimization. >>>>> >>>>> >>>>> On Sun, Apr 14, 2013 at 6:26 AM, Amy <[email protected]> wrote: >>>>> >>>>>> From a google v8 video, I heard that the simulate instruction is for >>>>>> the de-optimization. I went through the code and found out there >>>>>> is AddSimulate() appearing in the BasicBlock, GraphBuilder, and >>>>>> CodeStubGraphBuilder, etc., while FinishExitWithDeoptimize() in the >>>>>> OptimizedGraphBuilder. >>>>>> >>>>>> My feeling is that maybe AddSimulate() is like a setLongJump(); >>>>>> while FinishExitWithDeoptimize() will do a longJump(). Is this feeling >>>>>> correct? >>>>>> >>>>>> How the de-optimization stuff work? >>>>>> >>>>>> What about IC related to de-optimization? >>>>>> >>>>>> Thanks very much. >>>>>> >>>>>> -- >>>>>> -- >>>>>> v8-users mailing list >>>>>> [email protected] >>>>>> http://groups.google.com/group/v8-users >>>>>> --- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "v8-users" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to [email protected]. >>>>>> >>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>> >>>>>> >>>>>> >>>>> >>>>> -- >>>>> -- >>>>> v8-users mailing list >>>>> [email protected] >>>>> http://groups.google.com/group/v8-users >>>>> --- >>>>> You received this message because you are subscribed to a topic in the >>>>> Google Groups "v8-users" group. >>>>> To unsubscribe from this topic, visit >>>>> https://groups.google.com/d/topic/v8-users/gE7UZAw8AMs/unsubscribe?hl=en >>>>> . >>>>> To unsubscribe from this group and all its topics, send an email to >>>>> [email protected]. >>>>> >>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>> >>>>> >>>>> >>>> >>>> -- >>>> -- >>>> v8-users mailing list >>>> [email protected] >>>> http://groups.google.com/group/v8-users >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "v8-users" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>>> >>>> >>> >>> -- >>> -- >>> v8-users mailing list >>> [email protected] >>> http://groups.google.com/group/v8-users >>> --- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "v8-users" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/v8-users/gE7UZAw8AMs/unsubscribe?hl=en >>> . >>> To unsubscribe from this group and all its topics, send an email to >>> [email protected]. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >>> >> >> -- >> -- >> v8-users mailing list >> [email protected] >> http://groups.google.com/group/v8-users >> --- >> You received this message because you are subscribed to the Google Groups >> "v8-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > -- > -- > v8-users mailing list > [email protected] > http://groups.google.com/group/v8-users > --- > You received this message because you are subscribed to a topic in the > Google Groups "v8-users" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/v8-users/gE7UZAw8AMs/unsubscribe?hl=en. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
