Section 3.6. Examining User-Level Locks in a Process


3.6. Examining User-Level Locks in a Process

With the process lock statistics command, plockstat(1M), you can observe hot lock behavior in user applications that use user-level locks. The plockstat command uses DTrace to instrument and measure lock statistics.

# plockstat -p 27088 ^C Mutex block Count     nsec Lock                         Caller -------------------------------------------------------------------------------   102 39461866 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28     4 21605652 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    11 19908101 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    12 16107603 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    10  9000198 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    14  5833887 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    10  5366750 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28   120   964911 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    48   713877 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    52   575273 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    89   534127 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    14   427750 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28     1   348476 libaio.so.1`__aio_mutex      libaio.so.1`_aio_req_add+0x228 Mutex spin Count     nsec Lock                         Caller -------------------------------------------------------------------------------     1 375967836 0x1000bab58                  libaio.so.1`_aio_req_add+0x110   427   817144 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    18   272192 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28   176   212839 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    36   203057 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    41   197392 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28     3   100364 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28 Mutex unsuccessful spin Count     nsec Lock                         Caller -------------------------------------------------------------------------------   222   323249 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    60   301223 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    24   295308 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    56   286114 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    99   282302 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28    25   278939 libaio.so.1`__aio_mutex      libaio.so.1`_aio_lock+0x28     1   241628 libaio.so.1`__aio_mutex      libaio.so.1`_aio_req_add+0x228 


Solaris has two main types of user-level locks:

  • Mutex lock. An exclusive lock. Only one person can hold the lock. A mutex lock attempts to spin (busy spin in a loop) while trying obtain the lock if the holder is running on a CPU, or blocks if the holder is not running or after trying to spin for a predetermined period.

  • Reader/Writer Lock. A shared reader lock. Only one person can hold the write lock, but many people could hold a reader lock while there are no writers.

The statistics show the different types of locks and information about contention for each. In this example, we can see mutex-block, mutex-spin, and mutex-unsuccessful-spin. For each type of lock we can see the following:

  • Count. The number of contention events for this lock

  • nsec. The average amount of time for which the contention event occurred

  • Lock. The address or symbol name of the lock object

  • Caller. The library and function of the calling function




Solaris Performance and Tools(c) Dtrace and Mdb Techniques for Solaris 10 and Opensolaris
Solaris Performance and Tools: DTrace and MDB Techniques for Solaris 10 and OpenSolaris
ISBN: 0131568191
EAN: 2147483647
Year: 2007
Pages: 180

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net