問題: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.cap
Wiresharkで開き、追跡から何が得られるかを確認します。何が起こっているのか明確にする必要があります。そうでない場合は、もう一度投稿してください。
FWIW、あなたが言うように、MTUの問題のように聞こえます。
答え2
まあ、それは私に必要な手がかりだった。
MTUサイズが気になったときにこれを見つけました。
/sys/class/net/enp1s0/mtu:1500 /sys/class/net/lo/mtu:65536 /sys/class/net/wlp2s0/mtu:1500
すべてが正常ですが、wlpはワイヤレス接続のように見えます。ワイヤレス電話?まだ開いていますか?だからwlp ...インターフェイスでtcpdumpを実行し、プロトコルで認識されたメッセージと長いACK文字列、そしてストリームで数秒間再生される音楽を見て失敗しました。
その後、ワイヤレスをオフにして再試行しました。吃音がありません。すべて最高です。
奇妙なことに、サーバーはワイヤレスアクセスポイントからわずか数フィート離れています。使用していても帯域幅が不足してはいけません。何らかの理由で2つを同時に開くと問題が発生するかどうか疑問に思いましたが、それはできないようです...