2013-07-24 54 views
7

コマンドラインから実行する方法はありますか? man tcpは、tcp_nodelay = 1を設定する必要があると伝えますが、/ proc/sys/net/ipv4の下にtcp_nodelayファイルを作成することはできません。 LinuxでNagleを無効にする方法があれば教えてください。LinuxでNagleのアルゴリズムを無効にするには?

+0

これをシステム全体にしたいですか? –

+0

いや、理想的にはシステム全体が好きです –

答えて

23

このフラグ(TCP_NODELAY)は、ソケットごとに有効にすることができ、TCPソケットを作成するときに適用されるオプションです。これは目的のために行われます。Nagleのアルゴリズムは一般に有用であり、ネットワークの輻輳を処理するのに役立ちます。あなたのシステムはおそらくこの非活性化に苦しんでいるので、システム全体でそれを無効にしたいと思う。与えられたソケットのためにそれを無効にするには

、Cにherehereを説明するように、あなたがオプションTCP_NODELAYを適用することができます。

int flag = 1; 
int result = setsockopt(sock,   /* socket affected */ 
         IPPROTO_TCP,  /* set option at TCP level */ 
         TCP_NODELAY,  /* name of option */ 
         (char *) &flag, /* the cast is historical cruft */ 
         sizeof(int)); /* length of option value */ 
if (result < 0) 
    ... handle the error ... 

あなたのプログラミング言語に適応する必要があるかもしれませんが、基本的にはTCP_NODELAYフラグを設定オプションをソケットsockに送信し、Nagleのアルゴリズムを効果的に無効にします。これは、TCP標準をサポートするソケットを持つ任意のOSで有効です。

Nagleのアルゴリズムをシステム全体で無効にする場合は、2つのオプションを使用できます。まず、旗を使ってカーネルを再コンパイルすることができます(これについては配布マニュアルを参照してください)。 2番目の方法は、this codeに似た既存の接続ごとにTCP_NODELAYフラグを設定するソフトウェアを作成することです。後者のオプションは、新しいTCP接続がシステム上に作成されるたびに実行する必要があります。

ビットクリーナーは、TCPの低遅延モードを有効にするだろう何か:

echo 1 > /proc/sys/net/ipv4/tcp_low_latency 

どのようにする決定に、これは、レイテンシを下げるためにTCPスタックにヒントを与えるだろう(IあなたがNagleのアルゴリズムを無効にして達成しようとしていることです)。デフォルトでは、帯域幅を最適化するように設定されています(「0」は/proc/sys/net/ipv4/tcp_low_latencyから読み込まれます)。

+0

あなたの答えは正しいですが、なぜ '&flag'を' char * 'にキャストしますか? 'setsockopt'は' const void * '値ポインタを期待しているので、型へのキャストは必要ありません(すべての型は暗黙的に' void * 'にキャストできます):http://pubs.opengroup.org/onlinepubs/9699919799/functions/ setsockopt.html実際には、タイプAのポインターをタイプBのポインターにキャストしても、どちらのタイプも 'void * 'でないものは、ISO-Cによって実際には未定義の振る舞いです。あなたはintへのポインタを持っていますが、それは 'char *'へのポインタだと主張しています(ほぼすべてのシステムで動作しますが、技術的には未定義です) – Mecki

+0

このコードは私のものではありません。この問題については、www.unixguide.netにお問い合わせください。 'setsockopt()'にはいくつかの異なるシグネチャがあることを覚えていますが、そのうちのいくつかは(私が提供した最初のリンクのように) 'flag'パラメータに' char * 'を使います。信頼できる 'setsockopt()'プロトタイプへの参照と目的の操作を実行するためのコード例がある限り、私は答えを変えても構いません。 – Soravux

関連する問題