Reading Time: 1 minutes
システムがきちんと稼働しているかをチェックする方法のひとつに「ポーリング」があります。今回はポーリングの概要や、ポーリングと関わりが深い「割り込み」について解説します。
ポーリングとは
ポーリングとは、「サーバーとクライアント」や「主システムと周辺機器」といった複数の機器を円滑に連携させる方法のひとつです。主に通信などの競合を回避するために、ホスト側が各機器に対して定期的に問い合わせを行い、条件を満たした場合に送受信や各種処理を行います。
ポーリングは転送方式のひとつで、決められた順番に従って「データの送信要求」などの問い合わせを行います。送信要求があれば、クライアントはデータを送信し、ホストは受信するという動作を繰り返します。
複数のシステムが同時に、独立して主システムと通信する状況では、それぞれのタイミングで各システムが勝手に通信を行うと、処理や信号が邪魔をし合って不具合が生じる可能性があります。これを防ぐために、順番に問い合わせを行い、競合を避けるようにするのがポーリングです。
通常は、SNMPやICMPといったプロトコルを利用してネットワーク機器を検出し、監視や制御を行います。こうした技術を用いたネットワーク監視サービスは多種ありますが、ポーリングが使用される例は主に以下のケースです。
- 複数のクライアントと接続されている場合
複数のクライアントが競合することを回避するために、ホストは各クライアントへ順番に「送信するデータがあるか?」を問い合わせます。そのうえで一定の時間内でデータの送信許可を出します。
- クライアントが能動的な送信能力を持っていない場合
クライアントは自らホストへ処理の経過や完了を知らせることが不可能なため、ホスト側が定期的に「仕事が完了したか」を問い合わせる必要があります。この完了を待つ状態がポーリングに該当します。
ポーリングは大きく分けると、「監視のためのポーリング」と「検出のためのポーリング」の2種類に分類できます。例えば、「携帯電話に着信があると音が鳴る」、「テレビのリモコンのボタンを押すとチャンネルが変わる」などの不定期に発生するイベント(非同期なイベント)を処理する際に、ポーリングの仕組みがよく利用されています。
ポーリングは聞き慣れない言葉ではありますが、テレビやスマートフォンといった電子機器などにもよく使われている身近な存在です。これらのネットワーク機器に過剰な負荷を与えないように開発された仕組みがポーリングなのです。
ポーリングにおける注意点
ポーリングはハードウェアやOSに依存しないため手軽に実装できるのが利点ですが、以下のようなデメリットがあることに注意しなければなりません。
ポーリングはホスト側が主導権を握っているため、ポーリングによる処理が行われるまでタイムラグ(順番待ち)が発生する場合があります。また、接続される機器の増加などによりポーリングの回数(問い合わせ回数)が増えると、通信トラフィックが増えてサーバーに負荷がかかり、トラブルの原因になる場合もあります。
また、ポーリングは周期的に通信の有無をチェックするため、機器の状態の変化を知るのが遅れる場合もあります。遅れを回避するために短い周期にすると、それだけサーバーの負担は大きくなります。このようなポーリングの欠点を補うために、組み合わせて利用するのが「割り込み」という手法です。「ポーリング」と「割り込み」を組み合わせることで、サーバーはスムーズに処理を行えるようになります。
割り込みの活用
前述したように、ポーリングのデメリットを解消する手段のひとつが「割り込み」です。「ポーリング」と「割り込み」に共通するのは、「イベント発生時に適切な処理をする」という点です。
割り込みは「イベントが発生した瞬間」に通知を受ける仕組みです。事前に各イベントに対する処理方法を設定しておくことで、その処理を即座に実行することができます。通知を待っている間はCPUにほかの仕事を割り当てられるため、全体の効率がよくなり応答性を上げることができます。ただし、割り込みを利用すると、「優先されるべきイベントが実行されない」(現在作業中の処理が一時停止される)といったケースが生じるおそれがあるので注意が必要です。
ポーリングと比べると、「割り込みのほうが利便性は高い」と思われるかもしれませんが、割り込みにもデメリットがあります。同時に行っている仕事が多ければ多いほど、割り込み発生時の一旦停止がリスクになるのです。一方、ポーリングには一旦停止のリスクがありません。そのため、高い頻度で割り込みが発生する場合は、ポーリングで定期的にチェックしたほうが効率よく運用できるケースもあります。
ポーリングで高い応答性を得るには、短い間隔でポーリングを行わなければいけません。しかし、ポーリング間隔を短くすると処理が増え、そのぶんCPUの負担も大きくなります。一方、割り込みを使った場合は、周辺機器が割り込みを要求するまでCPUはほかの仕事を実行できるため、サーバーの負担は軽くなります。割り込みを利用することで、ほかに実行すべき処理がなければCPUを休ませることができるのです。また、割り込みがあったときだけ実行中の処理を一時中断して対応すればよいため、高い応答性を確保することができます。「割り込んできた仕事が終わると、元の仕事に戻る」という状態をイメージするとよいでしょう。
このように、即応性や優先度に応じて「ポーリング」と「割り込み」を上手に使い分ける必要があります。両者を上手に組み合わせることで、効率よく処理を進めることができるのです。
まとめ:ポーリングと割り込みの使い分け
システムを安定して稼働させるためには、「ポーリング」と「割り込み」を上手に活用して使い分ける必要があります。また。システムやサーバーの負担が大きくなりすぎると、遅延やサーバーダウンなどのトラブルが発生する原因にもなります。ふたつの処理方法をうまく使い分けることが大切です。
さらに、サーバーの負担を減らすために「通信トラフィックの内訳情報を可視化するツール」の活用をおすすめします。通信を可視化できるツールを導入すると、サーバーの負荷をグラフなどでわかりやすく表示できるようになり、より効率よくシステムを稼動させていくことが可能となります。
サーバーダウンなどのトラブルを回避し、システムの状況を可視化して効率よく監視するために、以下のようなツールを検討してみてはいかがでしょうか。
OpManager
サーバー・ネットワークの統合監視ソフト。通知設定が簡単で、グラフやマップ表示で瞬時に状況を把握できます。
製品概要 | 無料版ダウンロード
NetFlow Analyzer
アプリケーション・IPアドレス・ポート・プロトコルなどの情報を収集できるツール。NetFlow対応機器とフローコレクターをあわせて活用することで、遅延の原因となっている問題の通信を特定できます。
製品概要 | 無料版ダウンロード
フィードバックフォーム
当サイトで検証してほしいこと、記事にしてほしい題材などありましたら、以下のフィードバックフォームよりお気軽にお知らせください。