Что означает каждый регулятор на моем устройстве?

enter image description here

Что означает каждый регулятор на моем устройстве?

0
задан 2 April 2021 в 08:42

1 ответ

 CPU frequency and voltage scaling code in the Linux(TM) kernel


             L i n u x    C P U F r e q

          C P U F r e q   G o v e r n o r s

       - information for users and developers -


        Dominik Brodowski  <linux@brodo.de>
        some additions and corrections by Nico Golde <nico@ngolde.de>
    Rafael J. Wysocki <rafael.j.wysocki@intel.com>
       Viresh Kumar <viresh.kumar@linaro.org>

Масштабирование тактовой частоты позволяет вам изменять тактовую частоту ЦП на лету. Это хороший способ сэкономить заряд батареи, потому что чем ниже тактовая частота, тем меньше энергии потребляет процессор.

Содержание:

  1. Что такое регулятор CPUFreq?

  2. Регуляторы в ядре Linux 2.1 Производительность 2.2 Powersave 2.3 Пользовательское пространство 2.4 Ondemand 2.5 Консервативный 2.6 Schedutil

  3. Интерфейс регулятора в ядре CPUfreq

  4. Ссылки

  5. Что такое регулятор CPUFreq? ======== ======================

Большинство драйверов cpufreq (кроме intel_pstate и longrun) или даже большинство алгоритмов масштабирования частоты процессора допускают только Частота ЦП должна быть установлена ​​ на предопределенные фиксированные значения. Чтобы предложить динамическое масштабирование частоты , ядро ​​cpufreq должно иметь возможность сообщать этим драйверам "целевую частоту". Таким образом, эти конкретные драйверы будут преобразованы в предложение вызова "-> target / target_index / fast_switch ()" вместо вызова "-> setpolicy ()". Для драйверов set_policy все остается прежним, хотя .

Как решить, какая частота в политике CPUfreq должна использоваться? Это делается с помощью "регуляторов cpufreq".

По сути, это следующий блок-схема:

ЦП можно настроить на независимое переключение | ЦП можно установить только в определенных "пределах" | на определенные частоты

                             "CPUfreq policy"
    consists of frequency limits (policy->{min,max})
         and CPUfreq governor to be used
         /            \
        /              \
           /               the cpufreq governor decides
          /                (dynamically or statically)
         /                 what target_freq to set within
        /                  the limits of policy->{min,max}
       /                        \
      /                  \
Using the ->setpolicy call,      Using the ->target/target_index/fast_switch call,
    the limits and the            the frequency closest
     "policy" is set.             to target_freq is set.
                      It is assured that it
                      is within policy->{min,max}
  1. Регуляторы в ядре Linux ================================

2.1 Производительность

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

2.2 Powersave

Регулятор CPUfreq "powersave" статически устанавливает ЦП на самую низкую частоту в пределах scaling_min_freq и scaling_max_freq.

2.3 Пространство пользователя

Средство управления CPUfreq «пространство пользователя» позволяет пользователю или любой программе пользовательского пространства, работающей с UID «root», устанавливать для процессора определенную частоту , создавая sysfs файл "scaling_setspeed", доступный в каталоге CPU-device .

2.4 Ondemand

Регулятор CPUfreq ondemand устанавливает частоту процессора в зависимости от текущей загрузки системы. Оценка нагрузки запускается планировщиком через обработчик update_util_data-> func; при запуске cpufreq проверяет статистику использования ЦП за последний период, и регулятор соответственно устанавливает ЦП. ЦП должен иметь возможность очень быстро переключать частоту .

