Linux TCP、ストリーム書き込み時に予期しない遅延をデバッグする方法は?

Linux TCP、ストリーム書き込み時に予期しない遅延をデバッグする方法は?

問題:My Music Serverコードは、ブロックソケットを介した単純なTCP接続を使用し、バイトをクライアント(ロジクールスクイズボックス)にストリーミングする必要があります。複雑ではありません。ファイルから64kを読み、squeezeboxに書き込んで繰り返します。サーバーとスクイーズボックスクライアントが同じスイッチに接続されていて、あまりにも忙しくないローカルLANで実行されます。 Squeezeboxはストリームを非常に迅速に消費しないため、サーバーはほとんどすべてのハードウェアでクライアントの要件を満たすことに問題はありません。

サーバーがRaspberry pi 3B +で実行されている場合、実際にはまったく問題はありません。パイゼロが追いつくことができるかもしれません。私のLinuxノートブックで実行すると、すべてが正常です。定期的にスクイズボックスの内部バッファがどれだけ満たされているかを尋ねることができます。そのバッファはすぐに約99%以上に達し、そのまま残ります。予想通り、サーバーwrite()(最初の数回以降)はほとんどの時間をブロックします。

しかし、サーバーをLinuxを実行しているAzulle Inspireに移動し、同じスイッチに接続しましたが、何かが非常に間違っています。音楽が再生され始めたが、すぐに発作と始まりに消えた。 Squeezeboxは、バッファがいっぱいになり始めますが、何かが停止し、バッファが非常に速く空になり(時々少し上がり、一部のトラフィックは通過しますが十分に閉じていないようです)、音楽が停止すると報告します。サーバーでは書き込みを続けていますが、予想よりも書き込みに時間がかかります。

Azulleには時々異なるネットワークタスクがあり、すべてうまく機能しますが、他のほとんどのアプリケーションでは短いネットワーク遅延を感じることはありません。ただし、音楽サーバーが稼働している間、NUC(およびネットワーク)はアイドル状態です。これはCPUや帯域幅の問題ではありません。

ケーブルを交換し、スイッチを交換し、スイッチの別のポートを試してみました。別のバッファサイズを送信しようとしました。効果はありません。私が考えることができるのは、TCPスタックやイーサネットハードウェアに何か非常に奇妙なことがあるということだけです。

どのようにデバッグできますか? Linuxノートブックは、Linux 4.15.0-55-genericを実行して正常に動作します(適切なアップグレードでは変更されません)。 AzuelleはLinux 4.15.0-64-generic、Mintを実行しています。 4.15.0では、TCP処理がどれほど根本的に変わったのか信じられません。私はカーネルの設定やデバッグだけでなく、tcpdumpのようなツールにも慣れていないので、助けを求めています。

LinuxノートブックとAzuelle間のping時間は、一貫して約0.2msと0.35msで、典型的な値は0.33msです。

迷子になりました。ティア。

ベストアンサー1

tcpdump を使用してストリームをキャプチャします。

tcpdump -i iface -s 1500 -w out.cap 'tcp and port xxx'

2つのポート番号の1つであるifaceネットワークインターフェイスはどこにありますか?xxx

その後、out.capWiresharkで開き、追跡から何が得られるかを確認します。何が起こっているのか明確にする必要があります。そうでない場合は、もう一度投稿してください。

FWIW、あなたが言うように、MTUの問題のように聞こえます。

おすすめ記事