С программой без функция сна , perf хорошо собирает образцы графа вызовов.
void main()
{
while(true)
{
printf(...);
}
}
Например, более 1000 сэмплов в секунду.
Я собрал отчет о перфекте следующим образом:
sudo perf report -p <process_id> -g
Однако, когда я делаю это сПрограмма с функцией сна, perf
, плохо собирает выборки графа вызовов: только несколько выборок в секунду.
void main()
{
while(true)
{
sleep(1);
printf(...);
}
}
Я хочу собирать выборки графа вызовов, даже если моя программа находится в состоянии ожидания или, как известно.время устройства.В Windows с VSPerf callgraph с состоянием сна также хорошо собирается.
Сбор графика вызовов для состояния сна необходим для нахождения узкого места производительности не только во времени ЦП, но и во времени устройства (например, при доступе к базе данных).
Я полагаю, что может быть опция perf
длясбор сэмплов, даже если моя программа находится в спящем режиме, потому что не только я, но и многие другие программисты могут захотеть ее.
Как я могу получить проф сэмплы, даже если моя программа находится в спящем состоянии?
После публикации этого вопроса мы обнаружили, что perf -c 1
захватывает около 10 выборок в секунду.Без -c 1
, перфорация захватывает 0,3 образца в секунду.10 сэмплов в секунду сейчас намного лучше, но все равно намного меньше, чем 1000 сэмплов в секунду.
Есть ли лучший способ?