Jump to content

Счетчик отметок времени

(Перенаправлено с RDTSC )
Журнал загрузки Linux, показывающий использование TSC в качестве источника тактовой частоты системы.

Счетчик меток времени ( TSC ) — это 64-битный регистр, присутствующий на всех x86, процессорах начиная с Pentium . Он подсчитывает количество циклов процессора с момента его сброса. Инструкция RDTSC возвращает TSC в EDX:EAX. В x86-64 режиме RDTSC также очищает старшие 32 бита RAX и RDX . Его код операции 0F 31. [1] Конкуренты Pentium, такие как Cyrix 6x86, не всегда имели TSC и могут рассмотреть возможность RDTSC незаконное указание. Cyrix включила счетчик отметок времени в свой MII .

Использовать

[ редактировать ]

Счетчик отметок времени когда-то был способом с высоким разрешением и низкими издержками, позволяющим программе получать информацию о синхронизации процессора. С появлением многоядерных / гиперпоточных процессоров, систем с несколькими процессорами и , находящихся в спящем режиме операционных систем , на TSC нельзя полагаться в предоставлении точных результатов — если не уделять должного внимания исправлению возможных недостатков: скорости такта и все ядра (процессоры) имеют одинаковые значения в своих регистрах хранения времени. Нет никаких гарантий, что счетчики временных меток нескольких процессоров на одной материнской плате будут синхронизированы. Следовательно, программа может получить надежные результаты, только ограничившись выполнением на одном конкретном процессоре. Даже в этом случае скорость ЦП может измениться из-за мер по энергосбережению, принятых ОС или BIOS , или система может перейти в режим гибернации, а затем возобновить работу со сбросом TSC. В последних случаях, чтобы оставаться актуальной, программа должна периодически перекалибровывать счетчик.

Использование TSC также снижает мобильность, поскольку другие процессоры могут не иметь аналогичной функции. Последние процессоры Intel включают TSC с постоянной скоростью (идентифицируемый системным файлом kern.timecounter.invariant_tsc во FreeBSD или " constant_tsc" флаг в Linux /proc/cpuinfo). В этих процессорах TSC работает на номинальной частоте процессора, независимо от фактической тактовой частоты процессора из-за режимов турбо или энергосбережения. Следовательно, тики TSC подсчитывают время, а не количество прошедших тактов процессора.

На платформах Windows Microsoft настоятельно не рекомендует использовать TSC для синхронизации с высоким разрешением именно по этим причинам, предоставляя вместо этого API-интерфейсы Windows. QueryPerformanceCounter и QueryPerformanceFrequency (который сам использует RDTSCP, если в системе имеется инвариантный TSC, т.е. частота TSC не меняется в зависимости от текущей частоты ядра). [2] В системах Linux программа может получить аналогичную функцию, прочитав значение CLOCK_MONOTONIC_RAW часы с помощью clock_gettime функция. [3]

Начиная с Pentium Pro , в процессорах Intel практикуется выполнение вне порядка , когда инструкции не обязательно выполняются в том порядке, в котором они появляются в программе. Это может привести к тому, что процессор выполнит RDTSC раньше, чем ожидает простая программа, что приводит к вводящему в заблуждение количеству циклов. [4] Программист может решить эту проблему, вставив инструкцию сериализации, например CPUID , чтобы принудительно завершить каждую предыдущую инструкцию, прежде чем программа сможет продолжить работу. RDTSCP инструкция представляет собой вариант RDTSC который предполагает частичную сериализацию потока команд, но не должен рассматриваться как сериализация.

Реализация в различных процессорах

[ редактировать ]

Семейства процессоров Intel увеличивают счетчик меток времени по-разному: [5]

  • Для процессоров Pentium M (семейство [06H], модели [09H, 0DH]); для процессоров Pentium 4 — процессоры Intel Xeon (семейство [0FH], модели [00H, 01H или 02H]); а для процессоров семейства P6: счетчик меток времени увеличивается с каждым тактом внутреннего процессора. Тактовый цикл внутреннего процессора определяется текущим соотношением частоты ядра и частоты шины. Переход на технологию Intel SpeedStep также может повлиять на тактовую частоту процессора.
  • Для процессоров Pentium 4 , процессоров Intel Xeon (семейство [0FH], модели [03H и выше]); для процессоров Intel Core Solo и Intel Core Duo (семейство [06H], модель [0EH]); для процессоров Intel Xeon серии 5100 и процессоров Intel Core 2 Duo (семейство [06H], модель [0FH]); для процессоров Intel Core 2 и Intel Xeon (семейство [06H], display_model [17H]); для процессоров Intel Atom (семейство [06H], display_model [1CH]): счетчик отметок времени увеличивается с постоянной скоростью. Эта частота может быть установлена ​​максимальным отношением тактовой частоты ядра к тактовой частоте шины процессора или максимальной разрешенной частотой, с которой загружается процессор. Максимальная разрешенная частота может отличаться от максимальной квалифицированной частоты процессора.

