• ベストアンサー

イベント処理時のCPU負荷について

現在、IPアドレスを監視するプログラムの作成を 検討していまがループで監視すると負荷が大変 大きくなります。 疑問に思ったのですが、例えばUNIXのシステムコール sleep() listen() accept()等はCPUに負荷がかかっていません。 常にあるポートのバッファを監視しているはずですよね。 これらのシステムコールはOSではどういった処理でCPU 負荷の軽減を実現しているのしょうか? 以上、ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

>また、CPUでの割り込み時の処理はどのようになっているのでしょうか? ・動作中のプロセスが一定時間以上連続してCPUを使った場合 ・割り込みがかかった場合 に、CPU待ちをしているプロセスの中で一番優先度の高いプロセスにCPUが割り当てられます。通常は割り込みプロセスが優先度が高いのでそのプロセスが実行されます。 で、答えになってますか?いまいち質問の意図がわからず。

negi-bozu
質問者

お礼

ご回答ありがとうございます。 質問の意図がわかりづらくて申し訳ありません。 割り込みが入ったらそのプロセスを優先して実行させる仕様にCPUがなっているのかなと思いまして。 たとえばハードウェア(NIC)からの割り込み要求待ちにする技法があればご教授ください。それともselect()で実現可能なのでしょうか?

その他の回答 (1)

回答No.1

select(2)またはpoll(2)システムコールを使います。 それぞれ、由来がBSD系とSystemV系ですが、 最近の処理系はどちらも使えると思います。 どちらも、指定されたfd(ファイルディスクリプタ)を監視して、 入力/出力を検知した時に、リターンするようになっています。 (その際、同時に複数のfdを監視するように指定する事ができます。) select/poll待ち中は、そのプロセスは割り込み待ちをしているので、 CPU時間はほとんど消費せず、 その間、OSによって他のプロセスの処理が実行されています。 例えば、ご質問のacceptにはfdを使用すると思いますが、 そのfdの入出力が行われるのをselect/pollを呼び出して待ち、 処理がかえって来たら(つまりacceptの場合は接続要求を受けたら) その接続に対する処理を行うようなコーディングになります。

negi-bozu
質問者

お礼

ご回答ありがとうございます。 バッファを監視しているわけではなく 割り込みを待ちの状態なんですね。 例えば、accept()の場合OSはNICからの割り込みを 待っているということでしょうか? また、CPUでの割り込み時の処理はどのようになっているのでしょうか?

