[drats_users] File and Form Transfers over Repeater/Reflector

Dan Smith
Wed Oct 1 08:49:13 PDT 2008


> After some trial and error I have found that I get a much better 
> success rate if I set the "force delay between transmissions" to 1or 2 
> seconds for repeaters and 3-4 for reflectors. This ultimately will 
> extend the transfer time but helps insure a better success rate by 
> allowing for any repeater bounce or unlinking from reflectors. There are 
> probably different amounts of latency for different repeaters and 
> reflectors so you may have to play with this a bit.

Great, thanks for the report!  Maybe we need a note on the wiki about 
some of this.  A "tips" or "troubleshooting" page perhaps.

> Also could someone shed more light on the Pipeline Blocks, 

Originally, the transport algorithm was:

  1. Read a block from the file being sent
  2. Send it to the remote side
  3. Wait for ACK
  4. If ACK goto 1
  5. If NAK goto 2

This was safe, but it meant that you had to use pretty good size blocks 
to get a reasonable transfer rate, and if you had a single bit error, 
you had to retransmit the whole thing.  I added pipelining which reads 
multiple blocks in step 1 and sends multiple blocks in step 2.  During 
each "round" the remote can ACK/NAK any of the blocks that were sent. 
So, if we send 5 small blocks and one doesn't make it, the next time 
around we resend the one missed block, as well as four more new blocks.

The smaller blocks mean less needs to be resent while keeping the 
transmitter busy longer, and thus more throughput.

> Warm Up Length and Warm Up Timeout settings?

Let me first tell you the initial reasoning for adding this.  The 
handhelds, when power save mode is enabled, start to go to sleep for 
longer and longer, depending on how long it's been since the last 
received signal.  Thus if it's been 10 seconds or so, they are pretty 
asleep and will inevitably miss the beginning of any new signal that is 
sent.  The "warm up" sends a fake block before any real block to attempt 
to "wake up" any handhelds that might be listening, before the real 
block goes out.  To avoid transmitting fake blocks all the time, I only 
send that fake block if it's been a while since we last transmitted.

The "length" is how big the fake block is, and the "timeout" is the time 
period since the last transmission before we send a warmup.  So, if 
timeout is set to 10 seconds, then if we send two messages 3 seconds 
apart, no warmup will be sent.  If we set it to 1, then it would be sent.

The best values for these settings are unknown to me, and I'm more than 
willing to take input on what the defaults should be.  I added knobs for 
these because I figured they may help "prime" the reflector before 
sending data as well.

Do those explanations make sense?  Sometimes I'd kill for a whiteboard... :)

-- 
Dan Smith
dsmith#danplanet.com, s/#/@/
www.danplanet.com
KK7DS




More information about the drats_users mailing list