increase helper fetch blocksize to 1MB #397
Labels
No Label
0.2.0
0.3.0
0.4.0
0.5.0
0.5.1
0.6.0
0.6.1
0.7.0
0.8.0
0.9.0
1.0.0
1.1.0
1.10.0
1.10.1
1.10.2
1.10a2
1.11.0
1.12.0
1.12.1
1.13.0
1.14.0
1.15.0
1.15.1
1.2.0
1.3.0
1.4.1
1.5.0
1.6.0
1.6.1
1.7.0
1.7.1
1.7β
1.8.0
1.8.1
1.8.2
1.8.3
1.8β
1.9.0
1.9.0-s3branch
1.9.0a1
1.9.0a2
1.9.0b1
1.9.1
1.9.2
1.9.2a1
LeastAuthority.com automation
blocker
cannot reproduce
cloud-branch
code
code-dirnodes
code-encoding
code-frontend
code-frontend-cli
code-frontend-ftp-sftp
code-frontend-magic-folder
code-frontend-web
code-mutable
code-network
code-nodeadmin
code-peerselection
code-storage
contrib
critical
defect
dev-infrastructure
documentation
duplicate
enhancement
fixed
invalid
major
minor
n/a
normal
operational
packaging
somebody else's problem
supercritical
task
trivial
unknown
was already fixed
website
wontfix
worksforme
No Milestone
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Reference: tahoe-lafs/trac-2024-07-25#397
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
We have reports from a user with a fast uplink (but perhaps a long latency)
that they are pushing data to the helper very slowly, perhaps 20kBps. We
might want this to go faster.
One likely culprit is the helper's non-pipelined fetch protocol. It asks for
a 50kB block, waits until that has been received, writes it to disk, then
asks for the next one. This imposes a hard limit on the inbound data rate:
even with an infinitely fast uplink, we can't fetch faster than 50kB/latency.
For a 100ms RTT, this would be about 500kBps.
But even more likely is the helper simply being overloaded, because the real
denominator in that fetch-rate equation is the end-to-end latency, from the
time that the helper asks for one block to the time it asks for the next one.
In addition to the network latency, the helper is busy doing all sorts of
other things (like uploading other people's files).
In either case, allowing the client to give us more data per request would
increase their throughput. I picked 50kB because it felt like a reasonable
value. My notes in source:src/allmydata/offloaded.py#L338 say:
read data in 50kB chunks. We should choose a more considered number here,
possibly letting the client specify it. The goal should be to keep the
RTT*bandwidth to be less than 10% of the chunk size, to reduce the upload
bandwidth lost because this protocol is non-windowing. Too large, however,
means more memory consumption for both ends. Something that can be
transferred in, say, 10 seconds sounds about right. On my home DSL line
(50kBps upstream), that suggests 500kB. Most lines are slower, maybe 10kBps,
which suggests 100kB, and that's a bit more memory than I want to hang on
to, so I'm going to go with 50kB and see how that works.
But, as we've learned, people have some remarkably fast uplinks these days.
The main downside of increasing the blocksize is memory consumption: both
client and helper will use about 2xblocksize for each upload operation that's
happening in parallel. Zandr tells me to not worry about memory usage on this
scale. So a 1MB blocksize could be reasonable.