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

8

Я использую машину 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, ядром или каким-то другим фактором? Есть ли способ установить частоту процессора так, чтобы она вообще не колебалась?

Эдд Барретт
источник
Какой тип серверного оборудования вы используете? Каковы параметры питания BIOS и производительности процессора этого оборудования?
ewwhite
На самом деле это настольный компьютер с процессором i7. Я загрузил dmesg и cpuinfo здесь: gist.github.com/vext01/73eea539eb041acf784b . Re: настройки биоса, мне нужно было бы зайти в машину и посмотреть. Есть ли какие-то конкретные настройки, которые вы имеете в виду?
Эдд Барретт
Это не "сильное" колебание по сравнению с нормальным изменением состояния ... :)
rogerdpack

Ответы:

9

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

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

Эдд Барретт
источник
Другой прием: используйте «lsmod» для вывода списка модулей, загруженных ядром, внесения в черный список каждого модуля, связанного с масштабированием скорости процессора / p-state / c-states / что угодно, и перезагрузите машину. Поиск "черный список модулей ядра".
Руфо Эль Магуфо
Смотрите также unix.stackexchange.com/questions/121410/...
rogerdpack
4

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

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

SaveTheRbtz
источник
Интересно. Итак, это все еще применяется, когда я перехожу intel_pstate=disableк ядру? Когда я это делаю, я использую "режим наследства"?
Эдд Барретт
1) не уверен. нужно проконсультироваться с Intel Architectures Software Developer's Manual.2) да. PS. Вы также можете поиграть сx86_energy_perf_policy
SaveTheRbtz
Спасибо за ваши комментарии. Поскольку я все еще не уверен, я оставляю вопрос открытым пока. Может быть, кто-то прояснит ситуацию позже.
Эдд Барретт
-1

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

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

steve.29
источник