In rw_enter_sleep(),
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/os/rwlock.c#rw_enter_sleep
...

    306                 sleep_time
<http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/os/rwlock.c#sleep_time>
= -gethrtime 
<http://src.opensolaris.org/source/s?defs=gethrtime&project=/onnv>();
    307                 *if* (rw
<http://src.opensolaris.org/source/s?defs=rw&project=/onnv> ==
RW_READER <http://src.opensolaris.org/source/s?defs=RW_READER&project=/onnv>)
{
    308                         THREAD_KPRI_RELEASE
<http://src.opensolaris.org/source/s?defs=THREAD_KPRI_RELEASE&project=/onnv>();
    309                         CPU_STATS_ADDQ
<http://src.opensolaris.org/source/s?defs=CPU_STATS_ADDQ&project=/onnv>(CPU
<http://src.opensolaris.org/source/s?defs=CPU&project=/onnv>, sys
<http://src.opensolaris.org/source/s?defs=sys&project=/onnv>,
rw_rdfails <http://src.opensolaris.org/source/s?defs=rw_rdfails&project=/onnv>,
1);
    310                         (*void*) turnstile_block
<http://src.opensolaris.org/source/s?defs=turnstile_block&project=/onnv>(ts,
TS_READER_Q 
<http://src.opensolaris.org/source/s?defs=TS_READER_Q&project=/onnv>,
lp,
    311                             &rw_sobj_ops
<http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/os/rwlock.c#rw_sobj_ops>,
NULL <http://src.opensolaris.org/source/s?defs=NULL&project=/onnv>,
NULL <http://src.opensolaris.org/source/s?defs=NULL&project=/onnv>);
    312                 } *else* {
    313                         CPU_STATS_ADDQ
<http://src.opensolaris.org/source/s?defs=CPU_STATS_ADDQ&project=/onnv>(CPU
<http://src.opensolaris.org/source/s?defs=CPU&project=/onnv>, sys
<http://src.opensolaris.org/source/s?defs=sys&project=/onnv>,
rw_wrfails <http://src.opensolaris.org/source/s?defs=rw_wrfails&project=/onnv>,
1);
    314                         (*void*) turnstile_block
<http://src.opensolaris.org/source/s?defs=turnstile_block&project=/onnv>(ts,
TS_WRITER_Q 
<http://src.opensolaris.org/source/s?defs=TS_WRITER_Q&project=/onnv>,
lp,
    315                             &rw_sobj_ops
<http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/os/rwlock.c#rw_sobj_ops>,
NULL <http://src.opensolaris.org/source/s?defs=NULL&project=/onnv>,
NULL <http://src.opensolaris.org/source/s?defs=NULL&project=/onnv>);
    316                 }
    317                 sleep_time
<http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/os/rwlock.c#sleep_time>
+= gethrtime 
<http://src.opensolaris.org/source/s?defs=gethrtime&project=/onnv>();
    318
    319                 LOCKSTAT_RECORD4
<http://src.opensolaris.org/source/s?defs=LOCKSTAT_RECORD4&project=/onnv>(LS_RW_ENTER_BLOCK
<http://src.opensolaris.org/source/s?defs=LS_RW_ENTER_BLOCK&project=/onnv>,
lp, sleep_time 
<http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/os/rwlock.c#sleep_time>,
rw <http://src.opensolaris.org/source/s?defs=rw&project=/onnv>,
    320                     (old & RW_WRITE_LOCKED
<http://src.opensolaris.org/source/s?defs=RW_WRITE_LOCKED&project=/onnv>)
? 1 : 0,
    321                     old >> RW_HOLD_COUNT_SHIFT
<http://src.opensolaris.org/source/s?defs=RW_HOLD_COUNT_SHIFT&project=/onnv>);

...
Wouldn't something like LOCKSTAT_START_TIME be more efficient instead of
calling gethrtime() regardless if the lockstat probe has been enabled or
not?

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/sys/lockstat.h

#*define*       LOCKSTAT_START_TIME
<http://src.opensolaris.org/source/s?refs=LOCKSTAT_START_TIME&project=/onnv>(probe
<http://src.opensolaris.org/source/s?defs=probe&project=/onnv>) (               
        \
        lockstat_probemap
<http://src.opensolaris.org/source/s?defs=lockstat_probemap&project=/onnv>[(probe
<http://src.opensolaris.org/source/s?defs=probe&project=/onnv>)] ?
gethrtime_waitfree
<http://src.opensolaris.org/source/s?defs=gethrtime_waitfree&project=/onnv>()
: 0     \
        )

Just curious. Thx.
-Paul
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to