pthread_mutex_t pthread_mutex_init pthread_create pthread example c++ c performance pthreads mutex

c++ - pthread_mutex_init - ¿Cómo perfil pthread mutex en linux?



pthreads php (5)

Me gustaría saber cómo perfilar un mutex pthread para ver si hay puntos de contención de bloqueo en mi código. (A quién le gusta el código polémico, ¿verdad? :) Sé cómo hacer un perfil más general del código, como menciono here . Pero me gustaría saber si hay herramientas u opciones disponibles para poder configurar el bloqueo de exclusión mutua que proporcionaría métricas / estadísticas sobre las contenciones de bloqueo de exclusión mutua para ver si tengo áreas problemáticas.

Aquí hay algunos antecedentes y contexto:

Recientemente, trabajé en un proyecto C ++ incrustado utilizando una CPU Cavium Octeon. El Octeon SDK implementa la sincronización de estilo mutex mediante el uso de cierres de giro. Revisando la documentación de Octeon, encontré una forma de crear un perfil de los cierres giratorios para poder ver cuántas veces tenía que girar cada bloqueo mientras esperaba que el bloqueo estuviera disponible. Para usar esto tuve que hacer una compilación condicional y luego incrementaría un contador cada vez que se hiciera girar el spinlock, luego podría consultar el valor de espera del spinner. Entonces, lo que hice fue encapsular el spinlock y agregar la capacidad de volcar el valor de espera del spinner del spinlock para todos los spinlocks utilizados en el sistema. El valor real no significó mucho, pero hubo algunos que tenían valores realmente altos en comparación con el resto, y me concentré en reducir la disputa por ellos.

Sé que esto es probablemente bastante fácil para los spinlocks, ya que solo es un contador por giro, pero al leer las páginas de manual de pthread relacionadas y los archivos de encabezado que no he encontrado nada similar, ¿hay algo disponible para pthread mutex?

Realmente me gustaría evitar tener que hacer algo intrépido como tomarse el tiempo antes y después de cada bloqueo.

PS: ¿Cuál es el plural de mutex? mutexes, muteces, mutexi, muti ??? Los Mutexes nunca me sonaron bien.


Encontré site mientras exploraba para el mismo caso de uso. Aún no lo he usado. Sonaba bien ya que no afectaría el tiempo de ejecución tanto como en valgrind.




No mencionaste tu sistema operativo. Si es Linux, he usado LTT bastante para este tipo de perfiles. Puede ser útil en dos modos:

  1. perfilado de rendimiento - por ejemplo, perfile su sistema para N segundos de uso estándar y luego analice los datos

  2. creación de perfiles de excepción: p. ej., ejecútelo todo el día en el modo "registrador de vuelo" (registre los últimos N segundos de actividad) y, en condiciones excepcionales, desencadene una parada en el registrador de vuelo. Ven a la mañana siguiente y analiza los datos.

He estado usando y viendo ''mutexes'' como el plural de mutex durante años sin quejarme. ;>


El valgrind herramienta drd permite especificar un límite en el tiempo que debe drd un bloqueo antes de informar un error.

Este site menciona drd y también menciona su propia herramienta llamada mutrace que se parece al tipo de herramienta que está buscando. Te dice:

  • cuantas veces un mutex fue bloqueado
  • ¿Cuántas veces ha cambiado el hilo mutex propietario?
  • cuántas veces se contendió un mutex (ya bloqueado cuando se realizó una solicitud de bloqueo)
  • varias estadísticas sobre la duración de un mutex fue bloqueado para

p.ej

mutrace: 10 most contended mutexes: Mutex # Locked Changed Cont. tot.Time[ms] avg.Time[ms] max.Time[ms] Type 35 368268 407 275 120,822 0,000 0,894 normal 5 234645 100 21 86,855 0,000 0,494 normal 26 177324 47 4 98,610 0,001 0,150 normal 19 55758 53 2 23,931 0,000 0,092 normal 53 106 73 1 0,769 0,007 0,160 normal 25 15156 70 1 6,633 0,000 0,019 normal 4 973 10 1 4,376 0,004 0,174 normal 75 68 62 0 0,038 0,001 0,004 normal 9 1663 52 0 1,068 0,001 0,412 normal 3 136553 41 0 61,408 0,000 0,281 normal ... ... ... ... ... ... ... ... mutrace: Total runtime 9678,142 ms.