измерение скорости системного вызова - PullRequest
4 голосов
/ 24 сентября 2010

Я пытаюсь оптимизировать наш системный вызов gettimeofday () в Redhat Linux. По их документации это можно ускорить, выполнив вызов на земле пользователя с использованием виртуального динамического общего объекта (VDSO). Мне было интересно, как я могу измерить скорость звонка в первую очередь? Я хотел бы внести изменения, а затем сравнить их с моими предыдущими результатами

Ответы [ 3 ]

6 голосов
/ 24 сентября 2010

псевдокод:

  1. вызовите gettimeofday() и сохраните результат в a
  2. звоните gettimeofday() миллион раз
  3. вызовите gettimeofday() и сохраните результат в b
  4. Рассчитать (b-a)/1,000,000

Обоснование: два ограничивающих вызова gettimeofday() не должны сильно влиять на цикл. Может быть странно вызывать функцию, на которую вы хотите рассчитать время, но это нормально.

2 голосов
/ 24 сентября 2010

Может быть

strace -T
1 голос
/ 24 сентября 2010

Если у вас на платформе Intel, IAPerf.H имеет несколько макросов, которые упрощают синхронизацию с высоким разрешением.

   PERFINITMHZ(1200) // Set the clockspeed of your processor
   PERFSTART
   gettimeofday();
   PERFSTOP
   PERFREPORT

Он использует Регистр отметок времени , чтобы получить время, чтобы избежать затрат на вызов sys и получить точное время. Возможно, вы все равно захотите вызвать gettimeofday миллион раз и разделить результат, если результаты недостаточно начислены.

...