私は、WLANを介してWindowsエンドポイントに大量のUDPトラフィックを送受信するAndroidアプリケーションで作業しています(いいえ、TCPは使用できません)。Androidで巨大なUDP遅延/遅延
問題は、私がトラフィックを増やすと、sendto(NDKでアプリケーションが書かれている)とパケットがWindowsエンドポイントに届くのを見たときの間に大きな遅延が見られることです。 の10秒以内の近くに!逆も同じことが起こります:パケットがWindowsのエンドポイントによって送信され、recvfrom()によってピックアップされている間に膨大な遅延が発生します。
- SO_SNDBUFを変更しても効果はありません。アプリケーションレベルのバッファリング制御では問題にはならないと思います。
- さまざまなAndroid搭載デバイスに問題があることを確認しましたので、ハードウェア/ワイヤレスドライバの問題ではないとは思いません。
- スニファを使用してタイムスタンプを関連付けると、 sendto()とAndroidデバイスから送信されたパケットの呼び出しの間に発生するので、APまたはWindowsエンドポイントでバッファリングが行われていません。
この時点では、事実は私に、バッファリングがAndroid OS層で起こっていると信じさせるだろうが、10秒間の10Mbpsのトラフィック?メモリフットプリントがそれほど大きな関心事であるOSにとっては、それは実現するには高すぎるようです。
また、データを送信しすぎてOSを圧倒してしまうという問題がある場合は、sendto()がENOMEMまたはENOBUFSを返すと期待しています...しかし、Androidで何か間違っているという兆候はありませんアプリケーションレベル。
私の質問です:この遅延の原因は何ですか?それを緩和する方法があるのですか、タイムアウトが長くなるようにアプリケーションを変更する必要がありますか、悪化する前にこの状態を検出する方法がありますか?
おそらく、あなたのCPUがビジーですか? –
@AlexCohn私はちょうどCPU監視アプリケーションでチェックしました。忙しいですが忙しくはありません(最大約20%) –
http://developer.android.com/reference/android/os/Debug.html#startMethodTracing()http://developer.android.com/tools/ debugging/ddms.html#network – auselen