Time Stamp Counter
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
.
Див. також
- High Precision Event Timer
Джерела
- Intel 64 and IA-32 Architectures Software Developer's Manual Volume 2B: Instruction Set Reference, M-Z. с. 460.
- Pitfalls of TSC usage.
- 17.17.1 Invariant TSC. Intel 64 Architecture Software Developer's Manual. Vol. 3B: System Programming Guide, part 2.
- ARMv7 reference manual.
- ARMv8 reference manual.