Ubuntu 19 kidle_inject process

У меня есть друг, у которого есть новый ноутбук ASUS. Я пытался использовать Ubuntu 18, который отлично работает на моем ноутбуке ASUS, но на его ноутбуке экран зависал, возможно, из-за не поддерживаемых графических драйверов (я полагаю, но не уверен в этом).

Я читал на форумах ASUS, что установка Ubuntu 19 может улучшить ситуацию. В этом случае. Мы установили его и теперь лучше, кроме одной вещи.

У нас есть 4 процесса kidle_inject, которые используют каждые 50% ЦП, что делает компьютер очень медленным. Как я могу отключить или уменьшить влияние процессов kidle_inject?

Спасибо

0
задан 24 June 2019 в 17:32

1 ответ

Процессы kidle_inj, по одному на процессор, являются одним из способов достижения теплового регулирования и поддержания охлаждения процессора. Как правило, вызывается Thermald, фактический используемый метод является функцией драйвера масштабирования частоты процессора, с возможными оверидами через файл /etc/thermald/thermal-cpu-cdev-order.xml.

Давайте рассмотрим пару примеров. Даже при 100% нагрузке на все процессоры мой тестовый сервер не перегревается, поэтому для этого я установлю низкую точку теплового отключения 55 градусов.

Сначала используйте драйвер масштабирования частоты процессора intel_pstate и регулятор энергосбережения:

doug@s15:~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
doug@s15:~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave

Теперь используйте турбостат для наблюдения за вещами, а также для наблюдения за настройкой максимальной производительности (максимально допустимая частота процессора в процентах). Это начинается без регулирования:

doug@s15:~$ cat /sys/devices/system/cpu/intel_pstate/max_perf_pct
100

.

doug@s15:~$ sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt --interval 5
Busy%   Bzy_MHz PkgTmp  PkgWatt
0.02    1600    26      3.70
0.03    1600    26      3.70
2.21    3737    38      6.87
38.89   3564    48      42.70
94.64   3500    50      58.54 <<< Load being ramped up.
100.00  3500    52      58.49 <<< Processor package temperature going up.
100.00  3500    53      58.78
100.00  3500    56      59.04
100.00  3500    56      59.27
100.00  3123    53      51.18 <<< Notice throttling via clock frequency
100.00  2969    56      47.32
100.00  2693    52      41.90
100.00  2009    53      28.98
100.00  2489    55      37.90
100.00  2431    54      36.82
100.00  2620    54      40.50
100.00  2409    55      36.39
100.00  2511    54      38.47
100.00  2569    57      39.61
100.00  2301    53      34.57
100.00  1682    53      23.64
100.00  2089    54      30.52
100.00  2569    56      39.59
100.00  2301    52      34.55
87.08   1671    53      22.98
48.70   2037    52      24.04
5.58    2318    44      7.50
0.02    1603    40      3.88
0.03    1600    40      3.87
0.02    1600    39      3.85
^C0.04  1600    38      3.86

И во время вышеописанного максимальный процент снижался до тех пор, пока нагрузка не была снята, а температура процессора не упала:

doug@s15:~$ cat /sys/devices/system/cpu/intel_pstate/max_perf_pct
60
doug@s15:~$ cat /sys/devices/system/cpu/intel_pstate/max_perf_pct
60
doug@s15:~$ cat /sys/devices/system/cpu/intel_pstate/max_perf_pct
100

Во-вторых, используйте драйвер масштабирования процессора acpi-cpufreq и ondemand губернатор:

doug@s15:~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
acpi-cpufreq
acpi-cpufreq
acpi-cpufreq
acpi-cpufreq
acpi-cpufreq
acpi-cpufreq
acpi-cpufreq
acpi-cpufreq
doug@s15:~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
ondemand
ondemand
ondemand
ondemand
ondemand
ondemand
ondemand
ondemand

Теперь используйте турбостат, чтобы контролировать вещи, а также наблюдать за потоками kidle_inject. Обратите внимание, что на выходе турбостата есть добавленный столбец% C6, который является самым глубоким состоянием простоя, в которое входит мой процессор (выполняется через «hide» вместо «show», потому что метод «show» не работает).

