SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ファイルディスクリプタについて

ファイルディスクリプタについて(6)
~多重I/Oの性能とC10K問題

第6回

データ送受信の性能

 次にサーバとクライアントで情報のやり取りが行われた場合の処理時間を計測します。

 クライアントはスレッドで行い、コネクションの確立はプロセス内でシリアライズされるようにスレッドを立てる前に確立しておきます(理由は「コネクション確立の性能」の通り)。

 コネクションが確立した後、クライアント(=スレッド)から決められたデータ量/処理回数でデータを送受信し、開始から終了までの時間を計測します。コネクション数、繰り返し送受信数とデータ量はプログラム引数で指定します。処理終了後にクライアント内の処理時間を計測し、画面に出力します。

 プログラムは200行を超えているため、ここでは割愛します。ダウンロードして参照してください。

 スレッドからデータの送受信を繰り返すため、スレッド切替などの時間が加わることで実際の処理時間とは異なる可能性が高いですが、傾向くらいはつかめると思います。

 検証数値は、コネクション数を10,000、処理回数を100回と1,000回、データ量を1,024バイトと10,240バイトとしました。その時の傾向を見ます。

図2のデータ取得方法
# ./poll_performance 10000 100 1024
# ./epoll_level_performance 10000 100 1024
# ./epoll_edge_performance 10000 100 1024
図3のデータ取得方法
# ./poll_performance 10000 100 10240
# ./epoll_level_performance 10000 100 10240
# ./epoll_edge_performance 10000 100 10240
図4のデータ取得方法
# ./poll_performance 10000 1000 1024
# ./epoll_level_performance 10000 1000 1024
# ./epoll_edge_performance 10000 1000 1024

 計測結果は下記の通りです。

図2
図2
図3
図3
図4
図4

 コネクションの時と同様、epollの性能がpollに比べて優れているようです。傾向として、epollのエッジトリガが若干優れているように思います。

次のページ
大きなデータを送受信する時の性能

この記事は参考になりましたか?

ファイルディスクリプタについて連載記事一覧

もっと読む

この記事の著者

赤松 エイト(エイト)

(株)DTSに勤てます。WebアプリやJavaやLL等の上位アプリ環境を密かに憧れつつも、ず~っとLinuxとかHP-UXばかり、ここ数年はカーネル以上アプリ未満のあたりを行ったり来たりしています。mixiもやってまして、こちらは子育てとか日々の日記メインです。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4830 2010/03/05 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー