2009-12-26 6 views
5

estoy leyendo http://lse.sourceforge.net/locking/dcache/dcache_lock.html, en el que el tiempo spinlock para cada función se mide:¿Cómo medir la contención de bloqueo?

SPINLOCKS   HOLD   WAIT 
    UTIL CON MEAN( MAX) MEAN( MAX)(% CPU)  TOTAL NOWAIT SPIN RJECT NAME 
    5.3% 16.5% 0.6us(2787us) 5.0us(3094us)(0.89%) 15069563 83.5% 16.5% 0% dcache_lock 
0.01% 10.9% 0.2us(7.5us) 5.3us(116us)(0.00%) 119448 89.1% 10.9% 0% d_alloc+0x128 
0.04% 14.2% 0.3us( 42us) 6.3us(925us)(0.02%) 233290 85.8% 14.2% 0% d_delete+0x10 
0.00% 3.5% 0.2us(3.1us) 5.6us( 41us)(0.00%)  5050 96.5% 3.5% 0% d_delete+0x94 

Me gustaría saber donde estas estadísticas son de. Probé Oprofile, pero parece opérculo no puede medir la espera de bloqueo y el tiempo de espera de un bloqueo específico. Y el drd de valgrind ralentiza demasiado las aplicaciones, lo que hará que el resultado sea menos preciso y también consuma demasiado tiempo. mutrace parece bueno, pero como su nombre lo indica, me temo que solo puede rastrear exclusiones mutex.

¿Hay alguna otra herramienta, o cómo usar las herramientas que mencioné anteriormente, para obtener las estadísticas de contención de bloqueo?

Gracias por su respuesta.

Respuesta

3

Finalmente encuentro la herramienta de medición del rendimiento utilizada en el artículo, que necesita parchear el kernel.

La página de introducción se puede encontrar en http://oss.sgi.com/projects/lockmeter/, y la última revisión del kernel corresponde a la versión 2.6.16 del kernel, que puede descargar here.

2

Una forma de saber es ponerlo en funcionamiento, pausarlo y tomar random stackshot de todos los hilos. Entonces hazlo de nuevo, varias veces. Entonces, la fracción de las muestras de la pila que terminan en el código de bloqueo es el porcentaje del tiempo que está buscando, más o menos. También le indicará en qué ubicaciones se realiza el bloqueo. Si busca la precisión, tome más muestras. Esto funciona en cualquier idioma o sistema operativo.

Cuestiones relacionadas