[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