soramono雑記

Ubuntuメインのひよこユーザー。

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を使い熟せそうにないので、ファイルのプロパティから「プログラムとして実行可能」にチェックを入れて対処しました。(-_-;)

f:id:soramono:20200801125853p:plain

※ちなみに、拡張子はつけてません…。つける場合は「.sh」のようですね。
※参考記事だと「bashzsh」になってたけど、シェルスクリプトの作り方見るとbashだったのでbashにしてみた。


(追記)
 bashの方が古くから使われ、近年はzshが人気だそうです。ただ、私はシェルスクリプト初心者であり、無難なbashにしてみたということです。

bashzshの違い↓
参考■
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以下で抑えられています。