Прелесть программного обеспечения с открытым исходным кодом в том, что вы всегда можете пойти и проверить:)
cpupower monitor
использует разные мониторы, монитор mperf
определяет этот массив :
static cstate_t mperf_cstates[MPERF_CSTATE_COUNT] = {
{
.name = "C0",
.desc = N_("Processor Core not idle"),
.id = C0,
.range = RANGE_THREAD,
.get_count_percent = mperf_get_count_percent,
},
{
.name = "Cx",
.desc = N_("Processor Core in an idle state"),
.id = Cx,
.range = RANGE_THREAD,
.get_count_percent = mperf_get_count_percent,
},
{
.name = "Freq",
.desc = N_("Average Frequency (including boost) in MHz"),
.id = AVG_FREQ,
.range = RANGE_THREAD,
.get_count = mperf_get_count_freq,
},
};
Вполне логично, что Cx
означает любое C-состояние, отличное от C0
, то есть любое незанятое состояние (Обратите внимание, что эти состояния не являются состояниями ACPI, хотя большее число является состоянием более глубокого сна -для ACPI выключен C6).
Обратите внимание, как вычисляется Cx
:
if (id == Cx)
*percent = 100.0 - *percent;
Cx
является просто дополнением C0
.
Это потому, что IA32_M/APERF
используемый счетчик не считает в любом C-состоянии, но C0
:
C0 TSC Частота тактового счетчика
Увеличивается с фиксированным интервалом (относительно частоты TSC.), когда логический процессор находится в C0.
Аналогичное определение для IA32_APERF
приведено в руководствах .
При тестировании можно учитывать множество факторов, возможно, большечем может быть указан в качестве вторичного ответа.
Как правило, при последующем запуске тестируемого кода в кэшах по крайней мере часть данных будет горячей (то же самое для TLB и любого внутреннего кэширования).
Сходство с прерываниями также необходимо учитывать в зависимости от тестируемой программы.
Однако я бы сказал, что при отключенном турбо-бусте и масштабировании вы почти готовы к тестированию.
Драйвер CPUIdle - это компонент ядра, управляющий зависящая от платформы часть входа и выхода из / в незанятое состояние.
Для процессоров Intel (и AMD?) ядро может использовать драйвер ACPI processor_idle (если включен )) или intel_idle (который использует mwait
).