Назад | Перейти на главную страницу

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
performance
performance
performance
performance

И на всякий случай отключил в BIOS режим турбо-ускорения:

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

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

$ cpufreq-info | grep 'current CPU fr'
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 3.99 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
$ cpufreq-info | grep 'current CPU fr'
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 3.96 GHz.
$ cpufreq-info | grep 'current CPU fr'
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 3.94 GHz.
$ cpufreq-info | grep 'current CPU fr'
  current CPU frequency is 4.01 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 4.00 GHz.
  current CPU frequency is 3.98 GHz.

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

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

Как уже упоминалось в этой теме, на определенном оборудовании 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,1Ghz)