faster upload of small files on high-latency nets

This commit is contained in:
ed 2023-01-12 02:53:22 +00:00
parent 434823f6f0
commit 53d92cc0a6

View file

@ -1555,11 +1555,11 @@ function up2k_init(subtle) {
st.busy.handshake.length) st.busy.handshake.length)
return false; return false;
if (t.n - st.car > 8) if (t.n - st.car > Math.max(8, parallel_uploads))
// prevent runahead from a stuck upload (slow server hdd) // prevent runahead from a stuck upload (slow server hdd)
return false; return false;
if ((uc.multitask ? 1 : 0) < if ((uc.multitask ? parallel_uploads : 0) <
st.todo.upload.length + st.todo.upload.length +
st.busy.upload.length) st.busy.upload.length)
return false; return false;
@ -1571,21 +1571,22 @@ function up2k_init(subtle) {
if (!parallel_uploads) if (!parallel_uploads)
return false; return false;
var nhs = st.todo.handshake.length + st.busy.handshake.length,
nup = st.todo.upload.length + st.busy.upload.length;
if (uc.multitask) { if (uc.multitask) {
if (nhs + nup < parallel_uploads)
return true;
if (!uc.az) if (!uc.az)
return st.todo.handshake.length + st.busy.handshake.length < 2; return nhs < 2;
var ahead = st.bytes.hashed - st.bytes.finished, var ahead = st.bytes.hashed - st.bytes.finished,
nmax = ahead < biggest_file / 8 ? 32 : 16; nmax = ahead < biggest_file / 8 ? 32 : 16;
return ahead < biggest_file && return ahead < biggest_file && nhs < nmax;
st.todo.handshake.length + st.busy.handshake.length < nmax;
} }
return handshakes_permitted() && 0 == return handshakes_permitted() && 0 == nhs + nup;
st.todo.handshake.length +
st.busy.handshake.length +
st.todo.upload.length +
st.busy.upload.length;
} }
var tasker = (function () { var tasker = (function () {
@ -1750,20 +1751,22 @@ function up2k_init(subtle) {
var sr = uc.fsearch, var sr = uc.fsearch,
ok = pvis.ctr.ok, ok = pvis.ctr.ok,
ng = pvis.ctr.ng, ng = pvis.ctr.ng,
spd = Math.floor(st.bytes.finished / st.time.busy),
suf = '\n\n{0} @ {1}/s'.format(shumantime(st.time.busy), humansize(spd)),
t = uc.ask_up ? 0 : 10; t = uc.ask_up ? 0 : 10;
console.log('toast', ok, ng); console.log('toast', ok, ng);
if (ok && ng) if (ok && ng)
toast.warn(t, uc.nagtxt = (sr ? L.ur_sm : L.ur_um).format(ok, ng)); toast.warn(t, uc.nagtxt = (sr ? L.ur_sm : L.ur_um).format(ok, ng) + suf);
else if (ok > 1) else if (ok > 1)
toast.ok(t, uc.nagtxt = (sr ? L.ur_aso : L.ur_auo).format(ok)); toast.ok(t, uc.nagtxt = (sr ? L.ur_aso : L.ur_auo).format(ok) + suf);
else if (ok) else if (ok)
toast.ok(t, uc.nagtxt = sr ? L.ur_1so : L.ur_1uo); toast.ok(t, uc.nagtxt = (sr ? L.ur_1so : L.ur_1uo) + suf);
else if (ng > 1) else if (ng > 1)
toast.err(t, uc.nagtxt = (sr ? L.ur_asn : L.ur_aun).format(ng)); toast.err(t, uc.nagtxt = (sr ? L.ur_asn : L.ur_aun).format(ng) + suf);
else if (ng) else if (ng)
toast.err(t, uc.nagtxt = sr ? L.ur_1sn : L.ur_1un); toast.err(t, uc.nagtxt = (sr ? L.ur_1sn : L.ur_1un) + suf);
timer.rm(etafun); timer.rm(etafun);
timer.rm(donut.do); timer.rm(donut.do);
@ -2553,9 +2556,15 @@ function up2k_init(subtle) {
if (dir.target) { if (dir.target) {
clmod(obj, 'err', 1); clmod(obj, 'err', 1);
var v = Math.floor(parseInt(obj.value)); var v = Math.floor(parseInt(obj.value));
if (v < 0 || v > 64 || v !== v) if (v < 0 || v !== v)
return; return;
if (v > 64) {
var p = obj.selectionStart;
v = obj.value = 64;
obj.selectionStart = obj.selectionEnd = p;
}
parallel_uploads = v; parallel_uploads = v;
swrite('nthread', v); swrite('nthread', v);
clmod(obj, 'err'); clmod(obj, 'err');