Конкретная конфигурация процессора определяет поведение. Постоянное поведение TSC гарантирует, что продолжительность каждого такта часов одинакова, и позволяет использовать TSC в качестве настенного таймера, даже если ядро ​​процессора меняет частоту. Это архитектурное поведение всех более поздних процессоров Intel.

Процессоры AMD вплоть до ядра K8 всегда увеличивали счетчик меток времени каждый такт. [6] Таким образом, функции управления питанием могли изменять количество приращений в секунду, и значения могли рассинхронизироваться между разными ядрами или процессорами в одной системе. Для Windows AMD предоставляет утилиту [7] для периодической синхронизации счетчиков на нескольких ядерных процессорах. Начиная с семейства 10h (Barcelona/Phenom), чипы AMD имеют постоянный TSC, который может управляться либо скоростью HyperTransport , либо самым высоким состоянием P. Бит CPUID ( Fn8000_0007:EDX_8) рекламирует это; Процессоры Intel также сообщают об этом инвариантном TSC.

Использование операционной системы

[ редактировать ]

Операционная система может предоставлять методы, которые как используют, так и не используют RDTSC инструкция по хронометражу, под контролем администратора. Например, в некоторых версиях ядра режим Linux песочницы seccomp отключает RDTSC. [8] Его также можно отключить с помощью PR_SET_TSC аргумент в пользу prctl() системный вызов. [9]

Использование при атаках по побочному каналу кэша.

[ редактировать ]

Счетчик отметок времени можно использовать для точного определения времени выполнения инструкций, что может быть использовано при уязвимостях безопасности Meltdown и Spectre . [10] [11] Однако, если он недоступен, можно использовать другие счетчики или таймеры, как в случае с процессорами ARM , уязвимыми для атак такого типа.

Другие архитектуры

[ редактировать ]

Другие процессоры также имеют регистры, подсчитывающие тактовые циклы ЦП, но с другими именами. Например, в AVR32 он называется регистром счетчика тактовой частоты (PCCNT). SPARC V9 обеспечивает TICK зарегистрироваться. PowerPC обеспечивает 64-битную TBR зарегистрироваться.

ARMv7 [12] и ARMv8-A [13] архитектуры предоставляют общий счетчик, который считает с постоянной частотой. ARMv7 предоставляет регистр счетчика циклов ( CCNT инструкция) для чтения и записи счетчика, но эта инструкция является привилегированной. [14]

См. также

[ редактировать ]
  1. ^ Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 2B: Справочник по набору команд, MZ (PDF) . п. 545.
  2. ^ Игровое время и многоядерные процессоры . стр. 251–252.
  3. ^ «lock_getres, clock_gettime, clock_settime — функции часов и таймера» .
  4. ^ «Использование инструкции RDTSC для мониторинга производительности» (PDF) .
  5. ^ «Том 3А, глава 16». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 .
  6. ^ «Том 3». Руководство программиста по архитектуре AMD64 .
  7. ^ «Двуядерный оптимизатор AMD» .
  8. ^ «Блог cr0: Счетчик временных меток, отключающий странности в ядре Linux» . Май 2009.
  9. ^ prctl(2) Linux программиста Руководство – Системные вызовы
  10. ^ "meltdown.c" .
  11. ^ "спектр.с" .
  12. ^ «Справочное руководство по ARMv7» .
  13. ^ «Справочное руководство по ARMv8» .
  14. ^ «Регистр счетчика циклов (CCNT)» . ARM Ltd. Проверено 5 марта 2021 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7ea69768c5d31830150411bc1e1c358f__1719328140
URL1:https://arc.ask3.ru/arc/aa/7e/8f/7ea69768c5d31830150411bc1e1c358f.html
Заголовок, (Title) документа по адресу, URL1:
Time Stamp Counter - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)