Ubuntu【20.04 勉強中6】kworkerがCPU使用率を上げてる?
頻発するフリーズ原因を探してる内に見つけた記事から、ウチも同じ現象になってないか確認してみた。
参考■
https://qiita.com/gooos/items/a97ae795f993c1adadb9
https://namachan10777.hatenablog.com/entry/2016/06/04/151459
$ grep . -r /sys/firmware/acpi/interrupts
(略)
/sys/firmware/acpi/interrupts/gpe_all: 196902
/sys/firmware/acpi/interrupts/gpe19: 0 invalid unmasked
/sys/firmware/acpi/interrupts/gpe1A: 0 invalid unmasked
/sys/firmware/acpi/interrupts/gpe09: 0 disabled unmasked
/sys/firmware/acpi/interrupts/gpe0A: 0 invalid unmasked
/sys/firmware/acpi/interrupts/gpe17: 196898 EN enabled unmasked
(略)
(※レイアウト崩れ失礼します…m(_ _;)m)
PC稼働時間で数値は上がりますが、他と比べると明らかにgpe17が突出してる。
停止には【$ sudo】が使えないので【#(root)】で操作。
$ sudo su
# echo disable > /sys/firmware/acpi/interrupts/gpe17
※root権限(#)は「# exit」で終了します。
再起動すると元に戻ってしまうので、更に自動化設定します。
-----
#!/usr/bin/bash
echo disable > /sys/firmware/acpi/interrupts/gpe17
-----
テキストエディターに上記のシェルスクリプトを書き、chmodで実行可能にします。
シェルスクリプト→参考■https://eng-entrance.com/linux-shellscript-do
chmod →参考■https://eng-entrance.com/linux-command-chmod
私はchmodを使い熟せそうにないので、ファイルのプロパティから「プログラムとして実行可能」にチェックを入れて対処しました。(-_-;)
※ちなみに、拡張子はつけてません…。つける場合は「.sh」のようですね。
※参考記事だと「bash→zsh」になってたけど、シェルスクリプトの作り方見るとbashだったのでbashにしてみた。
(追記)
bashの方が古くから使われ、近年はzshが人気だそうです。ただ、私はシェルスクリプト初心者であり、無難なbashにしてみたということです。
※bashとzshの違い↓
参考■
https://qiita.com/umasoya/items/826d757a7d4353a1e259
http://nihon2.com/bash%E3%80%81zsh%E3%80%81%E3%81%8A%E3%82%88%E3%81%B3%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AElinux%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B
次に、シェルスクリプトファイルを移動します。
$ sudo mv disableGPE17 /usr/local/bin/
移動場所は必ずしもそこでなければ…ということではないらしい。参考記事に倣ってます。ファイル名もわかりやすければ何でもいいはず。
もう一つファイルを作成。
-----
[Unit]
Description = disable /sys/firmware/acpi/intterupts/gpe17
[Service]
#書いて配置したスクリプトに合わせてパスを変える
ExecStart = /usr/local/bin/disableGPE17
Type = simple
[Install]
#多分multi-user.targetで無くてもいい
WantedBy = multi-user.target
-----
上記のテキストを.serviceで保存。パス名は各自変更してください。
保存したファイルを/etc/systemd/system/に入れます。
$ sudo mv disableGPE.service /etc/systemd/system/
後は実行されるようにroot操作で設定します。
# systemctl daemon-reload
# systemctl enable disableGPE
再起動して「$ grep . -r /sys/firmware/acpi/interrupts」で確認し、gpe17がdisabledに変わっていれば成功。
停止・自動化しても「0」になるわけではなかったですが、サスペンドしつつ2~3日再起動してない状態でも数値500以下で抑えられています。