LinuxでCPUの一つが常時使用率100%になる問題

一部のハードウェアにおいて、kworkerが一つのスレッドをほぼ専有してしまうことがLinuxでは結構前から度々起きているようです。症状も様々で、有線LANを使うと発生すると言うもの、動画編集をすると発生すると言うもの、何もしなくても発生すると言うものなど様々なものがあるようです。 対症療法的でしかないのですが、一応解決策はあるのでメモしておきます。

grep . -r /sys/firmware/acpi/interrupts/

この中でenabledであり値が異様に高いものがあると思います。 それをrootで、

echo disable > /sys/firmware/acpi/interrupts/(先ほど見つけた値が異様に高いファイル) 

とするとCPU利用率が低下します。

自動化

ただこれを毎回起動するたびにやるのは面倒なので自動化します。

#!/usr/bin/zsh
echo disable > /sys/firmware/acpi/interrupts/(先ほど見つけた値が異様に高いファイル) 

などのような内容のシェルスクリプトを書き、chmodで実行可能にして/usr/local/binなどのパスが通っているディレクトリに配置します。

systemdの場合

[Unit]
Description = disable /sys/firmware/acpi/intterupts/gpe13

[Service]
#書いて配置したスクリプトに合わせてパスを変える
ExecStart = /usr/local/bin/disableGPE13
Type = simple
[Install]
#多分multi-user.targetで無くてもいい
WantedBy = multi-user.target

のようなserviceファイルを書いてdisableGPE.serviceなどの名前で/etc/systemd/systemディレクトリに配置したあと

systemctl daemon-reload
systemctl enable disableGPE

とroot権限でコマンドを打てば次回起動時から自動で実行してくれます。

upstartの場合

/etc/rc.localに

#gpe13は例
echo disable > /sys/firmware/acpi/interrupts/gpe13

などとexit 0の前に追記するだけで次回起動時から自動で実行してくれます。

高専カンファ行ってきました

高専カンファという高専生などによる勉強会に行ってきました。僕は今までこの手のイベントに参加したことが無かったのですが、香川から比較的近い明石で開催されるということもあり参加させていただきました。 LTが予想以上に面白く5分間という時間がとても短く感じられました。 同じロボコニストの方とも知り合え、互いの活動についての情報交換もでき、良い影響を与えられました。 近いうちに発表者として高専カンファに参加できるよう技術を高めていきたいです。

Arch Linuxをインストールした

今まではLinux Mintを使っていたのですが、pacmanが使いたくなってArch Linuxに変えました。 Windows10,Ubuntu,Arch Linuxのマルチブートにしましたが、予想よりは簡単でした。 ddでUSBにisoを焼く際に間違えてHDDに焼いてしまい構築していたWindows環境とUbuntu環境をぶち壊すとかありましたがインストールは思ったよりは苦労しませんでした。 今まで使ってきたLinux Mintと違い、かなり自分でやらなくてはいけない部分が増えましたが結構楽しいです。 dmdやdubもpacmanで取ってこれますし、かなり楽で嬉しいです。