Time Stamp Counter (TSC) — 64-розрядний регістр процесора, що присутній у всіх процесорах архітектури x86 починаючи з Pentium. Даний регістр є лічильником, що підраховує кількість циклів процесора з моменту перезапуску. Інструкція RDTSC повертає значення TSC у парі регістрів EDX:EAX. У 64-розрядному режимі RDTSC також очищує верхні 32-розрядні половини регістрів RAX і RDX. Код операції 0F 31.[1]

Процесори-конкуренти Pentium, такі як Cyrix 6x86, не завжди мали TSC, і деякі з них інтерпретують команду RDTSC як невідому інструкцію процесора. У процесорах Cyrix TSC з'явився починаючи з моделі MII.

Використання ред.

TSC деякий час[коли?] був відмінним методом отримати у програмі інформацію про швидкість процесора, що не потребував накладних витрат і мав високу роздільну здатність (такти процесора). Втім, з появою багатоядерних процесорів, а також технологій типу hyper-threading, систем з багатьма процесорами, гібернації у операційних системах, TSC вже не може слугувати надійним джерелом інформації про інтервали часу, якщо тільки не вжито спеціальних заходів виправлення можливих неточностей (швидкість інкрементування лічильника, синхронізація часових регістрів між ядрами або процесорами тощо). У багатопроцесорній системі не гарантується, що лічильники timestamp синхронізовані між усіма процесорами на системній платі; таким чином, програма може отримати надійний результат лише у випадку обмеження одним заданим процесором. Але навіть тоді швидкість процесора може змінюватися через перемикання у режими заощадження енергії, або ж система може увійти у стан гібернації, а пізніше «прокинутися», скидаючи при цьому значення TSC. У таких випадках програма мусить періодично запускати процедуру перекалібрування лічильника.

Процесори Intel починаючи з Nehalem підтримують так званий «invariant TSC»—режим,[2] при якому лічильник завжди інкрементується з фіксованою частотою, незалежно від того, у яких ACPI-режимах перебуває процесор: P, C чи T.[3]

Інші процесорні архітектури ред.

Процесори інших архітектур також містять регістри—лічильники тактів. Наприклад, процесори AVR32 мають регістр, що називається Performance Clock Counter (PCCNT). SPARC V9 надає регістр TICK. Архітектури ARMv7[4] і ARMv8[5] мають узагальнений лічильник, що збільшується з постійною частотою. PowerPC має 64-розрядний регістр TBR.

Див. також ред.

Джерела ред.

  1. Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2B: Instruction Set Reference, M-Z (PDF). с. 460. Архів оригіналу (PDF) за 21 квітня 2019. Процитовано 7 серпня 2019.
  2. Pitfalls of TSC usage. Архів оригіналу за 23 серпня 2019. Процитовано 7 серпня 2019.
  3. 17.17.1 Invariant TSC. Intel 64 Architecture Software Developer's Manual (PDF). Т. Vol. 3B: System Programming Guide, part 2. Архів оригіналу (PDF) за 7 серпня 2019. Процитовано 7 серпня 2019.
  4. ARMv7 reference manual. Архів оригіналу за 7 серпня 2019. Процитовано 7 серпня 2019.
  5. ARMv8 reference manual. Архів оригіналу за 20 червня 2020. Процитовано 7 серпня 2019.