From: "Mike Black" <mblack@xxxxxxxxxxx>
To: "Charlie (Zhanglei) Wang" <filamoon2@xxxxxxxxxxx>
Subject: Re: udp packet loss even with large socket buffer
Date: Tue, 2 Mar 2004 09:29:21 -0500
I was going to try and duplicate your problem but I can't find the source for libosip (gnu has taken it down from their ftp site).
However, if your packets are blasting across < 1 ms between than you might need to bump your receive queue like this:
Default is 300:
sysctl net.core.netdev_max_backlog
net.core.netdev_max_backlog = 300
sysctl -w net.core.netdev_max_backlog=2000
net.core.netdev_max_backlog = 2000
Ref: http://datatag.web.cern.ch/datatag/howto/tcp.html
Perhaps your processing is taking long enough that the traffic queue is building up.
One thing is your usleep and nanosleep I think will be a minimum of 2ms because of timer limitations.
#include <stdio.h>
#include <time.h>
#include <unistd.h>
main()
{
time_t mytime=time(NULL);
struct timespec t1,t2;
int i=0;
while(mytime == time(NULL));
mytime = time(NULL);
while(mytime == time(NULL)) {
t1.tv_sec=0;
t1.tv_nsec=100000;
nanosleep(&t1,&t2);
i++;
}
printf("i=%d\n",i);
}
You'll find this program spits out approximately "i=500" no matter how small you make tv_nsec.
You should also get rid of the usleep()'s in your code. It's been superceded by nanosleep and could be screwing things up too.
usleep(20000);
./console/sipomatic.c
usleep(pts - now);
./ffmpeg-0.4.8/ffmpeg.c
usleep(100);
usleep(100);
usleep(100);
usleep(100);
usleep(100);
usleep(10);
./ffmpeg-0.4.8/libavformat/grab.c
}else usleep(20000);
}else usleep(20000);
}else usleep(20000);
./mediastreamer/msv4l.c
// usleep(80);
./oRTP/src/rtpsession.c
----- Original Message -----
From: "Charlie (Zhanglei) Wang" <filamoon2@xxxxxxxxxxx>
To: "Denis Vlasenko" <vda@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>; <linux-kernel@xxxxxxxxxxxxxxx>
Sent: Monday, March 01, 2004 9:12 PM
Subject: Re: udp packet loss even with large socket buffer
> hi,
>
> Thanks for your reply. If you want to exactly reproduce my problem, please
> use the following
> commands to download my codes from cvs:
>
> cvs -d:pserver:anonymous@xxxxxxxxxxxxxxxxxxx:/cvsroot/gaim-vv login
> cvs -z3 -d:pserver:anonymous@xxxxxxxxxxxxxxxxxxx:/cvsroot/gaim-vv co
> linphone
>
> Simply hit enter when prompted for passwd.
> (1) Please download and install libosip before compiling.
> (2) Before ./configure, please run command 'rm -Rf ffmpeg; ln -s
> ffmpeg-0.4.8 ffmpeg'.
> (3) After 'make' and 'make install', use 'linphonec' to run the program.
> (4) Under linphonec, use the following commands to communicate with windows
> messenger:
> r www-db.research.bell-labs.com
> c <sip:username_of_windows_messenger@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
>
> www-db.research.bell-labs.com is a public sip server.
>
> Under Windows Messenger (which runs only under WinXP), use SIP login
> method. Sign-in name should be
> username_of_windows_messenger@xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>
> Please note that Windows Messenger is different from MSN Messenger.
>
> I know it's kind of complicated... :( Thank you in advance!
> PS: My Linux box and Windows XP box run in the same LAN.
>
> Johnny
>
> ----- Original Message -----
> From: "Denis Vlasenko" <vda@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
> To: "johnny zhao" <filamoon2@xxxxxxxxxxx>; <linux-kernel@xxxxxxxxxxxxxxx>
> Sent: Saturday, February 28, 2004 4:22 PM
> Subject: Re: udp packet loss even with large socket buffer
>
>
> > On Saturday 28 February 2004 03:09, johnny zhao wrote:
> > > Hi,
> > >
> > > I have a problem when trying to receive udp packets containing video
> data
> > > sent by Microsoft Windows Messenger. Here is a detailed description:
> > >
> > > Linux box:
> > > Linux-2.4.21-0.13mdksmp, P4 2.6G HT
> > > socket mode:
> > > blocked mode
> > > code used:
> > > while ( recvfrom(...) )
> > > socket buffer size:
> > > 8388608, set by using sysctl -w net.core.rmem_default and rmem_max
> > >
> > > I used ethereal(using libpcap) to monitor the network traffic. All the
> > > packets were transferred and captured by libpcap. But my program
> constantly
> > > suffers from packet loss. According to ethereal, the average time
> interval
> > > between 2 packets is 70-80ms, and the minimum interval can go down to
> > > ~1ms. Each packet is smaller than 1500 bytes (ethernet MTU).
> > >
> > > Can anybody help me? I googled and found a similar case that had been
> > > solved by increasing the socket buffer size. But it doesn't work for me.
> I
> > > think 8M is a crazily large size :(
> >
> > Post a small program demonstrating your problem.
> > (I'd test udp receive with netcat too)
> > --
> > vda
> >
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
> >
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/