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

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
производительность
производительность
производительность
производительность

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

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

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

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

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

решение1

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

Как уже упоминалосьв этой темеНа некоторых аппаратных средствах 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.

решение2

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

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

решение3

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

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

Связанный контент