[Lcdproc] Increasing the server's receive buffer

aeriksson2 at fastmail.fm aeriksson2 at fastmail.fm
Wed Mar 4 12:54:30 UTC 2009


andy at siliconlandmark.com said:

> Though DMA-like systems are used where performance is critical, these   types
> of systems are often inflexible and of limited functionality in   a networked
> environment. Think of it this way: Besides host-specific   zero-copy sockets,
> what use is DMA on a network? TCP allows the source   of the data to be in a
> geographically separate area (It could be in   outer space, literally), or
> not, from the system running LCDd.

We're not talking about the same thing. I'm not concerned with the IP layer 
(e.g. fragmentation/reassembly). I'm just concerned with how the TCP layer is 
used by the LCDd server and lcdproc client. Or, to put it more succint, how 
the LCDd protocol interacts with the tcp layer. Is there a formal writeup 
of the LCDd protocol somewhere? I've only seem some howtos on how once _could_ 
write clients LCDd would understand. That's far from a formal spec and, to be 
frank, what I've seen lacks quite a bit from a protocol quality point of view. 
I'm hoping that there is a better writeup I've not yet discovered.

>> The only answer I can come up with is that you might want "create  
>> screen + define its content" to be an atomic operation.

> This is a good idea, but for the operation to be truly atomic, it   would
> have to fit in exactly one ethernet frame and not cross any   routers where
> it might get fragmented. Otherwise, you stall waiting   for more data until
> you get the expected number of bytes, which is the   design we have,
> presently.

>> Is that defined anywhere? If that's indeed the case, maybe explicit  
>> barriers in the protocol would be more stable.

> I don't follow. 

Today, we roughly do on the tcp pipe (not having the howto handy):
screen s <args>
widget s w1 <args>
widget s w2 <args>
...


There's no telling what the server does after the first two steps. Will it 
display the partially defined screen? A way to turn this into an atomic unit 
would be to wrap it in "start" "stop" statements.

screen_def_start s
screen s <args>
widget s w1 <args>
widget s w2 <args>
...
screen_def_stop s

Only after having received the stop command would the server act on the wrapped 
commands. That would make the atomic units controlle by the client and, do so 
by dint of the application layer protocol (i.e. not relying on aspects of the 
transport (tcp), e.g. the message interface).

But the first order of business is to find a good protocol spec for the 
existing sitaution. Is there one?

/Anders  





More information about the LCDproc mailing list