/proc/net/tcp の読み取りに時間がかかるのはなぜですか? ss は接続テーブルに関する同じ種類のデータをすぐに返します。

/proc/net/tcp の読み取りに時間がかかるのはなぜですか? ss は接続テーブルに関する同じ種類のデータをすぐに返します。

Linux 2.6.32 では、負荷の高いシステム (Web サーバーなど) で /proc/net/tcp を読み取る (たとえば cat) と、100K エントリの読み取りに 30 秒以上かかることがわかります。これは長い時間です。

舞台裏では何が起こっているのでしょうか? ロックがかかっているのでしょうか?

多くの人が「ss」コマンドの速度について言及しています。「cat /proc/net/tcp」や「netstat」では実行されないのに「ss」コマンドでは実行されて、速度が大幅に向上する仕組みは何でしょうか?

答え1

ssソケット レイヤーを使用してAF_NETLINKカーネルと通信します。これは低レベルのプロトコルですが、データを非常に高速かつ大きなチャンクで転送できます。CentOS strace7 で簡単に確認すると、転送ウィンドウが 1Mb に設定されていることがわかります。

関連情報