Остановить все обращения к памяти приложения - PullRequest
0 голосов
/ 04 января 2019

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

Является ли возможным добавление операций NOP в двоичном коде приложения непосредственно перед каждым LOAD / STORE?

1 Ответ

0 голосов
/ 09 января 2019

Лучше всего запустить приложение под симулятором x86, таким как MARSSx86 или Sniper .Используя эти симуляторы, вы можете плавно изменять моделируемую задержку памяти или любые другие параметры системы 1 и видеть, как изменяется производительность вашего приложения.Это общий подход в академических кругах (часто вместо модели x86 будет смоделирована общая машина, что дает вам доступ к большему количеству реализаций симулятора).

Основной недостаток использования симулятора заключается в том, что даже хорошие симуляторы не являютсяполностью точны, и насколько они точны, зависит от кода.Определенные типы отклонений от фактической производительности не особенно проблематичны при ответе на вопрос «как производительность изменяется с задержкой», но симулятор, который не моделирует путь доступа к памяти, может дать ответ, который далек от реальности.

Если вы действительно не можете использовать симуляцию, вы можете использовать любой двоичный инструмент перезаписи, такой как PIN-код, для определения местоположения доступа к памяти.nop будет плохим выбором, потому что он выполняется очень быстро, потому что вы не можете добавить зависимость между результатом загрузки памяти и инструкцией nop.Эта последняя проблема означает, что она добавляет только дополнительную «работу» в месте каждой загрузки, но работа не зависит от самой нагрузки, поэтому не имитирует увеличение задержки памяти.

Лучшим подходом было быследуйте за каждой нагрузкой с помощью операции с большой задержкой, которая использует результат нагрузки в качестве входа и выхода (но не изменяет его).Может быть, что-то вроде imul reg, reg, 1, если reg получил результат загрузки (но это добавляет только 3 цикла, так что вы могли бы искать более длинные инструкции по задержке, если вы хотите добавить большую задержку).


1 По крайней мере, в пределах набора вещей, смоделированного симулятором.

...