私はLinux Mintバージョン19 Taraを実行しています。
私のバッテリー寿命は今本当に良くなく、このkworkerスレッドで私のコンピュータのCPU使用率は常に70%であるため、ファンは常にオンになっています。これは本当に私を悩ませ始めました。起動するとすぐに実行しましたtop
が、プログラム(ターミナルを除く)を開く前に、プロセスはすでにCPUの70%を使用していました。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5 root 20 0 0 0 0 I 66.1 0.0 1:27.86 kworker/0:0-kac
私がそれを実行するとkworkerスレッドがhtop
呼び出されるものと 。kacpi_notify
kacipid
Grubを編集しようとしましたが、acpi=off
システムが下線が点滅している黒い画面で起動し、それがすべてです。始まらない。
カーネルをアップグレードして5.3.0-51-genericを実行しています。これまでに調査したところによると、BIOSをアップデートする必要があるかもしれませんが、コンピュータメーカーはBIOSアップデートを.exe形式でのみ提供しています。 exeをダウンロードしましたが、ここでどこに行くのかわかりません。
誰でも私を助けることができますか?
答え1
他の人が提供した情報は本質的に正確ですが、解決策はそうではありません。トリッキーな部分は不良割り込みを見つけることです。これは、使用しているハードウェアによって変わり、ファームウェア/BIOSなどを更新するときにも変更されることがあります。 Linuxを実行していると仮定すると、次のコマンドを実行して見つけることができます。
grep -Ev "^[ ]*0" /sys/firmware/acpi/interrupts/gpe?? | sort --field-separator=: --key=2 --numeric --reverse | head -1
上記のコードスニペットは、すべての割り込みを見て数字でソートし、最も高い数の割り込みを表示します。私のシステムでは、出力は次のようになります。
/sys/firmware/acpi/interrupts/gpe69: 7802639 STS enabled unmasked
コマンドに渡される値を調整することで、表示される割り込みの数を増やすことができますが、head
関連するCPU使用率を考慮すると、非常にまれな場合を除いて、ほぼ常に(ソート後)最初の行になります。問題の割り込みを識別したと仮定すると、次のように無効にできます。
echo disable > /sys/firmware/acpi/interrupts/gpe69
このプロセスを自動化するには、次のようなスクリプトを作成します。
echo disable > $(grep -Ev '^[ ]*0' /sys/firmware/acpi/interrupts/gpe?? | sort --field-separator=: --key=2 --numeric --reverse | head -1 | awk -F: '{print $1}')
上記のバージョンではrootとして実行する必要があります。これを防ぐには、次のものを使用できます。
sudo sh -c "echo disable > $(grep -Ev '^[ ]*0' /sys/firmware/acpi/interrupts/gpe?? | sort --field-separator=: --key=2 --numeric --reverse | head -1 | awk -F: '{print $1}')"
最も高い値の割り込みがディセーブルの場合、エラーメッセージが表示されます。上記のコードスニペットを複数回実行すると、これが発生する可能性があります。これが発生すると、次のエラーが表示されます。
sh: line 1: echo: write error: Invalid argument
grep
無効な割り込みをフィルタリングするように式を調整するのは簡単です。これをしないでください。これにより、上記のコマンドを実行すると一部の重要な機能が無効になる可能性があります。
最後に、割り込みを無効にする前にこれが問題であることを確認するのが賢明かもしれません。以下のパッドのいずれかを使用して問題を特定できます。毎秒カウンター値を印刷します。これが問題であれば、値が急速に上昇することがわかります。
while true ; do grep -Ev '^[ ]*0' /sys/firmware/acpi/interrupts/gpe?? | sort --field-separator=: --key=2 --numeric --reverse | head -1 ; sleep 1 ; done
私のシステムでは、次のようになります。
/sys/firmware/acpi/interrupts/gpe69: 7921836 STS enabled unmasked
/sys/firmware/acpi/interrupts/gpe69: 7925137 STS enabled unmasked
/sys/firmware/acpi/interrupts/gpe69: 7928459 EN STS enabled unmasked
/sys/firmware/acpi/interrupts/gpe69: 7931766 STS enabled unmasked
/sys/firmware/acpi/interrupts/gpe69: 7935122 STS enabled unmasked
答え2
私もこの問題を研究してきました。 BIOS設定の変更とさまざまな調整を試みました。ついにこのリンクを見つけました(https://forum.manjaro.org/t/kworker-kacpid-cpu-100/131532)そしてしばらく効果がありました。 Ubuntu、Mint、Win10を進み続けると、問題が発生した場合、すべてのOSに切り替え/起動しても一貫性が維持されます。 Ubuntu 20に上記の修正を適用した後、起動したすべてのOSで消えました。
今日はミント19.3で起動し、問題が発生しました。問題はACPI領域の割り込み処理で発生するため、問題を「リセット」するためにACPIイベントをどのようにトリガーできますか?私はコンピュータを「一時停止」モードにし、完了するのを待ってからマウス/キーボードをクリックしてスリープモードを解除し、ACPI処理が変更または再初期化されることを確認することにしました。ビンゴ!目が覚めると、CPU使用率はすぐに5%未満の範囲に戻ります。
これは単にLinuxの問題ではなく、Windozで起動したときにも発生します。これもメーカーだけの問題ではないようです。これはおそらく基本的なPCアーキテクチャ/設計問題です。 ACPI 初期化ルーチンにより CPU スパイクが発生すると疑われます。 ACPI割り込みを処理するためのISRの設定にタイミングの問題がある可能性があるため、割り込みが発生するとINTが処理されないかリセットされず、INTが発生し続けます。この情報が開発者に問題を解決するための新しいアイデアを提供できることを願っています。
いつも働くと言うほど長い間テストしていませんでしたが、試してみる価値があります。
よろしく、ジムC
私の設定:HP Z220、i5-3470、16G DDR3、nVidia Quadro K1200。 Adata 960G SSD + WD 160G ATA HD、USBポートに接続されたAPC UPS、nVidia Quadro K-1200、IBM Model Mキーボード(1989)、PS / 2入力のHP光マウス。最高ではなくゲーム用でもありませんが、古くて信頼できる製品です。 ;-)
答え3
ノイズを発生させる割り込みをすばやく見つけるには、次のようにします。
awk '$4=="unmasked"&&$1>1000{print FILENAME,$0}' /sys/firmware/acpi/interrupts/*
出力は次のとおりです。
/sys/firmware/acpi/interrupts/gpe0F 616214841 STS enabled unmasked
/sys/firmware/acpi/interrupts/gpe2C 616214418 STS enabled unmasked
/sys/firmware/acpi/interrupts/gpe39 616179116 STS enabled unmasked
より良い修正のためにいくつかのCPUを回収できるようにすばやくブロックするには、次の手順を実行します。
for F in $(awk '$4=="unmasked"&&$1>1000{print FILENAME}' /sys/firmware/acpi/interrupts/*)
do sudo tee $F <<<mask; done
エヤディー!負荷平均が急落するのを見てください!今、実際の問題に進みます。最初で最も簡単な方法は、ディストリビューションが提供するマイクロコードがインストールされていることを確認することです。たとえば、Archでは、プロセッサに応じてintel-ucodeまたはamd-ucodeパッケージを使用できます。 Ubuntu/Debian パッケージ名は intel-microcode および amd64-microcode です。 CentOS / RHELシリーズを使用している場合は、microcode_ctlとlinux-firmwareを見つけてください。どのプロセッサブランドがあるかわからない場合は、こちらをgrep vendor_id /proc/cpuinfo
ご覧ください。ディストリビューションに特定の指示がある場合マイクロコードロッド、これもぜひフォローしてください。正しいマイクロコードがロードされないと、正しく処理されないノイズの多いACPI割り込みが発生する可能性があります。ブートローダの設定変更を適用するには、再起動してください。
それでも1つまたは2つの割り込みが発生し、カウンタが上昇し続ける場合は、サポートされていないハードウェアまたは障害のあるハードウェアがある可能性があります。使用している珍しいハードウェアに合ったドライバを探します。マスキング始めにこれらのハードウェアの問題が解決されるまで、これが最善の選択肢かもしれません。
答え4
Jimに感謝します。私の場合、私はこのエラーと解決策を知ることができてうれしいです。
root@HP-6300:/# echo "disable" > /sys/firmware/acpi/interrupts/gpe08
古いが安定したHP i5のもう一つの主力製品です。 Firefoxを段階的に停止しました..!