Эталонные следы памяти с Intel Pin приложений обработки пакетов

Я изучаю, как использовать Intel Pin, и у меня есть пара вопросов, касающихся процесса инструментария для конкретного варианта использования. Я хотел бы создать трассировку памяти для простого приложения обработки пакетов. Для этой цели я разработал необходимый пинтоин, и у меня следующие вопросы.

  • Предполагая, что я всегда использую одну и ту же трассировку сетевых пакетов в качестве входных данных для моего приложения обработки пакетов, и, скажем, я использую это же приложение на двух разных машинах. Как будут различаться следы памяти? Судя по всему Pin закрепляет пользовательское пространство и не зависит от архитектуры, поэтому я не ожидаю увидеть больших качественных различий в двух эталонных трассах выходной памяти. Это предположение верно?

  • Как изменится трассировка памяти, если я поэкспериментирую со скоростью, с которой я внедряю сетевые пакеты в мое приложение для обработки пакетов? Или это вообще изменится, и если да, то как я могу определить, как отличаются выходные трассы?

Спасибо

1 ответ

Решение

Я предполагаю, что вы делаете что-то, связанное с отслеживанием потока данных / потока кода сетевого пакета, возможно, тесно связанное с порчей данных?

Предполагая, что я всегда использую одну и ту же трассировку сетевых пакетов в качестве входных данных для моего приложения обработки пакетов, и, скажем, я использую это же приложение на двух разных машинах. Как будут различаться следы памяти?

Есть несколько факторов, которые могут сделать трассировку памяти совершенно другой, решающим моментом являются "две разные машины":

  • Точная копия той же ОС: трассировки практически одинаковы (поскольку стек, куча и менеджер виртуальной памяти будут работать одинаково), за исключением того, что адреса будут меняться (ASLR).

  • Та же ОС (но не обязательно та же версия общих библиотек системы): вероятно, такая же, как и выше, если нет перекомпиляции целевого приложения. Возможно небольшая разница из-за менеджера кучи, который может вести себя по-другому.

  • Разные ОС (где требуется перекомпиляция отслеживаемого приложения): совершенно разные трассировки.

Судя по всему Pin закрепляет пользовательское пространство и не зависит от архитектуры, поэтому я не ожидаю увидеть больших качественных различий в двух эталонных трассах выходной памяти. Это предположение верно?

Pintools необходимо перекомпилировать для разных арок, но сам pintool не должен изменять способ трассировки целевого приложения (тот же pintool + то же os + то же приложение = почти одинаковая трассировка).

Как изменится трассировка памяти, если я поэкспериментирую со скоростью, с которой я внедряю сетевые пакеты в мое приложение для обработки пакетов?

Это зависит от системы, а также зависит от ваших точек вставки. Если вы начнете отслеживать в recv() или же recvfrom() могут быть некоторые перегрузки или пропущенные пакеты (UDP), если, например, скорость слишком важна. Зависит от протокола, вашего окна приема и т. Д. Здесь действительно много факторов.

Или это вообще изменится, и если да, то как я могу определить, как отличаются выходные трассы?

Я бы, вероятно, проверил поток кода, а не поток данных для этого случая (мне кажется, проще). Если в точности один и тот же пакет, но разные скорости, если ветви кода не одинаковы (возможно, на уровне базового блока (BBL)), это сразу говорит о том, что один и тот же пакет обрабатывается по-разному.

Другие вопросы по тегам