Итак, мой ноутбук был "заморозить крах" случайным образом (Система полностью не реагирует, мышь замерзла, часы не идут вперед, никакие команды клавиатуры не имеют никакого эффекта, и единственный способ выйти из него является жесткая перезагрузка с помощью физической кнопки питания), от любого места до нескольких минут до нескольких часов использования моего компьютера.
Естественно, я исследовал проблему и попытался найти решение. Просмотрев журнал ядра, я увидел, что последним зарегистрированным событием перед замораживанием является несколько "Hardware Errors":
kernel: mce: [Hardware Error]: Machine check events logged
Поэтому я поискал это и попытался найти решение. И я нашел, я нашел этот пост. В котором в основном говорится, что мне нужно добавить несколько параметров загрузки. И это действительно решило проблему, с тех пор у меня больше не было ни ошибок оборудования, ни случайных зависаний. Вот параметры загрузки:
noapic pci=assign-busses apicmaintimer idle=poll reboot=cold,hard
Но проблема в том, что теперь мой ноутбук работает на холостом ходу при гораздо более высокой температуре при использовании этих параметров загрузки. Около 70 градусов Цельсия, вместо 35-40. Теперь, конечно, я проверил System Monitor, чтобы узнать, есть ли что-то, отнимающее время у процессора, но ничего нет. Он использует от 0 до 3% загрузки процессора на всех 4 потоках, ничего необычного.
И я знаю, что параметры загрузки вызывают эту проблему, потому что я пробовал удалять их, и после перезагрузки вентиляторы вращаются не так громко, и он работает на холостом ходу при нормальной температуре. Но аппаратные ошибки вернулись, как и случайные зависания.
Я совсем новичок в Linux, поэтому я буквально не имею понятия, что делают эти параметры загрузки. Может ли кто-нибудь опытный сказать мне, что они делают, и почему они заставляют мой процессор простаивать так сильно?
EDIT #1
Итак, благодаря помощи matigo и Doug, мне сказали, что параметр idle=poll
отключает систему простоя для процессора, что, очевидно, заставляет процессор работать горячее и создавать больше тепла.
При удалении этого параметра загрузки аппаратные ошибки вернулись.
Итак, мои зависания и аппаратные ошибки, похоже, как-то связаны с тем, как процессор переключается между состояниями простоя.
Мой процессор - Intel Core i7-7500U
Вот результат выполнения команды grep . /sys/devices/system/cpu/cpu0/cpuidle/state*/name
:
/sys/devices/system/cpu/cpu0/cpuidle/state0/name:POLL
/sys/devices/system/cpu/cpu0/cpuidle/state1/name:C1
/sys/devices/system/cpu/cpu0/cpuidle/state2/name:C1E
/sys/devices/system/cpu/cpu0/cpuidle/state3/name:C3
/sys/devices/system/cpu/cpu0/cpuidle/state4/name:C6
/sys/devices/system/cpu/cpu0/cpuidle/state5/name:C7s
/sys/devices/system/cpu/cpu0/cpuidle/state6/name:C8
/sys/devices/system/cpu/cpu0/cpuidle/state7/name:C9
/sys/devices/system/cpu/cpu0/cpuidle/state8/name:C10
Итак, в основном мне нужна помощь в следующем: чтобы избавиться от этих аппаратных ошибок и сбоев без полного отключения системы простоя процессора, если это возможно.
Параметр загрузки idle = poll
в основном отключает систему в режиме ожидания, переводя ее в состояние бездействия в виде циклов бездействия. Итак, да, вы ожидаете намного больше ненужного тепла, потому что процессоры никогда не переходят в спящий режим.
Вот пример моего тестового сервера с использованием turbostat:
doug@s19:~$ sudo turbostat --Summary --quiet --show Busy%,Bzy_MHz,IRQ,PkgWatt,PkgTmp,RAMWatt,GFXWatt,CorWatt --interval 15
Busy% Bzy_MHz IRQ PkgTmp PkgWatt CorWatt GFXWatt RAMWatt
0.01 938 558 36 1.34 0.68 0.00 0.89
0.02 800 455 36 1.33 0.67 0.00 0.89 <<< All idle states enabled
60.14 4799 109298 47 29.48 28.82 0.00 0.89 <<< transition sample
99.76 4800 180297 47 47.24 46.59 0.00 0.89 <<< All idle states disabled, except poll.
99.76 4800 180311 49 47.65 46.99 0.00 0.89
99.76 4800 180305 49 47.82 47.17 0.00 0.89
Примечание: драйвер масштабирования частоты процессора intel_pstate «видит» процессоры как занятые, но top не видит:
top - 19:23:43 up 7:14, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 214 total, 1 running, 213 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu5 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu8 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu9 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu10 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu11 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 31936.7 total, 31137.0 free, 312.3 used, 487.5 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 31227.9 avail Mem