Собственное время включает только время для запуска встроенного кода в определенной функции и исключает любое время, затрачиваемое на выполнение подфункций
Да, «самостоятельное время» - это число образцов тиков, которые произошли в данной функции.
Мне интересно, включает ли время для подготовки к этим вызовам время, и т. Д. c?
«время для подготовки вызовов» не измеряется отдельно.
Я заметил, что некоторые функции в моем приложении, которые выполняют много вложенных вызовов, по-видимому, имеют чрезмерное количество собственного времени
Я думаю, что вы наблюдаете это вызвано встраиванием. Когда функция оптимизируется, и компилятор решает встроить в нее одну или несколько вызываемых функций, то впоследствии профилировщик не сможет различить guish откуда были взяты первоначально инструкции (одна из причин, по которым встраивание может быть полезным потому что это может позволить устранить избыточность, которая естественным образом стирает строки, к которым исходная функция принадлежит данной инструкции). Имеет ли это смысл?
Если вы хотите исключить эффекты встраивания при профилировании, вы можете отключить встраивание. В Node / V8 вы можете запустить с --noturbo-inlining
. (FWIW, в C / C ++ это также верно, когда GCC / Clang понимает -fno-inline
.) Обратите внимание, что отключение встраивания изменяет характеристики производительности вашего приложения, поэтому может привести к вводящим в заблуждение результатам (в частности: это может быть так, что без на вкладке вы увидите проблему с производительностью, которая просто исчезает при включении наложения); но это также может быть полезно для определения того, что медленно.