Я хотел бы знать, как профилировать mutex pthread, чтобы увидеть, есть ли какие-либо блокирующие точки соперничества в моем коде. (кто любит спорный код, верно?:) Я знаю, как сделать более общее профилирование кода, как я упоминаю здесь. Но я хотел бы знать, есть ли какие-либо инструменты или опции, доступные для возможности блокировки мьютекса, которые будут предоставлять метрики/статистические данные об ограничениях блокировки мьютекса, чтобы увидеть, есть ли у меня какие-либо проблемные области.
Вот некоторые фон и контекст:
Недавно я работал над встроенным проектом С++ с использованием процессора Cavium Octeon. Octeon SDK реализует синхронизацию стиля мьютекса с использованием штифтов. Просматривая документацию Octeon, я наткнулся на способ профилировать шпиндельные блоки, чтобы увидеть, сколько раз каждая спин-блокировка должна была вращаться, ожидая, когда замок станет доступным. Чтобы использовать это, я должен был выполнить условную компиляцию, а затем увеличивал счетчик каждый раз, когда прядильная прядилка вращалась, тогда я мог бы запросить значение ожидания spinner. Итак, я сделал это, чтобы инкапсулировать спин-блокировку и добавил возможность сбросить значение ожидания spinner spinner spinner для всех спин-блокировок, используемых в системе. Фактическое значение не означало многого, но было несколько, которые имели действительно высокие значения по сравнению с остальными, и я сосредоточился на сокращении конкуренции за них.
Я знаю, что это, вероятно, довольно просто для spinlocks, так как это просто счетчик за спин, но, просматривая связанные с ним страницы pthread man и файлы заголовков, я не нашел ничего подобного, есть ли что-то доступное для mutex pthread?
Мне бы очень хотелось избежать необходимости делать что-то взломанное, как принимать время до и после каждого замка.
PS: Что такое множественное число мьютексов? mutexes, muteces, mutexi, muti??? Мьютексы никогда не звучали правильно.