Как профилировать мьютекс pthread в linux?

Я хотел бы знать, как профилировать мьютекс pthread, чтобы увидеть, есть ли в моем коде какие-либо конфликтные точки блокировки.(кто любит спорный код, верно? :) Я знаю, как сделать более общее профилирование кода, как я упоминаю здесь. Но я хотел бы знать, есть ли какие-либо инструменты или параметры, позволяющие профилировать блокировку мьютекса, которые предоставили бы метрики/статистику о конфликтах с блокировкой мьютекса, чтобы увидеть, есть ли у меня какие-либо проблемные области.

Вот некоторая предыстория и контекст:

Недавно я работал над встраиваемым проектом C++ с использованием процессора Cavium Octeon. Octeon SDK реализует синхронизацию в стиле мьютекса с использованием спин-блокировок. Просматривая документацию Octeon, я наткнулся на способ профилирования спин-блокировок, чтобы иметь возможность увидеть, сколько раз каждая спин-блокировка должна была вращаться в ожидании, пока блокировка станет доступной. Чтобы использовать это, мне пришлось выполнить условную компиляцию, а затем она увеличивала счетчик каждый раз, когда вращалась спин-блокировка, после чего я мог запрашивать значение ожидания счетчика. Итак, что я сделал, так это инкапсулировал спин-блокировку и добавил возможность сбрасывать значение ожидания счетчика спин-блокировки для всех спин-блокировок, используемых в системе. Фактическое значение не имело большого значения, но были некоторые из них, которые имели действительно высокие значения по сравнению с остальными, и я сосредоточился на уменьшении разногласий для них.

Я знаю, что это, вероятно, довольно просто для спин-блокировок, поскольку это всего лишь счетчик на спин, но, прочитав соответствующие справочные страницы и заголовочные файлы pthread, я не нашел ничего похожего. Есть ли что-нибудь доступное для мьютекса pthread?

Я действительно хотел бы избежать каких-то хакерских действий, таких как измерение времени до и после каждой блокировки.

PS: Какое множественное число у слова мьютекс? мьютексы, мутексы, мутексы, мути??? Мьютексы никогда не звучали правильно для меня.

19
задан Community 23 May 2017 в 11:59
поделиться