[v8-users] Re: V8 Snapshots Questions and Clarifications
Snapshots are enabled all the time unless you expressly disable them with gyp. On Monday, November 10, 2014 4:59:37 PM UTC-9, Chris E wrote: > > Hello all, > > I am trying to use v8 snapshots to improve the start-up time of a v8 > application (like what chrome/chromium does), but I am unable to find > sufficient documentation to understand and use this feature. > > I have looked at the following references, but it is still not clear to me > exactly how to make the best use of snapshots for performance. > https://developers.google.com/v8/embed > http://qt-project.org/wiki/V8Snapshot > > The QT link seemed the most useful so can anyone verify the correctness of > this reference? > > So basically we have to compile and run our JS application with an > emulator and somehow generate the snapshot.cc using mksnapshot? > If our JS application is large and has many features, how do we know how > much of it should run before creating the snapshot? > How is this snapshot affected by libraries (both C++ and JS) that get > loaded dynamically? > > Also it sounds like we have to be careful that the snapshot is not 'stale' > or outdated with respect to the code that we run to create the snapshot > right? > > Thank you so much for the help and clarifications. > -- -- v8-users mailing list v8-users@googlegroups.com 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 v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [v8-users] Re: V8 Snapshots Questions and Clarifications
So if I'm reading the qt doc [0] and src/mksnapshot.cc [1] correctly, mksnapshot expects to be run like something like ./mksnapshot [optional v8 engine args] mystartup.js mysnapshot.cc where mystartup.js is a JS file that runs without error. I would expect mystartup.js to be a significant enough part of your app that you can measure its compilation during startup. It should also be composed of the "common" part of your app; the part of your app that must run as a prerequisite for all execution paths. For v8, that means it uses mksnapshot to build the JS built-in objects into the runtime startup of itself (a sort bootstrapping technique). It's a process that takes less than 5 ms on an Intel(R) Xeon(R) CPU E3-1240 V2 @ 3.40GHz. I would imagine it's a lot more beneficial in Chrome/Chromium where DOM and a bunch of UI, network, crypto, etc., takes multiple MBs to load. Where this gets interesting is when your mystartup.js depends on Native objects or Native code not built-in to v8 or JS built-ins. mksnapshot does not seem to take this into account. However, it appears, that if you modify src/mksnapshot.cc somewhere after here [2] but before [3], then your mystartup.js *CAN* depend (and compile against) Native code just as is done in samples/shell.cc [4] to load the print/read/load/quit/version Native code. You'll have to rebuild v8 and you'll have to get your source tree co-mingled with v8's tree/build process, but such is life. [0] http://qt-project.org/wiki/V8Snapshot [1] https://github.com/v8/v8/blob/master/src/mksnapshot.cc [2] https://github.com/v8/v8/blob/134ebca3d871784966ea068d06210d9fe70ec4ab/src/mksnapshot.cc#L370 [3] https://github.com/v8/v8/blob/134ebca3d871784966ea068d06210d9fe70ec4ab/src/mksnapshot.cc#L395 [4] https://github.com/v8/v8/blob/134ebca3d871784966ea068d06210d9fe70ec4ab/samples/shell.cc#L96 On Mon, Nov 10, 2014 at 7:06 PM, Flying Jester wrote: > Snapshots are enabled all the time unless you expressly disable them with > gyp. > > > On Monday, November 10, 2014 4:59:37 PM UTC-9, Chris E wrote: >> >> Hello all, >> >> I am trying to use v8 snapshots to improve the start-up time of a v8 >> application (like what chrome/chromium does), but I am unable to find >> sufficient documentation to understand and use this feature. >> >> I have looked at the following references, but it is still not clear to me >> exactly how to make the best use of snapshots for performance. >> https://developers.google.com/v8/embed >> http://qt-project.org/wiki/V8Snapshot >> >> The QT link seemed the most useful so can anyone verify the correctness of >> this reference? >> >> So basically we have to compile and run our JS application with an >> emulator and somehow generate the snapshot.cc using mksnapshot? >> If our JS application is large and has many features, how do we know how >> much of it should run before creating the snapshot? >> How is this snapshot affected by libraries (both C++ and JS) that get >> loaded dynamically? >> >> Also it sounds like we have to be careful that the snapshot is not 'stale' >> or outdated with respect to the code that we run to create the snapshot >> right? >> >> Thank you so much for the help and clarifications. > > -- > -- > v8-users mailing list > v8-users@googlegroups.com > 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 v8-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- -- v8-users mailing list v8-users@googlegroups.com 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 v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [v8-users] Re: V8 Snapshots Questions and Clarifications
mksnapshot isn't intended for creating arbitrary snapshots, that's why it's not exposed or documented. You are of course free to play around with it, but you're pretty much on your own. For the record, Chrome does not create a Chrome-specific V8 snapshot (AFAIK). Also, bear in mind that putting stuff into the snapshot is a tradeoff: extracting things from the snapshot is (usually) faster than parsing/compiling them from source, but on the other hand extracting a bigger snapshot is obviously slower than extracting a smaller snapshot. So V8 tries very carefully to only put the most important bits into the snapshot, rather than anything that might potentially be used at some point. On Tue, Nov 11, 2014 at 7:29 AM, Louis Santillan wrote: > So if I'm reading the qt doc [0] and src/mksnapshot.cc [1] correctly, > mksnapshot expects to be run like something like > > ./mksnapshot [optional v8 engine args] mystartup.js mysnapshot.cc > > where mystartup.js is a JS file that runs without error. I would > expect mystartup.js to be a significant enough part of your app that > you can measure its compilation during startup. It should also be > composed of the "common" part of your app; the part of your app that > must run as a prerequisite for all execution paths. For v8, that > means it uses mksnapshot to build the JS built-in objects into the > runtime startup of itself (a sort bootstrapping technique). It's a > process that takes less than 5 ms on an Intel(R) Xeon(R) CPU E3-1240 > V2 @ 3.40GHz. I would imagine it's a lot more beneficial in > Chrome/Chromium where DOM and a bunch of UI, network, crypto, etc., > takes multiple MBs to load. > > Where this gets interesting is when your mystartup.js depends on > Native objects or Native code not built-in to v8 or JS built-ins. > mksnapshot does not seem to take this into account. However, it > appears, that if you modify src/mksnapshot.cc somewhere after here [2] > but before [3], then your mystartup.js *CAN* depend (and compile > against) Native code just as is done in samples/shell.cc [4] to load > the print/read/load/quit/version Native code. You'll have to rebuild > v8 and you'll have to get your source tree co-mingled with v8's > tree/build process, but such is life. > > [0] http://qt-project.org/wiki/V8Snapshot > [1] https://github.com/v8/v8/blob/master/src/mksnapshot.cc > [2] > https://github.com/v8/v8/blob/134ebca3d871784966ea068d06210d9fe70ec4ab/src/mksnapshot.cc#L370 > [3] > https://github.com/v8/v8/blob/134ebca3d871784966ea068d06210d9fe70ec4ab/src/mksnapshot.cc#L395 > [4] > https://github.com/v8/v8/blob/134ebca3d871784966ea068d06210d9fe70ec4ab/samples/shell.cc#L96 > > On Mon, Nov 10, 2014 at 7:06 PM, Flying Jester > wrote: > > Snapshots are enabled all the time unless you expressly disable them with > > gyp. > > > > > > On Monday, November 10, 2014 4:59:37 PM UTC-9, Chris E wrote: > >> > >> Hello all, > >> > >> I am trying to use v8 snapshots to improve the start-up time of a v8 > >> application (like what chrome/chromium does), but I am unable to find > >> sufficient documentation to understand and use this feature. > >> > >> I have looked at the following references, but it is still not clear to > me > >> exactly how to make the best use of snapshots for performance. > >> https://developers.google.com/v8/embed > >> http://qt-project.org/wiki/V8Snapshot > >> > >> The QT link seemed the most useful so can anyone verify the correctness > of > >> this reference? > >> > >> So basically we have to compile and run our JS application with an > >> emulator and somehow generate the snapshot.cc using mksnapshot? > >> If our JS application is large and has many features, how do we know how > >> much of it should run before creating the snapshot? > >> How is this snapshot affected by libraries (both C++ and JS) that get > >> loaded dynamically? > >> > >> Also it sounds like we have to be careful that the snapshot is not > 'stale' > >> or outdated with respect to the code that we run to create the snapshot > >> right? > >> > >> Thank you so much for the help and clarifications. > > > > -- > > -- > > v8-users mailing list > > v8-users@googlegroups.com > > 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 v8-users+unsubscr...@googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > -- > -- > v8-users mailing list > v8-users@googlegroups.com > 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 v8-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com
Re: [v8-users] Re: V8 Snapshots Questions and Clarifications
Thanks for the clarifications, Jakob. On Tue, Nov 11, 2014 at 1:40 AM, Jakob Kummerow wrote: > mksnapshot isn't intended for creating arbitrary snapshots, that's why it's > not exposed or documented. You are of course free to play around with it, > but you're pretty much on your own. > > For the record, Chrome does not create a Chrome-specific V8 snapshot > (AFAIK). > > Also, bear in mind that putting stuff into the snapshot is a tradeoff: > extracting things from the snapshot is (usually) faster than > parsing/compiling them from source, but on the other hand extracting a > bigger snapshot is obviously slower than extracting a smaller snapshot. So > V8 tries very carefully to only put the most important bits into the > snapshot, rather than anything that might potentially be used at some point. > > On Tue, Nov 11, 2014 at 7:29 AM, Louis Santillan wrote: >> >> So if I'm reading the qt doc [0] and src/mksnapshot.cc [1] correctly, >> mksnapshot expects to be run like something like >> >> ./mksnapshot [optional v8 engine args] mystartup.js mysnapshot.cc >> >> where mystartup.js is a JS file that runs without error. I would >> expect mystartup.js to be a significant enough part of your app that >> you can measure its compilation during startup. It should also be >> composed of the "common" part of your app; the part of your app that >> must run as a prerequisite for all execution paths. For v8, that >> means it uses mksnapshot to build the JS built-in objects into the >> runtime startup of itself (a sort bootstrapping technique). It's a >> process that takes less than 5 ms on an Intel(R) Xeon(R) CPU E3-1240 >> V2 @ 3.40GHz. I would imagine it's a lot more beneficial in >> Chrome/Chromium where DOM and a bunch of UI, network, crypto, etc., >> takes multiple MBs to load. >> >> Where this gets interesting is when your mystartup.js depends on >> Native objects or Native code not built-in to v8 or JS built-ins. >> mksnapshot does not seem to take this into account. However, it >> appears, that if you modify src/mksnapshot.cc somewhere after here [2] >> but before [3], then your mystartup.js *CAN* depend (and compile >> against) Native code just as is done in samples/shell.cc [4] to load >> the print/read/load/quit/version Native code. You'll have to rebuild >> v8 and you'll have to get your source tree co-mingled with v8's >> tree/build process, but such is life. >> >> [0] http://qt-project.org/wiki/V8Snapshot >> [1] https://github.com/v8/v8/blob/master/src/mksnapshot.cc >> [2] >> https://github.com/v8/v8/blob/134ebca3d871784966ea068d06210d9fe70ec4ab/src/mksnapshot.cc#L370 >> [3] >> https://github.com/v8/v8/blob/134ebca3d871784966ea068d06210d9fe70ec4ab/src/mksnapshot.cc#L395 >> [4] >> https://github.com/v8/v8/blob/134ebca3d871784966ea068d06210d9fe70ec4ab/samples/shell.cc#L96 >> >> On Mon, Nov 10, 2014 at 7:06 PM, Flying Jester >> wrote: >> > Snapshots are enabled all the time unless you expressly disable them >> > with >> > gyp. >> > >> > >> > On Monday, November 10, 2014 4:59:37 PM UTC-9, Chris E wrote: >> >> >> >> Hello all, >> >> >> >> I am trying to use v8 snapshots to improve the start-up time of a v8 >> >> application (like what chrome/chromium does), but I am unable to find >> >> sufficient documentation to understand and use this feature. >> >> >> >> I have looked at the following references, but it is still not clear to >> >> me >> >> exactly how to make the best use of snapshots for performance. >> >> https://developers.google.com/v8/embed >> >> http://qt-project.org/wiki/V8Snapshot >> >> >> >> The QT link seemed the most useful so can anyone verify the correctness >> >> of >> >> this reference? >> >> >> >> So basically we have to compile and run our JS application with an >> >> emulator and somehow generate the snapshot.cc using mksnapshot? >> >> If our JS application is large and has many features, how do we know >> >> how >> >> much of it should run before creating the snapshot? >> >> How is this snapshot affected by libraries (both C++ and JS) that get >> >> loaded dynamically? >> >> >> >> Also it sounds like we have to be careful that the snapshot is not >> >> 'stale' >> >> or outdated with respect to the code that we run to create the snapshot >> >> right? >> >> >> >> Thank you so much for the help and clarifications. >> > >> > -- >> > -- >> > v8-users mailing list >> > v8-users@googlegroups.com >> > 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 v8-users+unsubscr...@googlegroups.com. >> > For more options, visit https://groups.google.com/d/optout. >> >> -- >> -- >> v8-users mailing list >> v8-users@googlegroups.com >> 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