У меня есть приложение, которое делает небольшое количество вычислительной работы ЦП, но главным образом доступы памяти (выделяющий объекты и перемещающий их, существуют немногие числовой или арифметический код).
Как я могу измерить долю времени, которое является мной тратящий в задержках доступа к памяти (из-за неудачных обращений в кэш), при этом ЦП неактивен?
Я должен отметить, что приложение работает на госте Hyper-V; я не уверен, что это будет представлять любые трудности, но это могло бы.
Вы всегда можете профилировать
свое приложение, чтобы узнать, где оно проводит большую часть времени.
Таким образом вы можете многое узнать о поведении вашего приложения и шаблонах доступа к данным.
Если вы используете Linux, у вас есть широкий набор инструментов для профилирования, например:
РЕДАКТИРОВАТЬ:
Для более точного измерения производительности процессора и количества обращений к памяти вы также можете попробовать AMD CodeAnalyst Performance Analyzer . Здесь приведены инструкции по его использованию с процессорами Intel, хотя я сам не пробовал.
Другой инструмент, который также может оказаться полезным, - это Утилита настройки производительности Intel .
Если у вас нет встроенной задержки в системе, просто запустите приложение на некоторое время на выделенной машине и проверьте счетчики ЦП. Если приложение использует 100% ядра ЦП, к которому оно может получить доступ, оно привязано к ЦП. В противном случае он тратит время на другие вещи, такие как выделение памяти и операции ввода-вывода.