Вопросы по измерению времени с помощью тактовой частоты ЦП

Я знаю стандартные методы получения дельты времени с помощью счетчиков тактовой частоты ЦП в различных операционных системах. У меня вопрос, как такие операционные системы учитывают изменение частоты процессора в целях энергосбережения. Сначала я думал, что это можно объяснить тем фактом, что ОС использует определенные вызовы для измерения частоты, чтобы получить скорректированную частоту в зависимости от того, какое ядро ​​используется, какая частота сейчас установлена ​​и т. Д. Но потом я понял, что это не так. сделать любую временную дельту неточной, если частота ЦП была понижена и возвращена к исходному значению между двумя запросами часов.

Например, возьмем следующий сценарий:

Запросите циклы ЦП. Операционная система снижает частоту процессора для экономии энергии. Здесь выполняется какой-то другой код. Операционная система повышает частоту процессора для повышения производительности. Запросите циклы ЦП. Вычислите дельту как разность циклов, деленную на частоту.

Это приведет к неточной разнице, поскольку частота ЦП не была постоянной между двумя запросами. Как это обходится операционной системой или программами, которые должны работать с дельтами времени, используя циклы ЦП?


person Flayneorange    schedule 08.12.2013    source источник
comment
Я не уверен, но думаю, что большинство систем с регулируемой скоростью используют генератор с фиксированной частотой, но меняют делитель, чтобы изменить скорость процессора. Для часов предусмотрен отдельный делитель / счетчик.   -  person Hot Licks    schedule 08.12.2013


Ответы (1)


см. неправильные измерения тактового цикла с помощью rdtsc

есть еще способы справиться с этим

  1. установить максимальную частоту процессора

    прочтите ссылку выше, чтобы узнать, как это сделать?

  2. используйте PIT вместо RDTSC

    PIT - это программируемый таймер прерывания (Intel 8253, если я правильно помню), он присутствует на всех материнских платах ПК, начиная с x286 (и, возможно, даже раньше), но разрешение составляет всего ~ 119 кГц, и не все ОС предоставляют вам доступ к Это.

  3. объединить PIT и RDTSC

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

person Spektre    schedule 05.02.2014