2009-12-26 3 views
5

Я читаю http://lse.sourceforge.net/locking/dcache/dcache_lock.html, в котором измеряется время спинлок для каждой функции:Как измерить блокировку?

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 

Я хотел бы знать, где эти статистические данные из. Я попробовал oprofile, но кажется, что oprofile не может измерять блокировку и время ожидания для конкретной блокировки. И drdd от Valgrind замедляет приложения слишком много, что сделает результат менее точным и также потребляет слишком много времени. mutrace кажется хорошим, но, как видно из названия, я боюсь, что он может отслеживать исключения исключений для мьютексов.

Итак, есть ли какой-либо другой инструмент или как использовать инструменты, упомянутые выше, для получения статистики конкуренции за блокировку?

Спасибо за ваш ответ.

ответ

3

Наконец, я нахожу инструмент измерения производительности, используемый в статье, который требует исправления ядра.

Страница введения находится на http://oss.sgi.com/projects/lockmeter/, а последняя версия ядра соответствует версии ядра 2.6.16, которую вы можете скачать here.

2

Один из способов рассказать - это просто запустить его, приостановить его и принять random stackshot всех тем. Затем сделайте это снова, несколько раз. Тогда доля выборок стека, которые заканчиваются в коде блокировки, является процентом времени, которое вы после, грубо. Он также расскажет вам, в каких местах выполняется блокировка. Если вы следите за точностью, возьмите больше образцов. Это работает на любом языке или в операционной системе.

Смежные вопросы