タグ

ブックマーク / blogs.itmedia.co.jp/komata (4)

  • TCP/IPでsend()を繰り返す際に気をつけると良いこと:プログラマー社長のブログ:オルタナティブ・ブログ

    久しぶりにネットワークプログラミングネタで。 TCP/IPをソケットインターフェースで使う際に、通信相手側が切断したかどうかはrecv()で受信したときにゼロが戻ることで判断するのは誰もが知っていることですが、send()で送信する際にも、1回目にはエラーにならなくても2回目には大抵エラーになることでわかるということも知っていると思います。 たとえば、HTTPサーバを作るとすると、送受信部分は下記のような感じに書くでしょう。 ループ{ recv()でリクエストを受信 if(recv()のリターン値がゼロか-1){ break; } send()で応答を送信:応答を送りきるまで } 大抵はこれで問題ないのですが、高負荷時にはこれだとカーネルが不機嫌になることがわかりました。。 send()で大きなサイズを送信する場合、クライアント側が途中で切断してしまうことがあり、基的にはsend()が-

    TCP/IPでsend()を繰り返す際に気をつけると良いこと:プログラマー社長のブログ:オルタナティブ・ブログ
    labunix
    labunix 2012/12/29
  • Linux:カーネルまで含めたプロファイルの取り方:プログラマー社長のブログ:オルタナティブ・ブログ

    UNIX系OSでプログラミングをしていて、性能面で悩んだときには、gprofというプロファイラを使うと、簡単にプログラム中の関数呼び出し回数や関数実行時間などを測定することができます。gccのオプションに-pgをつければ良いだけということでとても簡単で便利です。 ところが、gprofで測定できるのは、あくまでもプログラム自体の処理だけで、カーネルやドライバまで含めた測定はできません。 このところ、ネットワークプログラムの10Gイーサーでの性能向上をしているのですが、10Gクラスになるとプログラム自体の処理はもちろんですが、カーネル内の処理やデバイスドライバでの処理もかなり大きな影響がでてきます。特に、ネットワークでの通信は、ネットワークデバイスでの出入りは並列化できなかったり、パケットの順序を入れ替えられないことがほとんどなど、どれだけCPUが並列処理に強くなっても、ネットワーク関連の処理

    Linux:カーネルまで含めたプロファイルの取り方:プログラマー社長のブログ:オルタナティブ・ブログ
    labunix
    labunix 2012/06/19
  • ネットワークポートの冗長化:プログラマー社長のブログ:オルタナティブ・ブログ

    今回は技術ネタです。 あるシステムを開発していて、ネットワークポートの冗長化の実験をしてみましたので、様子を紹介しましょう。 今どきのホストには1つ以上のネットワークポートがついていると思います(有線LANポートがないものもありますが)。サーバ機ですと2個以上ついていることも多く、そのような場合、片方だけ使うと、せっかくあるもう一つのポートがもったいない感じですよね。 素人考えでも、「せっかく2個ついているなら、2個ともつないでしまおう」→「2個になれば片方壊れても大丈夫」「性能も2倍になる?」と考えますね。 実際にはつなぐだけではうまくいかないのですが、リンクアグリゲーションまたはポートトランキングなどと呼ばれる技術で実現できます。 Linuxの場合、ボンディングと呼ばれる技術で、複数のネットワークインターフェースを束ねることが簡単にできます。 RHEL系ですと、 /etc/syscon

    ネットワークポートの冗長化:プログラマー社長のブログ:オルタナティブ・ブログ
    labunix
    labunix 2012/04/13
  • 単体テストの意義とは?:プログラマー社長のブログ:オルタナティブ・ブログ

    主に、プログラムの受託開発や常駐での開発作業に関する話題です。ソフト開発の仕事では、プログラムだけ作って納品しておしまい、という仕事は非常に希で、多くの場合、ドキュメントも納品することになります。ドキュメントは、 ・基設計 ・詳細設計 ・画面設計 ・DB設計 ・プロトコル設計 などの設計書の他に、テスト成績書が要求されます。テストは一般的に、 ・単体テスト ・結合テスト ・総合テスト の3段階と考えられています。この中で、私が毎回疑問に感じているのが、「単体テストのテスト仕様書・成績書」の必要性です。 単体テストは、いわゆるホワイトボックステストで、ソースコードを網羅するような確認が対象です。私が何を疑問と感じているかというと、「ソースコードを網羅するようなテスト仕様書を作成するのは、ソースコードを書くこと以上に手間がかかる」ということです。 できるプログラマーは、ソースコードを少し書い

    単体テストの意義とは?:プログラマー社長のブログ:オルタナティブ・ブログ
    labunix
    labunix 2012/03/08
  • 1