2010-03-26 27 views
4

Comment mesurer la latence d'un mutex, d'un sémaphore ou d'un futex? Je veux dire la latence entre deux événements: débloquer mutex précédemment verrouillé et le verrouillage de ce mutex. Il y a deux cas: lorsque tous les threads/processus sont sur le même CPU (combien de temps faut-il pour replanifier le thread) et quand le premier thread est sur le premier CPU et le second sur le second.Mesure de la latence de mutex ou de futex

Thread1: Lock(Mutex) Critical1 Unlock(Mutex)|<------->| 
Thread2:        while{trylock} |Lock(Mutex) Critical2 Unlock(Mutex)| 

Ou encore

Thread1: work..work..very hard..work... sem_post()|<----->| 
Thread2: sem_wait(semaphore)...............................|sem_wait unlocks here work2.. 

Ce temps est très court (~ 1 k cycles), donc je ne peux pas utiliser gettimeofday()

Répondre

3

Vous pouvez utiliser des minuteries haute résolution. clock_gettime with CLOCK_MONOTONIC_HR (Je sais que cela remonte à plus d'un an, mais quelqu'un peut avoir la même question)

+0

ou est-ce que je peux utiliser directement un compteur d'horloge CPU (RDTSC)? – osgx