Файлы Sysfs:

  • sampling_rate:

    Измеряется в США (10 ^ -6 секунд). Это частота, с которой ядро ​​ проверяет использование ЦП и принимает решения о том, что сделать с частотой . Обычно это значение составляет около "10000" или более. Значение по умолчанию - (cmp. With users-guide.txt): transition_latency

      1. Имейте в виду, что задержка перехода выражается в нс и sampling_rate {{ 1}} находится у нас, поэтому по умолчанию вы получаете то же значение sysfs.Частота дискретизации всегда должна корректироваться с учетом задержки перехода, чтобы установить частоту дискретизации в 750 раз выше, чем задержка перехода в bash (как сказано, 1000 по умолчанию), do:

    $ echo `$ (($ (cat cpuinfo_transition_latency) * 750/1000))> ondemand / sampling_rate

  • sampling_rate_min:

    Частота дискретизации ограничена задержкой перехода HW: transition_latency * 100

    Или по ограничениям ядра:

    • Если установлено CONFIG_NO_HZ_COMMON, ограничение составляет 10 мсек.
    • Если CONFIG_NO_HZ_COMMON не задан или используется параметр загрузки nohz = off , ограничения зависят от параметра CONFIG_HZ: HZ = 1000: min = 20000 мкс (20 мс) HZ = 250: min = 80000us (80ms) HZ = 100: min = 200000us (200ms)

    Отображается максимальное значение ограничений ядра и задержки HW, и используется в качестве минимальной выборки показатель.

  • up_threshold:

    Определяет, какой должна быть средняя загрузка ЦП между выборками 'sampling_rate', чтобы ядро ​​приняло решение о , следует ли ему увеличивать частоту. Например, когда для параметра установлено значение по умолчанию "95", это означает, что между интервалами проверки ЦП должен использоваться в среднем более 95%, чтобы затем {{1} } решаем, что необходимо увеличить частоту процессора.

  • ignore_nice_load:

    Этот параметр принимает значение «0» или «1». Если задано значение «0» ( по умолчанию), все процессы учитываются по значению «Использование процессора» . Если установлено значение «1», процессы, которые выполняются со значением «nice» , не будут учитываться (и, следовательно, будут проигнорированы) при расчете общего использования .Это полезно, если вы выполняете вычисление на своем портативном компьютере с интенсивным использованием ЦП, и вас не волнует, сколько времени потребуется на выполнение, поскольку вы можете "улучшить" его и предотвратить его участие в процесс принятия решения об увеличении частоты процессора.

  • sampling_down_factor:

    Этот параметр управляет скоростью, с которой ядро ​​принимает решение о том, когда уменьшать частоту при работе на максимальной скорости. Если для установлено значение 1 (по умолчанию), решения о переоценке нагрузки принимаются с одним и тем же интервалом независимо от текущей тактовой частоты. Но когда установлено значение больше , чем 1 (например, 100), он действует как множитель для интервала планирования для переоценки нагрузки, когда ЦП работает на максимальной скорости из-за высокой нагрузки. .Это повышает производительность за счет сокращения накладных расходов на оценку нагрузки и помогает ЦП оставаться на максимальной скорости, когда он действительно загружен, вместо того, чтобы переключаться вперед и назад по скорости. Эта настраиваемая функция не влияет на поведение при более низких скоростях / более низких нагрузках на ЦП.

  • powersave_bias:

    Этот параметр принимает значение от 0 до 1000. Он определяет процентное (умноженное на 10) значение целевой частоты, которая будет уменьшена от целевой. Например, если установлено значение 100–10%, когда регулятор ondemand будет нацеливать на 1000 МГц, вместо этого он будет нацеливаться на 1000 МГц - (10% от 1000 МГц) = 900 МГц. По умолчанию установлено значение 0 (отключено).

    Когда загружается драйвер смещения энергосбережения AMD, чувствительный к частоте - drivers / cpufreq / amd_freq_sensitivity.c, этот параметр определяет порог чувствительности частоты рабочей нагрузки, при котором используется более низкая частота выбирается вместо первоначального целевого значения регулятора ondemand. Частотная чувствительность - это аппаратное значение (для процессоров AMD семейства 16h и выше) от 0 до 100%, которое сообщает программному обеспечению, как производительность рабочей нагрузки, выполняемой на ЦП, изменится при изменении частоты . Рабочая нагрузка с чувствительностью 0% (память / привязка к вводу-выводу) не будет работать лучше на более высокой частоте ядра, тогда как рабочая нагрузка с чувствительностью 100% (привязанная к ЦП) будет работать лучше выше частота. Когда драйвер загружен, по умолчанию установлено значение 400 - для ЦП, выполняющих рабочие нагрузки со значением чувствительности ниже 40%, выбирается более низкая частота. Выгрузка драйвера или запись 0 отключат эту функцию.

2.5 Conservative

«Консервативный» регулятор CPUfreq, очень похожий на регулятор «ondemand» , устанавливает частоту процессора в зависимости от текущего использования. Он отличается по поведению тем, что плавно увеличивает и снижает скорость ЦП, а не перескакивает на максимальную скорость в тот момент, когда на ЦП возникает какая-либо нагрузка . Такое поведение больше подходит в среде с питанием от батареи . Регулятор настраивается так же, как "ondemand" регулятор через sysfs, с добавлением:

  • freq_step:

    Здесь описывается, на какой процент шагов следует увеличить частоту процессора и плавно уменьшился на. По умолчанию частота процессора будет увеличиваться на 5% от максимальной частоты процессора. Вы можете изменить это значение на любое значение от 0 до 100, где «0» будет эффективно блокировать ваш процессор на скорости независимо от его нагрузки, а «100» теоретически приведет к {{1 }} он ведет себя идентично регулятору "ondemand".

  • down_threshold:

    То же, что 'up_threshold', найденный для регулятора "ondemand", но для противоположного направления. Например, когда установлено значение по умолчанию «20», это означает, что если загрузка ЦП должна быть ниже 20% между выборками, чтобы снизить частоту.

  • sampling_down_factor:

    Функциональность, аналогичная регулятору ondemand. Но в "консервативном", он контролирует скорость, с которой ядро ​​принимает решение о том, когда уменьшить частоту при работе на любой скорости. Нагрузка для увеличения частоты все еще остается оценил каждую частоту дискретизации.

2.6 Schedutil

Регулятор "schedutil" нацелен на лучшую интеграцию с планировщиком ядра Linux .Оценка нагрузки достигается с помощью механизма отслеживания загрузки отдельных объектов (PELT) планировщика, который также предоставляет информацию о последней загрузке [1]. Этот регулятор в настоящее время выполняет загрузку DVFS только для задач, управляемых CFS. Задачи планировщика RT и DL всегда выполняются с максимальной частотой. В отличие от всех других регуляторов , код находится в каталоге kernel / sched /.

Файлы Sysfs:

  • rate_limit_us:

    Содержит значение в микросекундах. Регулятор ожидает времени rate_limit_us перед повторной оценкой нагрузки после того, как он оценил нагрузку один раз.

Для более подробного сравнения с другими регуляторами обратитесь к [2].

  1. Интерфейс регулятора в ядре CPUfreq =================================== ==========

Новый регулятор должен зарегистрироваться в ядре CPUfreq, используя "cpufreq_register_governor". Структура cpufreq_governor, которую необходимо передать этой функции , должна содержать следующие значения:

губернатор-> имя - уникальное имя для этого регулятора. губернатор-> владелец -. THIS_MODULE для модуля регулятора (при необходимости).

плюс набор перехватчиков для функций, реализующих логику регулятора.

Регулятор CPUfreq может вызвать драйвер процессора процессора, используя одну из этих двух функций:

int cpufreq_driver_target (struct cpufreq_policy * policy, unsigned int target_freq, unsigned отношение int);

int __cpufreq_driver_target (struct cpufreq_policy * policy, unsigned int target_freq, беззнаковое отношение int);

target_freq должен находиться в пределах policy-> min и policy-> max , конечно. В чем разница между этими двумя функциями? Когда ваш регулятор находится в прямом кодовом пути вызова обратных вызовов регулятора, например Governor-> start (), policy-> rwsem все еще сохраняется в ядре cpufreq, {{1 }} и нет необходимости снова блокировать его (фактически, это вызовет тупиковую ситуацию ). Поэтому используйте __cpufreq_driver_target только в этих случаях.Во всех других случаях (например, когда есть "демонизированная" функция, которая просыпается каждую секунду), используйте cpufreq_driver_target, чтобы принять policy-> rwsem перед передачей команды к драйверу cpufreq.

  1. Ссылки =============

[1] Отслеживание загрузки отдельных объектов: https://lwn.net/Articles/531853/ [2] Улучшения в управлении частотой процессора: https://lwn.net/Articles/682391/

источник: https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt

-1
ответ дан 23 April 2021 в 23:27

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

Похожие вопросы: