Как измерить конкуренцию за блокировку? - PullRequest
6 голосов
/ 26 декабря 2009

Я читаю 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 не может измерить удержание блокировки и время ожидания для конкретной блокировки. А drd от valgrind слишком сильно замедляет работу приложений, что делает результат менее точным, а также отнимает слишком много времени. mutrace кажется хорошим, но, как следует из названия, я боюсь, что он может отслеживать только исключения мьютекса.

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

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

Ответы [ 2 ]

4 голосов
/ 27 декабря 2009

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

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

2 голосов
/ 26 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...