lockandfire
2015年1月29日 17時51分
いつもお世話になっております。
表題の件について、UDP protocol通信プルグラムの中、受信側のArmadillo-210の受信間隔が、最低20ms以下に下らないのことです。
例として:
送信側 受信側 メッセージ1 メッセージ1 10ms 20ms メッセージ2 メッセージ2 10ms 20ms メッセージ3 メッセージ3 10ms 20ms メッセージ4 メッセージ4
となっています。wiresharkで見ると、送信側の間隔は確かに10msです。
だが、送信側の間隔は20msより大きいの場合には、問題がない。同じ問題をstackoverflowへ投稿したので、詳しいことをそちに参考してください。
http://stackoverflow.com/questions/28209767/linux-udp-receive-message-s…
そういうことで、受信間隔を10msまでに下る方法を教えでください。
以上です。宜しくお願い致します。
コメント
lockandfire
中村様
お世話になりました。本トピックについて、原因が発見しました。問題は、udpのrecvfromループの最後のusleep(100)でした。
while(1) { recvlen = recvfrom( ); ... usleep(100); }
armadillo210-baseのuClinuxは、tick clockは100Hz(10ms)ですので、usleep/nanosleep/setitimerなどSIGALRMに基づき関数は、最低20msの間隔をしか得ない。ですので、今の課題はtick clockをへんこうしてカーナルを再コンパイルの方法を見つかるに変更しました。
以上です。
> 中村です。
>
> > 表題の件について、UDP protocol通信プルグラムの中、受信側のArmadillo-210の受信間隔が、最低20ms以下に下らないのことです。
>
> 長時間実行した場合、どうなりますか?
> たとえば、10msec間隔で1000個送信すると10秒かかります。
> 受信側は1000個受信できますか?stackoverflowではno lostと書かれてますが。
> その場合、1000個受信するのには20秒かかりますか?
> 10000個(送信に100秒)ではどうでしょうか?
>
> > だが、送信側の間隔は20msより大きいの場合には、問題がない。
>
> 逆に、10msecより短い間隔、たとえば、1msecで1000個
> 送信するのには1秒ですが、この場合はどうなりますか?
>
> それから、10msecと20msecの間、たとえば、15msec間隔で
> 送信するとどうなりますか?
>
> 220なら持っているので、時間があれば試してみたいところですが、
> 今のところ、自分で試せる時間はありません。
>
> --
> なかむら
>
y.nakamura
中村です。
> お世話になりました。本トピックについて、原因が発見しました。問題は、udpのrecvfromループの最後のusleep(100)でした。
stackoverflowに書いてあったコード、
よく見ると、while(1) { に対する閉じカッコがないので、
その閉じカッコの前に、実は
> usleep(100);
> }
のようにusleep()あった、ということかと思います。
stackoverflowで突然
I found out the problem is due to a usleep(10) and the end of while.
と出てきたので、どこのことを言っているのかなぁ?と思ってました。
> armadillo210-baseのuClinuxは、tick clockは100Hz(10ms)ですので、usleep/nanosleep/setitimerなどSIGALRMに基づき関数は、最低20msの間隔をしか得ない。ですので、今の課題はtick clockをへんこうしてカーナルを再コンパイルの方法を見つかるに変更しました。
はい。usleep()とnanosleep()は20msec間隔になってしまうようですね。
setitimerは、intervalに9999usecまでの値をを与えれば
20msecではなくて10msec間隔になります。
参考
http://lists.atmark-techno.com/pipermail/armadillo/2009-March/004098.ht…
--
なかむら
y.nakamura
2015年1月30日 10時11分
中村です。
> 表題の件について、UDP protocol通信プルグラムの中、受信側のArmadillo-210の受信間隔が、最低20ms以下に下らないのことです。
長時間実行した場合、どうなりますか?
たとえば、10msec間隔で1000個送信すると10秒かかります。
受信側は1000個受信できますか?stackoverflowではno lostと書かれてますが。
その場合、1000個受信するのには20秒かかりますか?
10000個(送信に100秒)ではどうでしょうか?
> だが、送信側の間隔は20msより大きいの場合には、問題がない。
逆に、10msecより短い間隔、たとえば、1msecで1000個
送信するのには1秒ですが、この場合はどうなりますか?
それから、10msecと20msecの間、たとえば、15msec間隔で
送信するとどうなりますか?
220なら持っているので、時間があれば試してみたいところですが、
今のところ、自分で試せる時間はありません。
--
なかむら