doug@s15:~$ sudo turbostat --Summary --quiet --hide IRQ,Avg_MHz,SMI,GFXMHz,TSC_MHz,GFXWatt,CorWatt,POLL%,CPU%c1,CPU%c3,CPU%c7,CoreTmp,GFX%rc6,Pkg%pc2,Pkg%pc3,Pkg%pc6,POLL,C1,C1E,C3,C6,C1%,C1E%,C3%,C6% --interval 5
Busy%   Bzy_MHz CPU%c6  PkgTmp  PkgWatt
0.05    1602    99.83   26      3.71
0.04    1600    99.87   28      3.71
0.05    1600    99.83   26      3.71
0.05    1601    99.84   26      3.71
24.67   3591    52.79   45      30.24
93.87   3500    0.00    47      58.30  <<< Load ramped up
100.00  3500    0.00    50      58.42
100.00  3500    0.00    53      58.70
100.00  3500    0.00    55      58.99
100.00  3500    0.00    56      59.23
93.72   3424    6.18    56      54.44  <<< Now some C6 idle time is forced via kidle_inj
81.41   3223    18.32   54      44.49
77.81   3179    21.82   56      42.02
83.82   3348    15.90   57      48.14
78.87   3278    20.78   54      44.52
66.34   3061    33.15   54      35.02
62.65   2898    36.78   54      30.80
61.20   2856    38.20   53      29.63
63.71   3051    35.73   54      33.36
61.67   2938    37.76   54      30.90
61.92   2929    37.53   52      30.95
63.47   3039    35.97   55      33.17
60.87   2862    38.52   56      29.60
62.90   3073    36.56   53      33.40
62.36   2964    37.09   55      31.61
61.16   2866    38.24   53      29.78
63.98   3099    35.43   55      34.28
56.37   2708    43.01   52      25.80
52.01   2616    47.29   53      23.07
58.24   2738    41.15   53      26.86
65.39   3143    34.05   56      35.60
68.01   3209    31.50   56      38.09
58.62   2949    40.79   53      29.83
58.43   2730    40.95   53      26.88
48.87   3158    36.84   53      33.68
14.74   2642    70.22   43      14.77
0.37    1602    99.10   42      4.02
0.29    1601    99.30   40      3.97
0.23    1602    99.43   40      3.94
0.17    1601    99.58   39      3.91
0.17    1686    99.56   38      3.91
0.06    1601    99.79   38      3.85
0.04    1602    99.87   36      3.83
0.04    1600    99.88   36      3.83
0.09    1750    99.75   35      3.85
0.04    1600    99.89   35      3.82
0.04    1600    99.85   36      3.82
0.04    1600    99.88   34      3.81
0.04    1600    99.86   35      3.80
^C0.04  1600    99.87   33      3.80

И во время регулирования задачи kidle_inj вынуждают состояние глубокого простоя, и мощность процессора падает.

doug@s15:~$ ps aux | grep kidle
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      3005 33.2  0.0      0     0 ?        S    00:19   0:32 [kidle_inj/0]
root      3006 33.2  0.0      0     0 ?        S    00:19   0:32 [kidle_inj/1]
root      3007 33.2  0.0      0     0 ?        S    00:19   0:32 [kidle_inj/2]
root      3008 33.2  0.0      0     0 ?        S    00:19   0:32 [kidle_inj/3]
root      3009 33.2  0.0      0     0 ?        S    00:19   0:32 [kidle_inj/4]
root      3010 33.2  0.0      0     0 ?        S    00:19   0:32 [kidle_inj/5]
root      3011 33.2  0.0      0     0 ?        S    00:19   0:32 [kidle_inj/6]
root      3012 33.2  0.0      0     0 ?        S    00:19   0:32 [kidle_inj/7]

doug@s15:~$ ps aux | grep kidle
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      3005 33.5  0.0      0     0 ?        S    00:19   0:35 [kidle_inj/0]
root      3006 33.5  0.0      0     0 ?        S    00:19   0:35 [kidle_inj/1]
root      3007 33.5  0.0      0     0 ?        S    00:19   0:35 [kidle_inj/2]
root      3008 33.5  0.0      0     0 ?        S    00:19   0:35 [kidle_inj/3]
root      3009 33.5  0.0      0     0 ?        S    00:19   0:35 [kidle_inj/4]
root      3010 33.5  0.0      0     0 ?        S    00:19   0:35 [kidle_inj/5]
root      3011 33.5  0.0      0     0 ?        S    00:19   0:35 [kidle_inj/6]
root      3012 33.5  0.0      0     0 ?        S    00:19   0:35 [kidle_inj/7]

