Veíamos en el artículo anterior que con el comando lockstat podíamos tracear los bloqueos que se dan en nuestro sistema a nivel de kernel. Sin embargo nuestra aplicación puede sufrir bloqueos a nivel de usuario. Estos se crean desde el código de una aplicación usando las llamadas mutex_init() o rwlock_init(). Lógicamente su función es sincronizar el acceso de los distintos threads a determinados recursos.
OpenSolaris nos permite tracear los dichos bloqueos con el comando plockstat, usa dtrace internamente, de forma que podemos medir el impacto en la performance. En la página man encontraremos explicadas las distintas opciones, nosotros usamos las opciones -A para que nos reporte todos los eventos, con la opción -p podemos monitorizar a un pid existente.
plockstat -A cat /etc/passwd
[...]
Mutex hold
Count nsec Lock Caller
1 70200 libc.so.1`_uberdata+0xfc0 cat`_start+0x110
1 40900 libc.so.1`__sbrk_lock libc.so.1`_smalloc+0x4c
1 39400 libc.so.1`_uberdata+0x40 LM1`ld.so.1`call_init+0x70
1 34300 libc.so.1`_uberdata+0x40 LM1`ld.so.1`call_init+0x70
1 27600 libc.so.1`_uberdata+0xfc0 cat`_start+0xac
1 24700 libc.so.1`_uberdata+0x40 cat`main+0x24
1 23100 libc.so.1`_uberdata+0x40 cat`main+0x24
1 4900 libc.so.1`_uberdata+0xfc0 cat`_start+0xb8
La salida es casi autoexplicativa:
Estos datos pueden ser de una gran ayuda para que nuestros desarrolladores mejoren la performance de sus aplicaciones.