ループバックネットワークでLinuxカーネルがどのくらいのトラフィックを処理できるか疑問に思ってベンチマークしてみることにしました。端末で以下を実行しました。
% nc -l -p 5235 127.0.0.1 > /dev/null
他の投稿では、私は以下を実行しました。
% nc 127.0.0.1 5235 < /dev/zero
その後、実際に流量を測定するために実行しましたsudo nethogs lo
。これは2番目の項目を示し、nc
毎秒約570,000KB(平均)を送信していることを示しています。最初のものは、nc
毎秒約1,300KBの平均を送信するように見え、これはTCP制御パケットであると仮定します。ただし、両方のnc
プロセスは0 KB /秒の受信速度を示しています。なぜこれですか?各プロセスは、他のプロセスによって送信された値と同じ受信値を報告する必要があるようです。
バージョン情報:
% nethogs -V
version 0.8.1
% uname -a
Linux file-not-regular.strugee.net 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux
% nc -h |& head -1
[v1.10-41]
答え1
これは、カーネルが送信元 IP アドレスと宛先 IP アドレスを超えたインバウンドトラフィックとアウトバウンドトラフィックを実際に区別しないためです。これらのパケットは、カーネルが送信元IPを見てローカルIPであることを確認し、それをアウトバウンドとして分類し、パケットをもはや分類しないため、「二重計算」されません(例:インバウンド)。