doug@s15:~$ ps aux | grep kidle
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      3005 29.1  0.0      0     0 ?        S    00:19   0:44 [kidle_inj/0]
root      3006 29.1  0.0      0     0 ?        S    00:19   0:44 [kidle_inj/1]
root      3007 29.1  0.0      0     0 ?        S    00:19   0:44 [kidle_inj/2]
root      3008 29.1  0.0      0     0 ?        S    00:19   0:44 [kidle_inj/3]
root      3009 29.1  0.0      0     0 ?        S    00:19   0:44 [kidle_inj/4]
root      3010 29.1  0.0      0     0 ?        S    00:19   0:44 [kidle_inj/5]
root      3011 29.1  0.0      0     0 ?        S    00:19   0:44 [kidle_inj/6]
root      3012 29.1  0.0      0     0 ?        S    00:19   0:44 [kidle_inj/7]

doug@s15:~$ ps aux | grep kidle
... throttling over, processes gone ...

Не следует отключать какой-либо метод тепловой защиты, который вы используете, но вы можете почистить вентиляторы и тому подобное, чтобы охлаждать процессор. Кроме того, если у вас есть возможность использовать метод регулирования pstate, оставшаяся производительность обычно выше, чем метод kidle_inj. Например, и для рабочего процесса, используемого для вышеупомянутого, метод pstate превосходит метод intel_powerclamp kidle_inj на 33%.

Теперь, если по какой-либо причине ваш процессор способен использовать драйвер масштабирования частоты процессора intel_pstate, но вы решили этого не делать, тогда советуем использовать драйвер intel_cpufreq (который является просто драйвером intel_pstate в пассивном режиме). режим) и по требованию губернатора. Зачем? Потому что тогда будет использоваться метод регулирования pstate. В моей системе это привело к улучшению производительности примерно на 28% по сравнению с методом kidle_inject при тех же условиях регулирования.

Как перейти с intel_pstate на intel_cpufreq?

doug@s15:~$ cat /sys/devices/system/cpu/intel_pstate/status
active
doug@s15:~$ echo passive | sudo tee /sys/devices/system/cpu/intel_pstate/status
passive

И установить регулятор:

doug@s15:~$ sudo su
root@s15:/home/doug# for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "ondemand" > $file; done
root@s15:/home/doug# exit
exit
doug@s15:~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
intel_cpufreq
doug@s15:~$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
ondemand
ondemand
ondemand
ondemand
ondemand
ondemand
ondemand
ondemand

Почему такая значительная разница в производительности? Потому что метод kidle_inj тратит много времени и энергии на вход и выход из состояния глубокого простоя, тогда как метод pstate - нет.

И для пользователей, которые видят «idle_inject» вместо или в дополнение к «kidle_inj»:

doug@s15:~$ ps aux | grep idle
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        12  0.0  0.0      0     0 ?        S    09:07   0:00 [idle_inject/0]
root        16  0.0  0.0      0     0 ?        S    09:07   0:00 [idle_inject/1]
root        22  0.0  0.0      0     0 ?        S    09:07   0:00 [idle_inject/2]
root        28  0.0  0.0      0     0 ?        S    09:07   0:00 [idle_inject/3]
root        34  0.0  0.0      0     0 ?        S    09:07   0:00 [idle_inject/4]
root        40  0.0  0.0      0     0 ?        S    09:07   0:00 [idle_inject/5]
root        46  0.0  0.0      0     0 ?        S    09:07   0:00 [idle_inject/6]
root        52  0.0  0.0      0     0 ?        S    09:07   0:00 [idle_inject/7]

Это относительно недавно, начиная с ядра 4.19, и параметром конфигурации ядра является «CONFIG_IDLE_INJECT» , который установлен для ядер Ubuntu, но я пока не знаю цели.

3
ответ дан 24 June 2019 в 17:32

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

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