Linux: Почему частота процессора колеблется при использовании регулятора производительности?

Я использую машину Debian 8 amd64 для тестирования производительности. Во время экспериментов я бы хотел, чтобы процессор работал на фиксированной частоте (желательно максимально возможной). Это исключит тактовую частоту процессора как источник изменений в результатах.

После некоторого прочтения кажется, что правильная вещь - это изменить регулятор ЦП на performance, который описан здесь в документации ядра Linux:

"Производительность" регулятора CPUfreq статически устанавливает центральный процессор на максимальную частоту в границах scaling_min_freq и scaling_max_freq.

К сожалению, более подробная информация о scaling_min_freq а также scaling_max_freq не поставляются. Надеюсь, это не должно иметь значения, поскольку используемая частота процессора является максимальным значением интервала.

Итак, я включил этот регулятор с помощью cpufreq-set:

$ cat / sys / devices / system / cpu / cpu * / cpufreq / scaling_governor
спектакль
спектакль
спектакль
спектакль

И для хорошей меры я также отключил режим турбонаддува в BIOS:

$ cat / sys / devices / system / cpu / intel_pstate / no_turbo
1

Исходя из приведенного выше описания регулятора производительности, я бы не ожидал колебаний тактовой частоты процессора. Все же, если я неоднократно бегаю cpufreq-infoЯ вижу колебания тактовой частоты:

$ cpufreq-info | grep 'текущий процессор fr'
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 3,99 ГГц.
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 4,00 ГГц.
$ cpufreq-info | grep 'текущий процессор fr'
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 3,96 ГГц.
$ cpufreq-info | grep 'текущий процессор fr'
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 3,94 ГГц.
$ cpufreq-info | grep 'текущий процессор fr'
  Текущая частота процессора составляет 4,01 ГГц.
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 4,00 ГГц.
  Текущая частота процессора составляет 3,98 ГГц.

Это колебание связано с аппаратным обеспечением, BIOS, ядром или каким-то другим фактором? Есть ли способ установить частоту процессора так, чтобы она вообще не колебалась?

3 ответа

После некоторых экспериментов, я думаю, что смогу ответить на свой вопрос.

Как упоминалось в этой теме, на некоторых аппаратных средствах Intel существует два способа управления частотой процессора:

  • Использование pstate.
  • Использование обычного ACPI.

Когда используется pstate, BIOS имеет некоторое мнение о тактовой частоте, и кажется, что это является источником колебаний.

Вы можете принудительно отключить pstate, добавив intel_pstate=disable к аргументам ядра (редактировать /etc/default/grub и добавить аргумент к GRUB_CMDLINE_LINUX_DEFAULT, Наконец запустить sudo update-grub).

После этого вывод cpufreq-info выглядит очень по-разному, и я также заметил, что стал доступен другой набор контроллеров процессора (например, ondemand теперь доступно).

Самое главное, после установки губернатора performance, тактовая частота теперь фиксирована (в моем случае до 4,00 ГГц).

Вы можете посмотреть в /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver определить, используется ли pstate или ACPI для масштабирования ЦП. Эти файлы могут принимать значения acpi-cpufreq или же intel_pstate,

Для современных процессоров Intel частота контролируется самим процессором, а P-состояния, связанные с программным обеспечением, связаны с уровнями производительности. Идея о том, что частота может быть установлена ​​на одну частоту, является фикцией для процессоров Intel Core. Даже если драйвер масштабирования выбирает одно состояние P, фактическая частота, на которой будет работать процессор, выбирается самим процессором. [1]

[1] https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt

Я читал эту ветку, потому что я слишком старался установить фиксированную частоту для моего процессора, так как вентилятор больше не работает (конечно, такие вещи случаются, когда вы находитесь за границей на потерянном острове для дайвинга!), так что моя точка зрения была больше, чтобы установить самая низкая частота ( 800 МГц) .. я, наконец, преуспел, внеся изменения в scaling_max_freq в /sys/devices/system/cpu/cpu*/cpufreq/ для каждого процессора конфигурации, и теперь все нормально, частота должна переместиться с 800 МГц до....800 МГц. Это работает и решило проблему перегрева, с которой я сталкивался...(частота теперь 799 МГц и не двигается, что позволило процессору оставаться на уровне около 50 ° C!)

PS: я также отключаю турбо режим ( 3,1 ГГц)

Другие вопросы по тегам