Linuxの/proc/interruptsとは?割り込み情報の確認方法と仕組みを初心者向けに徹底解説
生徒
「Linuxの勉強をしていると、割り込み(ワリコミ)という言葉をよく聞きます。これって何のことですか?」
先生
「割り込みは、キーボードを叩いたりマウスを動かしたりしたときに、CPU(シーピーユー)へ今やっている作業を止めて、入力を優先して処理して!と伝える合図のことですよ。」
生徒
「なるほど!その合図が今どれくらい発生しているかを確認する方法はあるんですか?」
先生
「ありますよ。Linuxでは /proc/interrupts というファイルを見ることで、どの部品がどれくらい割り込みを行ったかをリアルタイムで確認できるんです。」
Linuxを初めて学ぶ人や、 OS・プロセス・メモリ管理・仮想マシン・コンテナの仕組みを図解で理解したい人におすすめの定番書籍です。
試して理解 Linuxのしくみを見る※ Amazonアソシエイト広告リンク
1. /proc/interruptsとは?
Linux(リナックス)において、/proc/interrupts は、システム内で発生している割り込み(ワリコミ)の回数や情報を管理している仮想的なファイルです。
読み方は、割り込み(ワリコミ)といいます。英語では Interrupts(インタラプト)と呼ばれます。このファイルはハードディスクに保存されているわけではなく、カーネルというLinuxの心臓部がメモリ上に作成している特別なデータです。そのため、ファイルの中身を見るたびに、その瞬間の最新の状態が表示されるのが特徴です。
コンピュータの部品であるキーボード、マウス、ネットワークカードなどは、何かデータが発生したときに「CPU(シーピーユー)、今すぐこれを見て!」と信号を送ります。これが割り込みです。/proc/interrupts を確認することで、どのCPUコアがどのデバイスからの信号を処理しているのかを詳しく調査することができます。
2. 割り込み(IRQ)の基本的な仕組み
割り込みは、英語で Interrupt Request(インタラプト・リクエスト)といい、略して IRQ(アイアールキュー) と呼ばれることもあります。読み方は、IRQ(アイアールキュー)です。これは、コンピュータが効率よく動くために不可欠な仕組みです。
例えば、あなたが本を読んでいる(CPUがプログラムを実行している)ときに、玄関のチャイムが鳴った(割り込みが発生した)としましょう。あなたはいったん本を置いて、玄関へ向かいます(割り込み処理)。用件が終われば、また元の本を読み始めます(元の処理に戻る)。
もしこの仕組みがないと、CPUは常に「キーボードは押されたかな?」「マウスは動いたかな?」と各部品を見回り続けなければならず、非常に効率が悪くなります。これをポーリング(読み方はポーリング)と呼びますが、現代のLinuxシステムでは割り込み方式を採用することで、無駄な電力消費を抑え、高速なレスポンスを実現しています。
実際に cat コマンドを使って、その中身をのぞいてみましょう。
cat /proc/interrupts
CPU0 CPU1
0: 10 0 IO-APIC 2-edge timer
1: 9 0 IO-APIC 1-edge i8042
8: 0 1 IO-APIC 8-edge rtc0
12: 15 0 IO-APIC 12-edge i8042
3. /proc/interruptsの各項目の見方
ファイルの内容を表示すると、表のような形式でデータが出てきます。それぞれの列には重要な意味があります。
- 左端の数値(0, 1, 8...):これは割り込み番号(IRQ番号)です。
- CPU0, CPU1...:各CPU(シーピーユー)コアがその割り込みを何回処理したかの累計回数です。
- IO-APIC / PCI-MSI:割り込みコントローラ(読み方はワリコミコントローラ)の種類です。ハードウェアとCPUの間を仲介する役目の名前です。
- edge / level:信号の検知方法です。電圧の変化の瞬間に反応するか、電圧の状態で反応するかを示します。
- 一番右側の名前:その割り込みを使用しているデバイス名(タイマー、キーボード、ディスクなど)です。
例えば、i8042 という名前は、昔ながらのPS/2ポート(キーボードやマウス)を制御するチップの名前です。最近のPCでも互換性のためにこの名前で表示されることがよくあります。
4. リアルタイムで変化を確認するwatchコマンド
cat コマンドでは、実行したその一瞬の回数しかわかりません。キーボードを連打したときに、数値がぐんぐん増えていく様子を見たいときは、watch コマンド(読み方はウォッチコマンド)を組み合わせて使うのがおすすめです。
このコマンドを使うと、指定した秒数おきに自動で内容を更新して表示してくれます。初心者が割り込みの動きを実感するのに最適な方法です。
watch -n 1 cat /proc/interrupts
(1秒おきに画面が更新され、数値が動く様子が表示されます。終了はCtrl+Cです)
この状態でマウスを激しく動かしたり、キーボードを叩いたりすると、特定の行の数値がリアルタイムで増加するのがわかります。これはシステムがあなたの操作を「割り込み」として正しく認識し、処理している証拠です。ストレージ(読み方はストレージ、保存装置のこと)へのアクセスが発生した際にも数値は変化します。
5. ハードウェア割り込みとソフトウェア割り込みの違い
Linuxには、物理的な部品から発生するハードウェア割り込み(読み方はハードウェアワリコミ)のほかに、ソフトウェア割り込み(読み方はソフトウェアワリコミ)というものも存在します。
ハードウェア割り込みは非常に緊急性が高いものです。例えば、ネットワークからデータが届いた瞬間、OS(オーエス)は最優先でメモリにデータをコピーしなければなりません。しかし、その後の「データの解析」などの複雑な処理まで最優先でやっていると、他の作業が止まってしまいます。
そこで、緊急の処理だけを済ませ、残りの急ぎではない処理は「後でやるリスト」に入れます。これがソフトウェア割り込み(SoftIRQ)の役割です。この2段階構成により、Linuxは非常に高い安定性とパフォーマンスを両立しています。
ソフトウェア割り込みの状況を知りたいときは、別のファイルである /proc/softirqs を確認します。こちらも /proc/interrupts と似た形式で情報が表示されます。
cat /proc/softirqs
CPU0 CPU1
HI: 0 0
TIMER: 125430 118922
NET_TX: 5 2
NET_RX: 8432 7901
BLOCK: 1203 1150
6. 特定の割り込みだけを絞り込んで確認する方法
サーバーなどの高機能な環境では、CPUの数も多く、割り込みの種類も膨大になります。画面いっぱいに文字が表示されて、目的のデバイスが見つからないこともあるでしょう。そんなときは、grep コマンド(読み方はグレップコマンド)を使って、特定のキーワードを含む行だけを抜き出すのが一般的です。
例えば、キーボードに関連する割り込みだけを見たい場合は、次のように入力します。
grep keyboard /proc/interrupts
(該当する行があれば表示されます。なければ何も表示されません)
もしディスク(ストレージ)へのアクセスに関する割り込みを見たい場合は、sd や virtio といった名前で検索すると見つかることが多いです。環境によってデバイス名が異なるのも、Linuxの面白いところですね。
7. /procディレクトリの歴史と役割の雑学
ここで少し雑学を紹介します。そもそも /proc というディレクトリは何のためにあるのでしょうか?
この /proc は、プロセス(Process)の略から名付けられました。もともとは実行中のプログラム(プロセス)の情報を管理するために作られた場所でしたが、時代とともに進化し、今ではCPU、メモリ、割り込み、ネットワークの状態など、システム全体の健康状態をのぞき見るための窓口のような役割を果たしています。
Linuxの設計思想には「すべてはファイルである」という有名な言葉があります。ハードウェアの状態も、ネットワークの設定も、まるでテキストファイルを読むかのように確認できる。このシンプルさが、プログラミングやインフラエンジニアにとってLinuxが愛される理由の一つなのです。/proc/interrupts も、その思想を体現した重要なファイルの一つと言えるでしょう。
8. トラブルシューティングでの活用例
実際の現場では、/proc/interrupts はトラブルの原因究明に使われます。例えば、「特定のCPUコアだけが異常に負荷が高い」という場合、このファイルを確認すると、特定のデバイスから大量の割り込みがそのCPUに集中していることがあります。
これを「割り込みの偏り」と呼びます。マルチコアCPU(複数の脳を持つCPU)を搭載したコンピュータでは、本来はバランスよく仕事を分担すべきですが、設定によっては一人(一コア)だけが猛烈に働かされている状態になるのです。このような場合、エンジニアは smp_affinity という設定を変更して、割り込みを別のCPUコアに逃がすといった高度なチューニングを行うこともあります。
一般のユーザーがここまで操作することは稀ですが、システムが重いと感じたときに「どこかの部品が叫んでいないか?」を確認するツールとして知っておくと、脱・初心者への一歩となります。
最後に、システム全体の割り込み合計数を確認する別のファイル /proc/stat も紹介しておきます。ここにはシステムの起動時からの統計情報が凝縮されています。
cat /proc/stat | grep intr
intr 1254890 10 9 0 0 0 0 0 1 0 0 0 15 0 0 0 0 0 0 0 0
この intr という行の最初の大きな数字が、システム全体で発生した全割り込みの総数です。コンピュータがいかに目まぐるしく外部の信号に反応しているかがよくわかりますね。
LPICレベル1の合格を目指している人や、 Linuxコマンド・シェル・ネットワーク・セキュリティの試験対策を効率よく進めたい人におすすめの定番問題集です。
Linux教科書 LPICレベル1 スピードマスター問題集を見る※ Amazonアソシエイト広告リンク
まとめ
今回の記事では、Linuxシステムの内部動作を理解する上で非常に重要な/proc/interrupts(プロック・インタラプト)について詳しく解説してきました。リナックスの運用やトラブルシューティングにおいて、この仮想ファイルが果たす役割は非常に大きく、システムの健康状態を把握するための「窓口」としての機能を持っています。
Linuxの割り込み管理と/proc/interruptsの重要キーワード
リナックスシステムを使いこなすために、まずは以下の重要なキーワードを整理しておきましょう。これらはSEOの観点からも、エンジニアの基礎知識としても欠かせない要素です。
| キーワード | 読み方 | 意味・役割 |
|---|---|---|
| IRQ | アイアールキュー | 割り込み要求番号。デバイスを識別するIDのようなもの。 |
| CPU Affinity | シーピーユー・アフィニティ | 特定のCPUコアに割り込み処理を紐付ける設定。 |
| SoftIRQ | ソフト・アイアールキュー | 緊急性の低い処理を後回しにするソフトウェア割り込み。 |
| IO-APIC | アイオー・エーピック | 高度な割り込みコントローラ。マルチコアでの割り込みを制御。 |
エンジニアが知っておくべき実用的な確認手順
実際の現場で、サーバーの負荷が高い原因がネットワークカード(NIC)の割り込み集中にあると疑われる場合、以下のような一連のコマンドを駆使して調査を行います。まずは、どのIRQがどのCPUコアに割り当てられているかを確認し、次にその数値の変化を追います。
たとえば、ネットワーク関連(eth0など)の割り込みに絞って、その推移を監視する場合は、以下のようにパイプラインを活用したコマンドが有効です。
# ネットワークデバイスに関連する割り込みのみを1秒ごとに監視する
watch -n 1 "grep eth0 /proc/interrupts"
このように、/proc/interrupts は単なる情報の羅列ではなく、パフォーマンスチューニング(性能最適化)の出発点となる情報源です。特に、データベースサーバーや高トラフィックなウェブサーバーでは、特定のCPUコアに負荷が集中する「割り込みの偏り」を解消することで、システム全体のレスポンスを劇的に改善できる場合があります。
割り込み情報の活用シーンとメリット
リナックスの初心者から中級者へステップアップするためには、以下の3つのシーンで /proc/interrupts を思い浮かべられるようになると良いでしょう。
- デバイス認識の確認: 新しく接続したハードウェアが正しくカーネルに認識され、動作しているかをIRQの発生回数から判断できます。
- ボトルネックの特定: 特定のCPUだけが100パーセントに近い使用率になっている場合、割り込みが集中していないかをチェックできます。
- カーネルの理解: ハードウェアとソフトウェアがどのように連携しているか、OSの基礎理論を実機で学ぶ教材になります。
リナックスというOSは、非常に透明性が高く、システムが今何をしているのかをユーザーが詳細に知ることができる設計になっています。/proc ディレクトリ以下にある様々なファイルを探索することは、リナックスマスターへの近道です。今回の割り込みに関する知識を基盤として、さらに深いシステム管理の世界に挑戦してみましょう。
参考:割り込み分布を整理する簡単なスクリプト例
最後に、プログラミング的な視点から、特定の割り込み回数が一定数を超えているかチェックするような簡単なシェルスクリプトのイメージを紹介します。
#!/bin/bash
# 割り込み回数が特定のしきい値を超えているか簡易チェックする例
THRESHOLD=100000
INT_DATA=$(grep "timer" /proc/interrupts | awk '{print $2}')
if [ "$INT_DATA" -gt "$THRESHOLD" ]; then
echo "警告:タイマー割り込みが非常に多く発生しています。"
else
echo "システムの割り込み回数は正常範囲内です。"
fi
生徒
「先生、/proc/interrupts をじっくり見てみたら、数字がどんどん増えていくのが面白くて、ずっと眺めてしまいました。まるでコンピュータが生きているみたいですね!」
先生
「そうですね。目には見えませんが、コンピュータの中では1秒間に何千、何万回という『割り込み』が発生して、私たちの操作に応答してくれているんです。その躍動感を感じられるのがリナックスの醍醐味ですよ。」
生徒
「さっき watch コマンドで確認したとき、キーボードを叩くたびに i8042 の数字が増えて感動しました!でも、もしこの数字が異常に増え続けたら、どうなるんですか?」
先生
「良い質問ですね。もし特定のデバイスから異常な数の割り込みが発生し続けると、CPUがその処理にかかりきりになってしまい、他のプログラムが動けなくなります。これを『割り込みの嵐』と呼ぶこともあります。そうなると、画面がカクついたり、マウスの反応が悪くなったりするんです。」
生徒
「なるほど、トラブルの原因を突き止めるのにも役立つんですね。あと、/proc/softirqs というのも教えてもらいましたが、ハードウェアとソフトウェアで役割を分けているのはなぜですか?」
先生
「それは、最も大事な仕事を最優先で終わらせるためです。例えば、宅配便が届いたとき、印鑑を押すのはすぐ終わりますよね?でも、届いた荷物を開けて整理するのは後でもいいはずです。印鑑を押すのが『ハードウェア割り込み』で、荷物の整理が『ソフトウェア割り込み』だと考えると分かりやすいですよ。」
生徒
「その例え、すごく分かりやすいです!まずは印鑑を押して、配達員さん(デバイス)を待たせないようにするんですね。リナックスの仕組みって、現実世界の仕事のやり方にも似ていて面白いです。」
先生
「その通りです。効率化を極めた結果、このような仕組みになったんです。他にも /proc/meminfo でメモリを見たり、/proc/cpuinfo でCPUの詳細を見たりできるので、ぜひ色々なファイルを覗いてみてください。リナックスの深い知識が、きっとあなたのエンジニアとしての武器になりますよ。」
生徒
「はい!さっそく他のファイルも cat コマンドで見てみます。今日はありがとうございました!」