0

64 ビット Linux で、アプリケーションが可変サイズのバイナリ メッセージを送信し、64 ビット境界に配置されていません。たとえば、1026 バイト、85 バイトなどを送信できます。このシナリオでは、ソケットの送受信バッファー サイズをページ アラインメントすることは役に立ちますか、それとも問題になりませんか? アプリケーションは c で記述され、rhel 6.3x と 2.6.32.x86_64 カーネルで実行されます。

アップデート:

バッファとは、最初はsetsockoptによって設定されるSO_SNDBUFとSO_RCVBUFを意味していました。しかし、David のコメントに基づいて、PAGESIZE 境界に沿って、send および recv 呼び出しで使用されるアプリケーション バッファを作成する可能性を含めたいと思います。それは助けになりますか、傷つけますか、それとも問題になりませんか?

4

1 に答える 1

1

すべてのアプリケーションの目的のために、それは重要ではありません:

  • カーネル内バッファはOSによって管理され、実際にはページの倍数に自動的に丸められます。
  • ユーザーランドバッファーは、ユーザーカーネルのコピーを高速化するためにページ整列することができますが、違いに気付かないでしょう。

一方、たとえばファイルからソケットへのバッファジャグリングを大量に行う場合は、とを見てくださいsendfile(2)splice(2)これは、アプリケーションのコンテキストでは意味がある場合とない場合があります。

于 2012-11-20T22:07:56.707 に答える