Возможно ли запланировать задание для выполнения точно машинных инструкций n
, прежде чем управление будет возвращено пользователю?Позволяет выполнить задание для фиксированного количества инструкций?
Мотивацией для этого вопроса является отладка многопоточных программ, где это может быть полезно для надежного воспроизведения определенных ошибок или неопределенного поведения.
Меня особенно интересует случай x86_64-linux
, работающий на процессоре Intel, но также интересны решения для других архитектур или операционных систем.
Документация для ядра perf
пакета говорит
счетчики производительности специальные регистры аппаратных средств, доступных на большинстве современных процессоров. Эти регистры подсчитывают количество определенных типов событий hw: в качестве инструкций, выполненных cachemisses, или неверно предсказанных ветвей - без замедления ядра или приложений. Эти регистры могут также триггерные прерывания при прохождении порогового числа событий.
так что аппаратное обеспечение может поддерживать это в принципе, но я не уверен, что это каким-либо образом раскрывается пользователю.
Конечно, можно просто использовать ptrace
для однократного запуска программы n
раз, но это сделало бы все, кроме самых простых программ, невероятно медленными.
Я подвергаю сомнению уместность простой инструкции подсчета на конвейерном суперскаляра вне порядка центрального процессора с кэшами многоуровневыми, модель памяти непоследовательный-conistency и переменной частотой процессора. – EOF
Шип или трудность заключается в том, что большинство процессоров имеют средства для прерывания по времени (обычно, когда таймер истекает), а не для подсчета команд. Вам нужно будет проверить свою платформу, чтобы узнать, какие средства существуют для подсчета команд. Затем проверьте, поддерживает ли ваша ОС API-интерфейс или обработчик прерываний (ISR вызывается, когда счетчик команд переходит к нулю). –