Я написал tool, Contech, в инструмент LLVM IR для сбора информации о синхронизации (а также других данных). Существует также инструмент, Harmony, который позволяет LLVM IR измерять аналогичную информацию.
Я расскажу о трех компонентах, которые вам потребуются, чтобы написать собственный пропуск LLVM.
Во-первых, в то время как большая часть управления синхронизацией опирается на атомные операции, эти операции выполняются в сборке и часто помещаются в другие библиотеки. Поскольку вы не отслеживаете выполнение каждой инструкции по сборке, вам вместо этого придется отказаться от имен функций, таких как pthread_mutex_lock
или sem_wait
.
Во-вторых, для идентификации операций управления синхронизацией пропуск LLVM должен будет вставить необходимое оборудование для записи важной информации об этой операции синхронизации, такой как ее идентификатор (то есть адрес) и временная метка.
В-третьих, системе потребуется дополнительный код для обработки записей синхронизации, поскольку аппаратура второго компонента находится в критическом разделе. Без этого компонента результаты будут искажены прибором. Инструмент будет по-прежнему оказывать влияние.