Может ли постоянный неинвариантный ts c изменять частоту в разных состояниях процессора? - PullRequest
2 голосов
/ 21 июня 2020

Я использовал для тестирования Linux системных вызовов с помощью rdts c, чтобы получить разницу счетчиков до и после системного вызова. Я интерпретировал результат как таймер настенных часов, поскольку TS C увеличивается с постоянной скоростью и не останавливается при переходе в состояние остановки.

Концепция неизменного TS C описывается как

Инвариант TS C будет работать с постоянной скоростью во всех ACPI P-, C -. и T-состояния.

Может ли константа неинвариантная ts c изменять частоту при изменении состояния с C0 (рабочее) на C1 (остановлено)?

Мое текущее мнение таково, что он не может изменять частоту только между состояниями производительности (P). Поэтому применение rdts c для получения таймера настенных часов для системных вызовов ненадежно при использовании неинвариантного ts c.

Я не нашел инвариантный флаг ts c в моем /proc/cpuinfo, только constant_tsc означает, что не обязательно инвариант .

Источник путаницы - предложение из руководства по системному программированию Intel:

Счетчик отметки времени в новые процессоры могут поддерживать расширение, называемое инвариантным TS C.

Таким образом, некоторые микросхемы (включая мой) имеют постоянный, но не инвариантный ts c.

1 Ответ

4 голосов
/ 01 августа 2020

Начиная с Nehalem и Saltwell, все процессоры Intel поддерживают инвариантный TS C, что означает, что TS C увеличивается с постоянной скоростью в P-, C - и T-состояниях (но не обязательно в S-состояниях).

Начиная с Pentium 4 Family 0F Model 03, все процессоры Intel поддерживают постоянный TS C, что означает, что TS C увеличивается с постоянной скоростью по P- и T -состояния. TS C продолжает увеличиваться в состоянии HLT (называемом Auto Halt или C1 / Auto Halt). TS C не увеличивается ни в каком другом состоянии сна. В эту категорию процессоров входит Bonnell.

Старые процессоры не поддерживают постоянный TS C. TS C продолжает увеличиваться в состоянии HLT, но не в более глубоких состояниях сна. На некоторых из этих процессоров TS C не работает.

Значение TS C может быть повторно инициализировано (до некоторого значения, зависящего от B IOS) при выходе из S-состояния.

Вот резюме. «Y» означает, что TS C продолжает увеличиваться с той же скоростью в указанном типе состояний. «N» означает, что TS C либо продолжает увеличиваться с другой скоростью, либо перестает увеличиваться. На некоторых процессорах TS C увеличивается в состоянии S3 и ниже (это называется всегда включенным TS C). "N / A" означает, что TS C не поддерживается.

                                  |   T   |   P   |C = HLT|C Other|S <= S3|S Other|
---------------------------------------------------
Nehalem+                          |   Y   |   Y   |   Y   |   Y   |   N   |   N   |
Silvermont Merrifield+Moorefield, |   Y   |   Y   |   Y   |   Y   |   Y   |   N   |
Saltwell Penwell+Cloverview
Other Saltwell+                   |   Y   |   Y   |   Y   |   Y   |   N   |   N   |
KNL+                              |   Y   |   Y   |   Y   |   Y   |   N   |   N   |
P4 90nm+                          |   Y   |   Y   |   Y   |   N   |   N   |   N   |
Enhanced Pentium M+               |   Y   |   Y   |   Y   |   N   |   N   |   N   |
Bonnell                           |   Y   |   Y   |   Y   |   N   |   N   |   N   |
Quark X1000                       |   Y   |   N   |   Y   |   N   |   N   |   N   |
KNC                               |   Y   |   N   |   Y   |   N   |   N   |   N   |
P5+                               |   Y   |   N   |   Y   |   N   |   N   |   N   |
Before P5                         |  N/A  |  N/A  |  N/A  |  N/A  |  N/A  |  N/A  |
Other Quark                       |  N/A  |  N/A  |  N/A  |  N/A  |  N/A  |  N/A  |
...