[X2go-Dev] libssh, nagle, and performance issues

John A. Sullivan III jsullivan at opensourcedevel.com
Tue Sep 20 12:39:15 CEST 2011


On Mon, 2011-09-19 at 13:44 +0200, Oleksandr Shneyder wrote:
> Am 19.09.2011 13:30, schrieb Mike Gabriel:
> > Hi Alex,
> > 
> > On Mo 19 Sep 2011 09:51:16 CEST Oleksandr Shneyder wrote:
> > 
> >> Am 17.09.2011 03:39, schrieb John A. Sullivan III:
> >>> On Fri, 2011-09-16 at 23:17 +0200, Mike Gabriel wrote:
> >>>> Hi John, hi Alex,
> >>>>
> >>>> On Fr 16 Sep 2011 21:56:38 CEST "John A. Sullivan III" wrote:
> >>>>
> >>>>> Hello, all.  Since moving to the newer clients using libssh, I've
> >>>>> noticed what appears to be a performance degradation.  It smells like
> >>>>> Nagle coalescing packets, e.g., most of the screen will paint, then it
> >>>>> will pause a moment, and then the rest will paint.  Is there any
> >>>>> chance
> >>>>> we have neglected to disable Nagle when invoking libssh?
> >>>>>
> >>>>> This appears to have affected the SNMP over SSH project:
> >>>>> http://books.google.com/books?id=S62is2vVoVgC&pg=PA29&lpg=PA29&dq=libssh
> >>>>>
> >>>>> +nagle&source=bl&ots=F8Iw-pvQxd&sig=f5dfy0K0ewzSZOhqzTJRSKsDKZ8&hl=en&ei=KppzTrCZD4LJgQeMxLzzDA&sa=X&oi=book_result&ct=result&resnum=1&sqi=2&ved=0CBwQ6AEwAA#v=onepage&q=libssh%20nagle&f=false
> >>>>>
> >>>>>
> >>>>> This is in section 4.1. The difference was a latency of over 800ms to
> >>>>> one of under 60ms.  That seems to be about what I am seeing. There
> >>>>> is a
> >>>>> delay of roughly a second and then the rest of the screen comes
> >>>>> through.
> >>>>> Thanks - John
> >>>>
> >>>> Indeed the TCP_NODELAY (which means: turn Nagle off) is not set for
> >>>> the ssh tunnel in X2goClient. It probably is for the SSH connection
> >>>> itself, as the SNMP patch has been reported to libssh upstream and
> >>>> their patch suggestion has been sensible. However, for the SSH tunnels
> >>>> built up for X2go this TCP_NODELAY option does perhaps not get set.
> >>>>
> >>>> @Alex: would this patch fix that in x2goclient???
> >>>>
> >>>> diff --git a/sshprocess.cpp b/sshprocess.cpp
> >>>> index 9e72e8f..03ee9b6 100644
> >>>> --- a/sshprocess.cpp
> >>>> +++ b/sshprocess.cpp
> >>>> @@ -88,6 +88,7 @@ void SshProcess::tunnelLoop()
> >>>>       const char y=1;
> >>>>   #endif
> >>>>       setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR,&y,
> >>>> sizeof(int));
> >>>> +    setsockopt(serverSocket, IPPROTO_TCP, TCP_NODELAY,&y,
> >>>> sizeof(int));
> >>>>
> >>>>       address.sin_family=AF_INET;
> >>>>       address.sin_addr.s_addr=INADDR_ANY;
> >>
> >> I don't think that that can be helpful. This part of code is only for
> >> reverse tunnel which is used for FS forwarding and Pulse Audio.
> >>
> > 
> > I took another close look at the code of sshProcess.cpp. The patch is
> > applied to the method sshProcess::tunnelLoop. This method only gets
> > execute in sshProcess::startTunnel.
> > 
> > The call is:
> > 
> > <quote>
> > if (!reverse)
> >   tunnelLoop();
> > else
> > {
> >     <blablabla>
> > }
> > </quote>
> > 
> > So this makes me think that tunnelLoop() is not for reverse tunneling
> > but for the graphics tunnel.
> > 
> > Could you take another look please?
> > 
> > Thanks,
> > Mike
> 
> hmmm, ok, seems you are right :) Can you apply this patch to source tree
> and I'll try to build a windows binary tomorrow.
> 
> regards,
> Alex
<snip>
Hi, Alex.  Are the Windows packages available anywhere to test? Thanks -
John




More information about the x2go-dev mailing list