|
Description
|
The profile provider in many cases fails to report the stack frame nearest the PC.
This occurs whether a Dtrace script is used -
profile:::profile-479
/arg0/
{
@a["!",stack(50)] = count();
}
or lockstat -I -s 50.
We have to accept genuine cases of optimized tail calls will omit frames
as in those cases, the frames are not present. But these are not tail calls
and are among the hottest call stacks in a profile.
!
unix`mutex_enter+0x10
unix`av_dispatch_autovect+0x78
unix`intr_thread+0x5f
490
!
unix`ddi_get32+0x14
unix`av_dispatch_autovect+0x78
unix`intr_thread+0x5f
539
!
It's actually the HBA xx_intr() routine calling ddi_get32() and mutex_enter().
Failing to include the true caller can leading to significant error and
misinterpretation of gprof/generated style profiles such as lockstat -g.
In some cases, the call stacks appear to be intact, but in many (?half) the
frame nearest the PC is missing.
|