2012-04-02 12 views
0

まず、私の悪い英語を申し訳ありません。マルチプロセッサ用のCPUがアイドル状態で安定しています

私はUbuntuサーバーでmpstatツールを使用して毎秒cpu percent idleの値を表示しています。クライアント側では、毎秒UDPリクエストを送信しようとしましたが、リクエスト数は60秒ごとに増加しています。サーバーは8つのコアを使用していますが、mpstatの結果はアイドル状態の減少です(100%→安定化率80%)。私は合計CPU使用量を(100%からアイドル状態を引いたもの)とみなします。サーバーで実行されるソフトウェアはROOTとして実行されます(私はmpstatで%パラメータを使用できません)

しかし、私は負荷を増やすので、CPU使用率が80%アイドル状態。これは正しい仮定ですか?私はパフォーマンスに関するOSの動作についての参考文献を参照しようとしましたが、100%から80%にジャンプした後、何故ロードする数が何であれ安定します。私はこれがサーバー側のソフトウェアが使用するロック機構、したがってそれ以上の増分を達成することができるためだと仮定します。

は、任意のポインタのお願い申し上げます。..

答えて

0

私の最初の推測では、ネットワークソフトウェアとの典型的であるように、あなたのアプリケーションは、CPUバウンドIOバウンドではないということでしょう。これは、ネットワークカードのスループットがボトルネックであり、プロセッサのパフォーマンスではないことを意味します。特定の数のパケットだけをネットワーク経由でプッシュできます。各パケットの操作があまり複雑でない場合は、CPUを飽和させる前にNICを飽和させる可能性があります。

実際に送信されたパケットの数が、CPUプロファイルがフラットになったときにまだ増加していることを確認しましたか?ネットワークカードが原因である場合、受信側はそれを速く受け取ることができないため、送信側はそれ以上のパケットを時間単位で送信できないことがあります。短期的には、これはバッファリングによって平滑化されるが、長期的には平滑化されない可能性がある。 1つの可能性は、あなたがTCPではなくUDPを使用しているので、おそらくネットワークがそれらを処理できない場合にパケットが静かにドロップされることです。したがって、送信者の観点から見ると、たくさんのパケットを送信しているように見えますが、現実にはほとんど届きません。たぶん、あなたのアプリケーションにカウンタを配置し、単位時間あたりに正しく受信されたパケットの数を10000パケットごとに表示する必要があります。次に、ネットワークのスループットに達したためにパケットが失われているかどうかを知ることができます(これによってCPU使用量の制限が説明されます)。実際にこれらのパケットを正しく受信している場合、原因はおそらく別のものですが、まずこれを確認します。

+0

Kosmulki:はい、あなたは正しいです。毎秒udpパケットを送信するインターフェイスをログに記録しようとしました。意図は、5000のUDPパケットでサーバーをロードすることでしたが、私が得た数は約1000パケット/秒であり、送信側の観点からその時点で安定していることがわかりました。だからあなたが言及したことに基づいて、私は代わりにTCPを使用する必要がありますか?または? – heike

+0

notherなことは、実際にサーバーを約50パケット/秒で実際にロードすると、アイドル状態は実際にはまだ約80%です(どちらも5000パケット/秒を送信する場合と同じです)。これは理にかなっていません。使用しているインターフェイスがギガビットイーサネットであるため、より多くのパケットを処理できるようになり、約20パケット/秒が飽和しないようにしてください。 – heike

+0

TCPソケットを使用しようとしました。同じパターン。実際には違いはありませんが、まだアイドル状態の80%を占めています。 – heike

関連する問題