関連するQ&A

  • サーバのCPU負荷の監視。

    いつもお世話になっております。 仕事でヘルプデスクをしています。 つい先日、社内で使用しているWEBサーバに負荷がかかり、お客様に大変ご迷惑をおかけすると言う事件がありました。 本来ならば、サーバ管理者とかそう言う人がいち早くそれに気付くべきなんでしょうが、どうも期待できないって話になり、んじゃこっちで出来ないものか?と言う話になっています。 条件として・・・ ○CPU負荷の監視ができる ○サーバ室と自分の使用できる端末が離れているので、遠隔にて監視できること。 ○監視ログがCSVなどで取得が可能 これを実現するためのソフトってあるんでしょうか(出来ればフリー)?? 実は、私自身は全くそこらへんに関して初心者でして、最近ようやくsarやgrepコマンドを教えてもらった次第です。 vectorなどでも探したのですが、いまいちピンと来ませんでした。 もし、何かご存知の方がいらっしゃいましたら、ご回答頂ければと思います。 よろしくお願いいたします。

  • CPU資源をなるべく消費しないでイベントを待機する

    こんにちは。 VC++2008Exressを使用して、以下のようなプログラムを作成したいと思います。 初心者で、どうやって作成すれば良いのか悩んでおります。 参考になるものなどありましたら、ご教授ください。 Windowsアプリケーション Win32API メッセージループ内でWaitForSingleObjectなどのイベントを待機する関数を使用して イベントを待つようにしたいのですが メッセージループ内でメッセージも待機できイベントも待機できるような方法はないでしょうか? 今のところ、実現はしておりませんが検討しているのは メッセージ待機用のスレッドを作成して、GetMessageで待機して メッセージがきたら、SetEvent関数でメインのメッセージループ内の WaitForSingleObjectを返す。 また、別のメッセージ以外のイベントを監視するスレッドを作成して WaitForSingleObjectで監視してイベントが来たら、さきと同じイベントを SetEvent関数を使用しメインのメッセージループ内のWaitForSingleObjectを返す。 という感じでメッセージとイベントをメッセージループ内で監視するようにするしか 分かりません。 その他、簡単な関数で実現可能なものなどありませんでしょうか? WaitForMultiObjectsとか、MsgWaitForMultiObjectsやら調べてみましたが、いまいち使い方が。。。。 また、スレッドは監視イベントが来るたびに終了させた方がよいのでしょうか? それでは、またスレッド作成を繰り返すので効率悪い気がします。 無限ループで監視させた方が良いのではと思いますが、CPU資源的には・・・。 というようなことで悩んでおります。 どうか、ご教授ください。よろしくお願いします。

  • CPUの負荷について

    Windowsムービーメーカーを使って動画の編集をしていますが1回の編集に要する時間が30分かかりますがその間タスクマネージャーでのCPU使用率が常に100%を維持しています。 多い時は1日に4回続けて編集する事もありますが動画の編集に関わらずCPU使用率が100%を維持する作業を長時間する事はCPUがいつ壊れてもおかしくない状態でしょうか?。 それともCPUはそういう負荷に耐えられるように設計されているのでしょうか?。 本機のシステム、スペックは以下の通りです。 *システム Microsoft Windows XP Home Edition Service Pack2 *機種 NEC VersaPro VJ17M/ED-1 *CPU Intel(R) Celeron(R) M CPU 430 1.73GHz 0.99 GB RAM *メモリ 1024MB(デュアルチャネル非対応) ちなみにムービーメーカーの前にMovicaというソフトを使っていて動作が軽く速くて良かったのですが一部のAVIファイルが上手く編集出来ず仕方なくムービーメーカーを使っています。

  • CPUが高負荷時に高熱になってしまいます

    高負荷時にCPUが高熱になるために質問させて頂きます。 CPU温度・PC冷却化に関することで質問させて頂きます ショップBTOパソコンを購入し1年がたち、時折ファンの音が気になったためにCPU温度をしらべてみた結果です CPU:C2D E8600 3・33GHz CPUクーラー:リーテルクーラー グラフィックボード:GeForce9800GTX+ PCケース:購入時のまま 前面12cmファン×1 背面12cmファン×1 計測ツール HWmonitor 室温25度でアイドル時 core0:50℃ core1:50℃  高負荷時 prime95使用 core0:80℃ core1:80℃  (危険を感じたために断念) ――――――――――――― 室温25度でアイドル時       PCケース側面を空けて計った場合    core0:43℃ core1:42℃ 高負荷の検証は怖かったのでしていません ――――――――――――――― 室温8度でアイドル時 PCケース側面を開けて計った場合 core0:40℃ core1:25℃ 以上のような結果となりました。 自分の調べで考えた可能性・対応としては (1)エアフローの問題 (長いグラフィックボードなので空気の流れが妨げられてる?) ・サイドファン付ケースの購入 (2)吸気及び排気不足(吸気・排気共にファンがひとつずつしかついていないため) ・サイドファン付ケースの購入(ケースの構造がファンを増やせそうにありません) (3)CPUクーラーの機能不足(リーテルクーラーのため) ・CPUクーラーの購入(この場合サイズ/Scythe KABUTO(兜)クーラーの購入を考えています)  (4)CPUグリス?の劣化(買ってから一度もCPU周りのメンテナンスはしていません) ・グリスの交換(シールや銀・胴・シルバーなど色々あって迷っています) リンク当貼れなくて申し訳ないのですが、C2DのCPU温度は70度が危険信号と聞きました。 L4D2などのゲームをする場合でも30分ほどでCPU温度が60度くらいになり画面がかたまりサウンドループ?のような症状がでます、PCにあまり詳しくない私としては不安に思っています。 考えられる原因・対処法があればぜひ御教授していただけたらと思います。 また別件なのですが E8600を入れているはずなのですが。 コンパネのシステムプロパティーを見るとE8400と表示されています。これが誤検知だとしたらどのような障害がでるのでしょうか。 また、どのように直せばよいのでしょうか。

  • CPU確認コマンド

    Unix系のCPU使用率の確認方法で「システムモニタのリソースの監視」等で確認できるCPU使用率をコマンドによって確認するには、どのコマンドを使用したら宜しいでしょうか? またそのコマンドの出力結果の中でどの部分を見たらいいのか教えてください。 宜しくお願いします。

  • Mac OSXのCPU負荷について

    初めて質問します。 使用している環境はiBook G3 800MHz、OSX10.2.8でメモリは640MBです。 最近使用中に各アプリケーションの反応が悪く、Safariや、DreamweaverMX、Classic環境のアプリ(特にOffice系)がよく落ちるようになりました。最初はフラグメンテーションが原因かな?と思っていましたが、そのうちOSX上でシステム終了が(毎回ではないですが)できなくなりました。 いろいろ調べているうちに、CPUモニタを見てみると稼働率が常に100%前後でゲージが真っ青のままでした。プロセスビューアを見てみると全てのアプリを終了してもFinderのCPU使用率が90%前後のままで(時には100%以上)、何をやっても変わりません。一旦、ログアウトしてほかのユーザーでログインした場合はFinderのCPU使用率は通常と思われる1%前後の低い数値でした。 おそらく問題のユーザーでのログイン時にバックグラウンドでなにかが動いてCPUに負荷をかけていると思われますが、調べる方法や対処方法が解りません。 どなたかご存じの方、教えて下さい。 ネットで調べてみましたが自分の調べ方が悪いのか、対処法を調べきることができませんでした。ちなみに、クーリングファンは回っていても回っていなくても状況は変わらずです。 やってみたことは、DiskFirstAidとNortnDiskDoctorを実行してみましたが解決しませんでした。どなたか良いお知恵をよろしくお願いします。

    • ベストアンサー
    • Mac
  • CPU処理負荷UPの原因特定方法

    時々CPU負荷が上がって? TV視聴動画が瞬間停止・マウス停止 といった状況が発生します (頻度はそれほど多くない 止まる一例として動画とか書いてますが 別に動画でなくても同じです) DISKアクセス不可ってことでもなさそうです その時アクセスしてる気配(LED判断)がありません 瞬間で復旧する場合や数秒で復帰するのが大半ですが稀にそのままシステムハングアップします (ブルーバックにはなりません  マウスカーソルだけは動いてることもあります)      たまにビデオドライバエラーのブルーバックになる 最近気になりだしたので頻度が上がってるのかもしれませんが ビデオドライバ関係が絡んでるのかなとも思いますが 今ドライバは何パターン化テストしているところです 同時にこういった状況になる原因を特定できないかと思っているのですが タスクマネージャで常時プロセス監視しておくのは実用上無理 仮にできたとしてもその瞬間動作が止まっているので情報更新もとまる といった状態でどうしたもんかと思っています 何かいい方法あるでしょうか 今はXP使っています

  • 割り込み処理のシミュレート

    現在開発している組み込み系システムのシミュレートをVCで行いたいと考えています。 組み込み系のシステムは簡単に言うと、 普段はメインループでくるくる回っており、1ms毎にタイマ割り込みが発生し、変数の値を書き換え、メインループではその変数の変化によって何か処理を実行するというものです。 このようなシステムをVCでできるだけ同じようにシミュレートするため、マルチスレッドを用いようと考えているのですが、以下の性質を実現することは可能でしょうか? ・メインスレッド実行中はタイマ割り込みスレッドは割り込み可能。 ・タイマ割り込みスレッド実行中はメインスレッドは割り込んでこない。 ・メインスレッドで特定の区間タイマ割り込みスレッドの割り込みを禁止できる。 ・高速シミュレートを行いたいため、割り込みの禁止などはできるだけ低負荷で行いたい。(ミリ秒単位だとNG) ・複数の割り込みスレッドがある場合、各スレッドごとに割り込みレベルを設け、このレベル以下を割り込み禁止など行いたい。 スレッド以外の実現方法などあればそちらもご教授願いたいです。 よろしくお願いします。

  • CPU100%の状態はパソコンに悪影響?対策法は?

    えーっと、ノートパソコンで動画の圧縮をしているのですが、圧縮を開始すると圧縮が終わるまで常にCPU使用率が100%になってしまいます。 動画の圧縮はどんなハイスペックでもCPU100%になるのでそれは良いのですが(圧縮ツール:aviutl)、友達が、CPU使用率100%が長時間続くとパソコンが壊れるみたいな話をしていました。 CPU100%の状態が続くのはパソコンにとってやはり悪影響なのでしょうか? それとも、単純にCPU使用率70%だろうがなんだろうが、長時間重い負荷のかかる作業をさせること自体が悪影響なのでしょうか? それから、もし悪影響ならその影響を軽減する対策法などを知っている方がいましたらぜひとも教えてくださいませ。

  • Tomcat高負荷時の設定について

    現在、JMeterを使用してTomcat上で動作するAPに負荷を掛けた際のパフォーマンスを測定しております。 負荷を掛けずにブラウザで処理を実行した際には1秒程度でレスポンスが返却されてくるのですが、 以下の条件で負荷を掛けるとレスポンス速度が段々と遅く(8秒~500秒程度)なって行ってしまいます。 また、かなりの頻度でConnectionタイムアウトが返却されてしまいます。 [負荷条件] スレッド数:1000 Ramp-Up期間:60秒 ループ回数 :無限ループ ※ スレッド数を500くらいにするとConnectionタイムアウトは発生しないのですが、 処理時間はやはりかなり遅くなってしまいます。 最初はJVMのFullGCの頻発が原因かと思い、GCの状況を確認しましたが、 パフォーマンスに影響を与えそうなFullGCは特に発生していませんでした。 [JVM オプション] "-server -Xmx1024m -Xms1024m -XX:MaxPermSize=128m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseTLAB -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0 -XX:CMSIncrementalDutyCycle=10 -XX:MaxTenuringThreshold=0 -XX:SurvivorRatio=256 -XX:+PrintGCDetails -Xloggc:/usr/local/tomcat/logs/gc.txt" 次にTomcatのserver.xmlでの最大thread数がデフォルトの状態だったので、 maxthreadsの値をとりあえず「2000」まで増やしてみたのですが状況は変わらずでした。 [server.xml] <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8123" maxHttpHeaderSize="8192" minProcessors="5" maxProcessors="1000" maxThreads="2000" minSpareThreads="25" maxSpareThreads="1000" enableLookups="false" acceptCount="100" debug="0" connectionTimeout="60000" useURIValidationHack="false" disableUploadTimeout="false" /> また、topを確認してもロードアベレージが高くなっているのが少し気になりますが(5.0~7.0程度を推移)、 Swap領域等は使用されている訳でもありませんでした。 Tomcatの経験もほとんど無いため何がボトルネックとなっているのかが分からずに困っております。 皆さまの経験から、推奨される設定、どこを調査した方が良いか、または参考となるサイト等が御座いましたらご教授願えないでしょうか。 [環境] CentOS release 4.7  メモリ:4G  CPU  :Intel(R) Xeon(R) CPU 2.00GHz X 2 jdk1.5.0_14 Tomcat 5.5