The profile for the "slow transaction" doesn't really say anything other than that the C++ compiler didn't do any inlining (probably due to oprofile, or was this a Debug build, or both?).
On Tue, Mar 24, 2015 at 9:50 AM, Toon Verwaest <verwa...@chromium.org> wrote: > If your transactional scripts contain function declarations that you > instantiate, even if they are global, you'll inadvertantly cause > polymorphism on the second run. That will slow down significantly. You can > avoid this by only rerunning scripts that call/instantiate existing > functions. Alternatively you can turn off the compilation cache; which will > help with runtime (not load time though) if you reload all scripts. > > (Btw, you might want to turn off handle zapping as well...) > > Hth, > Toon > > On Tue, Mar 24, 2015, 09:29 Danny Dorfman <wilderness...@gmail.com> wrote: > >> Hello there, >> >> I have an issue with some code running JavaScript under V8, The code runs >> in a *single* Isolate, that has *one* context. >> The context is created, populated with some scripts, the scripts are >> executed, and then the context is Exit()ed. The Isolate stays intact. >> The above sequence repeats itself several times, with the *same* scripts >> running time and again. This is what I call a series of "transactions". >> >> What happens, is after the initial transaction is executed, all the >> subsequent ones experience a drastic slowdown (sometimes 7 times slower). >> I tried profiling the code with* oprofile*, and I see this picture: >> >> *Fast transaction:* >> PU: Intel Ivy Bridge microarchitecture, speed 3401 MHz (estimated) >> Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a >> unit mask of 0x00 (No unit mask) count 100000 >> samples % image name symbol name >> 2444 1.8590 libv8.so >> v8::internal::HandleScope::ZapRange(v8::internal::Object**, >> v8::internal::Object**) >> 1849 1.4064 libv8.so >> v8::internal::HeapObject::map() const >> 1537 1.1691 libv8.so v8::base::NoBarrier_Load(long >> const volatile*) >> 1417 1.0778 libv8.so >> v8::internal::SmiTagging<8ul>::SmiToInt(v8::internal::Object const*) >> 1286 0.9782 libv8.so >> v8::internal::FixedArrayBase::length() const >> 1273 0.9683 libpthread-2.13.so pthread_getspecific >> 1250 0.9508 libv8.so >> v8::internal::MapWord::MapWord(unsigned long) >> 1235 0.9394 libv8.so >> v8::internal::FixedArray::get(int) const >> 1171 0.8907 libv8.so v8::base::Acquire_Load(long >> const volatile*) >> 1029 0.7827 libv8.so void >> v8::base::CallOnce<void>(long*, v8::base::OneArgFunction<void*>::type, >> void*) >> 1021 0.7766 libv8.so >> v8::internal::HeapObject::map_word() const >> ..... >> >> *Slow transaction:* >> CPU: Intel Ivy Bridge microarchitecture, speed 3401 MHz (estimated) >> Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a >> unit mask of 0x00 (No unit mask) count 100000 >> samples % image name symbol name >> 27474 8.4737 libv8.so >> v8::internal::HeapObject::map() const >> 17271 5.3268 libv8.so >> v8::internal::MapWord::MapWord(unsigned long) >> 15862 4.8923 libv8.so >> v8::internal::Map::instance_type() >> 14754 4.5505 libv8.so v8::base::NoBarrier_Load(long >> const volatile*) >> 13941 4.2998 libv8.so >> v8::internal::HeapObject::map_word() const >> 13573 4.1863 libv8.so >> v8::internal::MapWord::FromRawValue(unsigned long) >> 11299 3.4849 libv8.so >> v8::internal::Internals::HasHeapObjectTag(v8::internal::Object const*) >> 10365 3.1968 libv8.so >> v8::internal::Object::IsInternalizedString() const >> 8469 2.6121 libv8.so >> v8::internal::HeapObject::cast(v8::internal::Object const*) >> 8085 2.4936 libv8.so >> v8::internal::Object::IsHeapObject() const >> 6350 1.9585 libv8.so >> v8::internal::Object::IsOddball() const >> 6105 1.8829 libv8.so >> v8::internal::Embedded::Embedded() >> 5777 1.7818 libv8.so >> v8::internal::MapWord::ToRawValue() >> 5670 1.7488 libv8.so v8::internal::MapWord::ToMap() >> ... >> >> Any idea what is happening here? Why is the same code running so slowly >> the second (third, etc) time around? >> >> Regards, >> Danny >> >> -- >> -- >> 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/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.