Проблема понимания clock_gettime - PullRequest
1 голос
/ 09 мая 2011

У меня проблемы с различными часами, к которым можно получить доступ clock_gettime. Особенно меня интересует:

  • CLOCK_REALTIME
  • CLOCK_PROCESS_CPUTIME_ID
  • CLOCK_THREAD_COUTIME_ID

Я прочитал справочную страницу, но она мне не очень помогла. Я использую clock_gettime для генерации меток времени для моего профилировщика, когда он отправляет собранные данные через сокет. Я заметил следующие различия:

  • CLOCK_REALTIME

События, которые я получаю от своего профилировщика с этими часами, иногда имеют неправильный порядок. Временные метки начинаются с более высокого значения, хотя и не намного выше. Часто последние сообщения (с более высокой отметкой времени) появляются первыми, а затем с более низкой отметкой времени.

  • CLOCK_PROCESS_CPUTIME_ID
  • CLOCK_THREAD_COUTIME_ID

Я не нашел различий на обоих часах, хотя они начинаются с меньшего значения и всегда правильно упорядочены.

Я не могу объяснить это поведение.

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Ваш системный источник синхронизации, вероятно, установлен на TSC вместо HPET.

В целом, в современных многоядерных системах HPET является более новой и более точной и согласованной системой, а TSC - более старой и более производительной системой.

В openSUSE вы можете найтиузнайте, какой у вас текущий источник синхронизации:

cat /sys/devices/system/clocksource/clocksource0/current_clocksource

Чтобы установить источник синхронизации на HPET в openSUSE, выполните

echo 'hpet' > /sys/devices/system/clocksource/clocksource0/current_clocksource

Дополнительная литература:

http://en.wikipedia.org/wiki/HPET

http://en.wikipedia.org/wiki/Time_Stamp_Counter

2 голосов
/ 09 мая 2011
  • CLOCK_REALTIME дает вам доступ к часам реального времени, то есть к тем, которые хранят текущую дату и время.
  • CLOCK_MONOTONIC дает вам доступ к часам, которые никогда не возвращаются во времениВы, вероятно, должны использовать это вместо CLOCK_REALTIME.
  • CLOCK_PROCESS_CPUTIME_ID дает вам доступ к часам, характерным для текущего процесса, давая вам время процессора процесса (время, потраченное процессором,конкретный процесс).
  • CLOCK_THREAD_CPUTIME_ID дает вам доступ к часам, относящимся к текущему потоку, давая вам время ЦП процесса (время, потраченное ЦП, выполняющим этот конкретный поток).
...