2015-03-26 4 views
0

Моя программа находится на C++, и у меня есть один сервер, который слушает несколько клиентов. Клиенты отправляют небольшие пакеты на сервер. Я запускаю свой код на Ubuntu.Поиск загрузки процессора и циклов процессора

Я хочу измерить использование ЦП и, возможно, общее количество циклов ЦП с обеих сторон, в идеале с разбивкой по циклам/использованию, затраченным на сетевое взаимодействие (от NIC до пользовательского пространства и наоборот), пространство ядра , пользовательское пространство, контекстные переключатели и т. д.

Я сделал поиск, но не мог понять, нужно ли это делать внутри моего кода на C++ или использовать внешний профайлер или, возможно, каким-либо другим способом.

+0

Посмотрите SystemTap. https://sourceware.org/systemtap/ – kaylum

+0

Пожалуйста, отредактируйте свой вопрос, чтобы его мотивировать. Почему вы спрашиваете? Почему общих методов профилирования и бенчмаркинга недостаточно? Что именно вы пробовали? –

+0

@BasileStarynkevitch Я думаю, что мотивировал это достаточно в моем вопросе (второй абзац). Если по общему профилированию вы имеете в виду информацию, извлекаемую из/proc, то она не дает подробного разбиения затрат на сетевое взаимодействие/.... – narengi

ответ

1

Ваш лучший друг/помощник в этом случае - это файловая система /proc в Linux. В /proc вы найдете использования процессора, памяти, потребление энергии и т.д. Посмотрите на эту ссылку

http://www.linuxhowtos.org/System/procstat.htm

Даже вы можете проверить каждый процесс использования центрального процессора, глядя на файлы /proc/PROCESS_ID/stat.

+0

Кроме того, процесс может запрашивать свой собственный статус, используя'/proc/self/stat' –

+0

@BasileStarynkevitch Спасибо вам за советы. Однако, насколько мне известно,/proc считается профилированием по горизонтали и не дает подробной информации о циклах процессора, а также о том, как он распределяется между сетевым/пользовательским пространством/etc, правильно? – narengi

+0

Возможно, вы можете использовать 'oprofile'; но, пожалуйста, объясните, почему вы спрашиваете и т. д. –

0

Посмотрите инструкцию RDTSCP и некоторые другие способы измерения производительности metrics. Системные симуляторы, такие как SniperSim, Gem5 и т. Д., Также могут дать общее количество циклов вашей программы работы (однако они могут быть не очень точными), есть некоторые условия, которые необходимо выполнить (частоты ядра одинаковы и т. Д.)

0

Как я уже говорил, вам, вероятно, стоит подумать об использовании oprofile. Я не очень хорошо знаком с ним (и может быть сложным в использовании и требует общесистемной конфигурации)