Как охарактеризовать рабочую нагрузку, получив разбивку по типам команд? - PullRequest
0 голосов
/ 05 октября 2019

Я хочу получить процент инструкций чтения-записи памяти в тестовой программе, желательно динамически. Помимо подсчета инструкций в дампе gdb asm, который в любом случае является статическим, есть ли более простой способ его получить? Valgrind обеспечивает общее использование кучи. Perf имеет некоторые приятные функции, но не поддерживает WSL. Pin имеет возможность подсчета команд, но я не уверен, поддерживает ли он WSL.

Ответы [ 2 ]

1 голос
/ 05 октября 2019

инструменты valgrind делают намного больше, чем просто обеспечивают общее использование кучи.

См. Руководство пользователя valgrind http://www.valgrind.org/docs/manual/manual.html

В частности, посмотрите разделы, описывающие инструменты valgrind callgrind и cachegrind.

http://www.valgrind.org/docs/manual/cg-manual.html

http://www.valgrind.org/docs/manual/cl-manual.html

1 голос
/ 05 октября 2019

(Обновление: ПИН, по сообщениям, не работает в WSL. Но для него не требуется счетчик перфораций, поэтому он по-прежнему полезен в виртуальных машинах и т. Д.)


Вы пытались PIN-код или SDE, который построен поверх PIN-кода и выполняет то, что вы хотите? https://software.intel.com/en-us/articles/intel-software-development-emulator
sde64 -mix -- ./my-program сообщит вам, работает ли PIN-код, и может решить вашу проблему самостоятельно. Комбинация инструкций SDE осуществляется мнемоническим IIRC, возможно, не по назначению памяти по сравнению с src, но, по крайней мере, вы будете знать, что ПИН будет работать, прежде чем вы в любой момент впишетесь в написание собственного инструмента ПИН.

ПИНоснован на динамическом инструментарии времени выполнения, а не на счетчиках производительности. Вероятно, он даже не относится к SIGILL (не то, чтобы у WSL были проблемы с этим);он должен эмулировать lzcnt на процессорах, где он декодируется как rep bsr, и все в таком духе.

Так что я сомневаюсь, что PIN нуждается в большой поддержке ядра, помимо возможностей JIT (что требуется для Java и веб-браузеров JS, и это просто mmap(PROT_EXEC)). Он может использовать ptrace, но если GDB работает под WSL, то, надеюсь, PIN будет.

См. Также Инструменты для подсчета количества различных типов инструкций в сборке x86 для создания таблицы динамического набора команд .

Related: Как определить количество машинных инструкций x86, выполняемых в программе на C? не зависит от WSL, но упоминает sde64 -mix.

...