はじめに
htop を眺めていたらこんな名前のスレッドが並んでいた。
irq/173-vc4 hdmi hpd connected
irq/174-vc4 hdmi hpd disconnected
irq/175-vc4 hdmi cec rx
irq/176-vc4 hdmi cec tx
HDMIは挿していないのに connected も disconnected もいるので、少し気になって調べた。
調べた範囲では、HDMIドライバが作る割り込み処理用のカーネルスレッドで、特に異常なものではなさそう。
以下はそのメモ
なお番号は環境によって違う。
名前の読み方
| 部分 | 意味 |
|---|---|
irq/173 |
IRQ番号173の割り込みを処理するカーネルスレッド |
vc4 |
Raspberry Piのディスプレイ周りを担当するLinuxのDRMドライバ |
hpd |
Hot Plug Detect。HDMIの抜き挿しの検知 |
cec |
HDMI経由でテレビなどを操作する仕組み。rxが受信、txが送信 |
なぜHDMIを挿していなくてもいるのか
カーネルのソースを見ると、vc4のHDMIドライバは初期化のときに devm_request_threaded_irq() で割り込みを登録している。このとき渡す名前の文字列が、そのままスレッド名(irq/番号-名前)になる。
以下はLinux mainlineのコードをさらに簡略化したもの。
Raspberry Pi OSのカーネルは独自のツリーなので細部は違うかもしれない。
/* drivers/gpu/drm/vc4/vc4_hdmi.c より */
ret = devm_request_threaded_irq(&pdev->dev, hpd, NULL,
vc4_hdmi_hpd_irq_thread, IRQF_ONESHOT,
"vc4 hdmi hpd connected", vc4_hdmi);
つまりスレッドは HDMIが挿さったとき ではなく ドライバが割り込みの待ち受けを登録したとき に作られる。
接続用と切断用で割り込みが別々に登録されるので、connected と disconnected が両方並ぶ。
接続と切断を繰り返しているわけではなく それぞれ待機しているだけ という理解でよさそう。
なお、この登録はコード上 external_irq_controller が有効なSoC(BCM2711=Pi 4系、BCM2712=Pi 5)の分岐の中にある。
Pi 3以前では、見え方が違うかもしれない(手元では未確認)。
放置でよいのか
シンプルに手元で瞬間的に見た限りではCPU使用率は0.0%だった。
そもそも割り込みが来るまで待っているだけなので、通常は負荷にならないはずなので放置でよいだろう。
ヘッドレス運用でも普通に出る表示だと思う。
消したい場合はKMSドライバの設定を触ることになりそうだが、画面出力まわりにも影響するので
プロセス一覧をすっきりさせる目的ならやらなくていいと思う。
確認方法
grep -Ei 'vc4|hpd|cec' /proc/interrupts
割り込み名や回数が見られる。
経過時間とCPU時間を並べたいなら次のコマンドが使える。
ps -eo pid,etime,time,args | grep '[i]rq/'