--- title: Prestandamätningar nav: How it works output: benchmarks/index.html description: Varsto uppmätt mellan Paris, Amsterdam och Warszawa den 9 och 10 oktober 2026, och från en hemanslutning bakom NAT: nedladdningar peer-to-peer från en annan enhet jämförda med samma nedladdningar från en S3-bucket, med metod, rådata, de åtgärder körningarna ledde till och deras begränsningar. ---
En enhet i Paris har filerna. Enheter i Amsterdam och Warszawa ansluter till valvet med en tom mapp och laddar ned allt: en gång direkt från enheten i Paris och från varandra (peer-to-peer), en gång från en S3-bucket i Paris. Uppmätt den 9 och 10 oktober 2026 på hyrda molnmaskiner.
Den här sidan redovisar vad som mättes, hur, vad som begränsade det och vad som ändrades i Varsto till följd av det. Alla planerade fall har nu siffror, från två körningar vardera om inte en tabell säger annat. Siffrorna gäller en alfaversion: de beskriver koden som den såg ut de dagarna. Sedan 0.0.1-alpha.11 delas stora filer upp i större block (i genomsnitt 1 MiB från 32 MiB, 4 MiB från 1 GiB), så blockantalen här gäller inte längre för dem. Mätskriptet finns i repositoryt under scripts/bench/, och de sammanfattade resultaten publiceras som JSON, så att varje siffra på sidan kan kontrolleras och körningen upprepas.
Körningarna ovan är mellan datacenter med publika adresser. Dessa är från ett hem: en stationär dator på en konsumentanslutning på 100 Mbit/s bakom routerns NAT, med Varsto installerat så som en användare installerar det (Linux-paketet, en bakgrundstjänst för användaren). Två molnmaskiner anslöt till den: en i Amsterdam med publik adress, och en i Warszawa med två enheter i nätverksnamnrymder bakom NAT, en bakom en kon-NAT (Linux MASQUERADE behåller porten) och en bakom en symmetrisk NAT (MASQUERADE med slumpmässiga portar, vilket omintetgör hålslagning). Liksom ovan innehöll bucketen i Paris bara liggaren och fillistorna: före varje hämtning raderades dess block, så att varje block måste komma från en annan enhet, och varje fil kontrollerades mot sin SHA-256. Mätskriptet är scripts/nat-test/home-nat.py.
| Hemdatorn och | Rundresa | TCP, en ström, till hemmet | TCP, en ström, från hemmet |
|---|---|---|---|
| Amsterdam | 31 ms | 9.1 MB/s | 12.1 MB/s |
| Warszawa | 21 ms | 10.6 MB/s | 11.9 MB/s |
| Bucketen (Paris), rclone, 256 MiB | – | 7.5 MB/s | 4.3 MB/s |
100 Mbit/s är högst 12.5 MB/s, så det är taket för allt på den här linjen.
STUN klassade hemroutern som en kon-NAT. Varje överföring flyttade en fil på 64 MiB med slumpmässiga byte; vid den storleken utgör den fasta kostnaden för en synkronisering (liggare och fillista i bucketen) en stor del av tiden.
| Från | Till | Väg som mottagaren använde | Tid | Hastighet |
|---|---|---|---|---|
| Hemmet | Amsterdam (publik) | direkt, in genom hemmets NAT | 12.2 s | 5.5 MB/s |
| Amsterdam | Hemmet | direkt | 14.3 s | 4.7 MB/s |
| Warszawa, kon-NAT | Hemmet | direkt, NAT till NAT (hålslagning) | 13.3 s | 5.0 MB/s |
| Hemmet | Warszawa, kon-NAT | direkt, NAT till NAT | 14.5 s | 4.6 MB/s |
| Warszawa, symmetrisk NAT | Hemmet | via relä i Amsterdam | 65.7 s | 1.0 MB/s |
| Hemmet | Warszawa, symmetrisk NAT | via relä i Amsterdam | 65.3 s | 1.0 MB/s |
Varje väg fungerade så som designen säger: direkt där en NAT behåller sin mappning, via ett relä genom en av användarens egna nåbara enheter där den inte gör det. Ingen leverantörsserver var inblandad; enheterna hittade varandra genom poster i bucketen och publika STUN-servrar.


En fil på 512 MiB med slumpmässiga byte per överföring, enbart peer-to-peer. Första kolumnen är version 0.0.1-alpha.9 med reläåtgärden nedan; den andra lägger till samma dags ändringar i nedladdningen (anslutningar hålls öppna per enhet, objekt skickas utan att komprimeras på nytt, ett fönster som anpassar sig mellan 8 och 32 block).
| Överföring | Före ändringarna | Med ändringarna | Andel av en TCP-ström | Andel av 100 Mbit/s |
|---|---|---|---|---|
| Amsterdam → hemmet | 4.7 MB/s | 8.0 MB/s | 88 % | 64 % |
| Warszawa (kon-NAT) → hemmet | 6.9 MB/s | 9.3 MB/s | 88 % | 74 % |
| Hemmet → Amsterdam | 8.7 MB/s | 9.3 MB/s | 77 % | 74 % |
| Hemmet → Warszawa (kon-NAT) | – | 8.6 MB/s | 72 % | 69 % |
En andra enhet på hemdatorn, med peer-to-peer avstängt, hämtade en fil på 512 MiB som en server just hade laddat upp till bucketen, över samma linje.
| Skriven av | Från bucketen | Peer-to-peer (ovan) | Peer-to-peer var |
|---|---|---|---|
| Amsterdam | 6.1 MB/s | 8.0 MB/s | 1.3 gånger så snabb |
| Warszawa (kon-NAT) | 5.2 MB/s | 9.3 MB/s | 1.8 gånger så snabb |
Mellan datacenter hänger bucketen med, eftersom bucketen och maskinerna sitter på samma snabba stamnät. Från ett hem är bucketen ytterligare ett avlägset steg med sin egen kostnad per begäran, medan en annan enhet skickar rakt ned i linjen.
Begränsningar: en hemanslutning, en eftermiddag, en körning per fall (en upprepning av Warszawa till hemmet under skärmbilden gick i 5.2 MB/s, med Amsterdam tillfälligt onåbart); NAT i Warszawa är Linux egen, inte en konsumentrouters; servrarna var små (Scaleway DEV1-M). Ändringarna i nedladdningen granskas och är ännu inte släppta.
| Datamängd | Från bucketen (S3) | Peer-to-peer |
|---|---|---|
| Stora filer (2 × 2 GiB) | Amsterdam, Warszawa, båda samtidigt (9 okt) | Amsterdam, Warszawa (9 okt); båda samtidigt (10 okt) |
| Många små filer (10 000) | Amsterdam, Warszawa, båda samtidigt (10 okt; körningarna från 9 okt behålls som ”före förhandshämtning”) | Amsterdam, Warszawa, båda samtidigt (10 okt) |
| Komprimerbar text (512 MiB) | Amsterdam, Warszawa (9 okt); båda samtidigt (10 okt) | Amsterdam, Warszawa, båda samtidigt (10 okt) |
| Skrivarens uppladdning | 2 körningar per mängd, en varje dag | RAM-disk: 2 körningar per mängd; lokal disk: 1 körning per mängd |
Två körningar per fall; tiderna i tabellerna är deras median (medelvärdet av två), med båda körningarna bredvid. Enskilda körningar anges som sådana. Mellan de två dagarna ändrades nedladdningskoden bara på sätt som inte berör de jämförda fallen: körningarna med stora filer och text den 9 oktober hämtar block inom en fil exakt som versionen från den 10 oktober gör, och bucketkörningarna med många små filer upprepades den 10 oktober eftersom förhandshämtning över filgränserna är ny. De två sista fallen, komprimerbar text peer-to-peer och många små filer från bucketen, båda med två läsare samtidigt, kördes tre timmar efter de andra på nya maskiner med den sammanslagna versionen; bucketen var tydligt snabbare under den sessionen än under den tidigare.
37bee19 (bucketkörningar: 0180ca8, som bara skiljer sig i peer-to-peer-servern och filbevakaren). 10 oktober: commit 9b93263 för peer-to-peer-körningarna; dagens tidigare bucketkörningar använde a3ba1c0, som bara skiljer sig i ordningen mellan peer-to-peer-vägarna; de två fall som kördes sist använde den sammanslagna versionen dc09721, samma kod som 9b93263 för dessa körningar.POST /api/sync). Tiden räknas från den begäran till svaret: fillistan läses, varje block hämtas, kontrolleras mot sin hash, dekrypteras, kontrolleras mot chunk-id:t och skrivs. Efteråt jämför mätskriptet en SHA-256-lista över mappen med skrivarens. Sedan tas enheten bort igen. Automatisk verifiering var avstängd på alla mätenheter, eftersom den laddar ned och reparerar block i bakgrunden.| Mellan | Rundresa (ping) | TCP, en ström (iperf3, Paris skickar), 9 / 10 okt | TCP, fyra strömmar |
|---|---|---|---|
| Paris – Amsterdam | 9.4 ms | 925 / 958 Mbit/s | 875 / 836 Mbit/s |
| Paris – Warszawa | 33.4 ms | 738 / 777 Mbit/s | 949 / 909 Mbit/s |
| Amsterdam – Warszawa | 20.6 ms | – | – |
| Läsare | S3: ett objekt på 256 MiB, en ström (rclone), 9 / 10 okt | S3: objekt på 4 KiB efter varandra, 9 / 10 okt |
|---|---|---|
| Paris | 91 / 59 MB/s | 7 / 45 ms styck |
| Amsterdam | 26 / 21 MB/s | 16 / 107 ms styck |
| Warszawa | 52 / 15 MB/s | 52 / 122 ms styck |
Förbindelserna mellan maskinerna klarade 700 till 950 Mbit/s (90 till 120 MB/s) i en TCP-ström, och ingen av Varstos överföringar kom i närheten: alla begränsades av rundresor och arbete per begäran. Bucketens egen hastighet varierade mycket från en dag till nästa (den andra mätningen gjordes tidigt på morgonen); dess körningar varierade genomgående mer än peer-to-peer-körningarna.
Varsto frågar andra enheter först och lagringsplatser i andra hand, så en peer-to-peer-mätning måste se till att bucketen inte kan hjälpa till. När skrivaren hade laddat upp och bucketkörningarna var klara raderades varje objekt under chunks/ från bucketen. Bucketen behöll det som enheterna behöver för att hitta varandra och veta vad som finns (signerad liggare, fillistor, enhets- och peer-poster), men inget filinnehåll: ett block som ingen enhet kunde leverera skulle ha gjort filen otillgänglig. Sedan:
/api/p2p/traffic) och skrivarens stämde överens: med en läsare tog läsaren emot exakt datamängdens lagrade storlek från writer-paris och skrivaren skickade lika mycket; med två läsare blev det som var och en tog emot från Paris och från den andra läsaren tillsammans den lagrade storleken, och enheten i Paris skickade resten;| Körning | Nedladdade chunks | Från andra enheter | Från S3 | Väg |
|---|---|---|---|---|
| filer, Amsterdam, ensam (×2) | 20 240 | 20 240 | 0 | writer-paris: direkt |
| filer, Amsterdam, båda samtidigt (×2) | 20 240 | 20 240 | 0 | waw-p2p-files-ams+waw-1: direkt, writer-paris: direkt |
| filer, Warszawa, båda samtidigt (×2) | 20 240 | 20 240 | 0 | : direkt, ams-p2p-files-ams+waw-2: , writer-paris: direkt |
| filer, Warszawa, ensam (×2) | 20 240 | 20 240 | 0 | writer-paris: direkt |
| stora, Amsterdam, ensam (×2) | 26 946 | 26 946 | 0 | writer-paris: direkt |
| stora, Amsterdam, båda samtidigt (×2) | 26 758 | 26 758 | 0 | : direkt, writer-paris: direkt |
| stora, Warszawa, båda samtidigt (×2) | 26 758 | 26 758 | 0 | ams-p2p-large-ams+waw-1: direkt, ams-p2p-large-ams+waw-2: direkt, writer-paris: direkt |
| stora, Warszawa, ensam (×2) | 26 946 | 26 946 | 0 | writer-paris: direkt |
| text, Amsterdam, ensam (×2) | 3 544 | 3 544 | 0 | writer-paris: direkt |
| text, Amsterdam, båda samtidigt (×2) | 3 544 | 3 544 | 0 | : direkt, writer-paris: direkt |
| text, Warszawa, båda samtidigt (×2) | 3 544 | 3 544 | 0 | ams-p2p-text-ams+waw-1: direkt, writer-paris: direkt |
| text, Warszawa, ensam (×2) | 3 544 | 3 544 | 0 | writer-paris: direkt |
4 GiB i två filer, slumpmässigt innehåll, så zstd lagrar det som det är.
Peer-to-peer (från skrivaren i Paris) S3-bucket i Paris (MB/s, mer är bättre)
| Läsare | Peer-to-peer: tid | MB/s | S3: tid | MB/s | P2P mot S3 |
|---|---|---|---|---|---|
| Amsterdam, ensam | 159 s (158 s / 161 s) | 27.0 | 180 s (171 s / 190 s) | 23.9 | 1.1× snabbare |
| Warszawa, ensam | 423 s (420 s / 426 s) | 10.2 | 190 s (155 s / 226 s) | 23.4 | 2.2× långsammare |
| Amsterdam, båda samtidigt | 162 s (162 s / 161 s) | 26.6 | 95 s (90 s / 101 s) | 45.2 | 1.7× långsammare |
| Warszawa, båda samtidigt | 365 s (367 s / 362 s) | 11.8 | 208 s (185 s / 232 s) | 20.9 | 1.8× långsammare |
| Version | Läsare | Tid | MB/s |
|---|---|---|---|
| Peer-to-peer med QUIC provat före TCP (en anslutning per enhet), 10 oktober | Amsterdam, ensam | 230 s (229 s / 230 s) | 18.7 |
| Peer-to-peer med QUIC provat före TCP (en anslutning per enhet), 10 oktober | Warszawa, ensam | 466 s (466 s) | 9.2 |
Till Amsterdam, nio millisekunder bort, slog peer-to-peer bucketen med liten marginal och var betydligt jämnare: varje peer-to-peer-körning tog 158 s till 162 s, bucketens 171 s och 190 s. Till Warszawa var bucketen mer än dubbelt så snabb. Varje block på omkring 300 KiB är en HTTP-begäran på en ny TCP-anslutning: en handskakning, sedan TCP slow start från tio paket, så ett block behöver flera rundresor hur snabb förbindelsen än är. Vid 33 ms begränsar det åtta samtidiga begäranden till ungefär 10 MB/s, vilket är just vad som uppmättes. Bucketens HTTPS-anslutningar hålls öppna mellan begärandena.
Med båda läsarna samtidigt hämtade Warszawa 2.97 GB av sina 4.30 GB från Amsterdam (20 ms bort, närmare än Paris) och bara 1.3 GB från Paris; Amsterdam, som hade blocken först, levererade dem medan det laddade ned. Warszawa var till och med lite snabbare än ensamt (11.8 mot 10.2 MB/s) och Amsterdam lika snabbt som ensamt. Bucketen betjänade också två läsare samtidigt utan att någon av dem blev långsammare (45 och 21 MB/s); den är delad infrastruktur byggd för många läsare.
Läsarens eget arbete: omkring 40 s CPU-tid för 4 GiB (dekryptering, två hashar per block, skrivning), högst 490 MB minne. Enheten i Paris använde 40 s CPU-tid för att leverera varje 4 GiB, en kärna ungefär till en fjärdedel upptagen.
10 000 filer på 1 KiB till 256 KiB. Varje fil är ett block. Sedan den 10 oktober hämtar en hämtning blocken för upp till 32 kommande filer tillsammans, åtta begäranden åt gången, innan de skrivs en och en.
Peer-to-peer (från skrivaren i Paris) S3-bucket i Paris (filer/s, mer är bättre)
| Läsare | Peer-to-peer: tid | MB/s | filer/s | S3: tid | MB/s | filer/s | P2P mot S3 |
|---|---|---|---|---|---|---|---|
| Amsterdam, ensam | 111 s (111 s / 111 s) | 2.6 | 90.2 | 299 s (323 s / 274 s) | 1.0 | 33.7 | 2.7× snabbare |
| Warszawa, ensam | 260 s (258 s / 263 s) | 1.1 | 38.4 | 294 s (269 s / 320 s) | 1.0 | 34.2 | 1.1× snabbare |
| Amsterdam, båda samtidigt | 156 s (202 s / 110 s) | 2.1 | 70.3 | 156 s (142 s / 170 s) | 1.9 | 64.7 | 1.0× snabbare |
| Warszawa, båda samtidigt | 259 s (265 s / 253 s) | 1.1 | 38.6 | 192 s (161 s / 223 s) | 1.6 | 53.5 | 1.3× långsammare |
| Version | Läsare | Tid | MB/s | filer/s |
|---|---|---|---|---|
| S3 före förhandshämtning över filgränserna (en fil i taget), 9 oktober | Amsterdam, ensam | 404 s (313 s / 495 s) | 0.8 | 26.1 |
| S3 före förhandshämtning över filgränserna (en fil i taget), 9 oktober | Amsterdam, båda samtidigt | 381 s (381 s / 380 s) | 0.8 | 26.2 |
| S3 före förhandshämtning över filgränserna (en fil i taget), 9 oktober | Warszawa, båda samtidigt | 528 s (494 s / 563 s) | 0.6 | 19.1 |
| S3 före förhandshämtning över filgränserna (en fil i taget), 9 oktober | Warszawa, ensam | 596 s (536 s / 655 s) | 0.5 | 16.9 |
Till Amsterdam levererade peer-to-peer 90 filer i sekunden, 2.7 gånger bucketens 34. Till Warszawa, tre och en halv gånger längre bort, kom båda upp i samma 34 till 38 filer i sekunden: där dominerar rundresan per begäran, på båda vägarna. Förhandshämtning över filgränserna fördubblade bucketens hastighet till Warszawa (från 17 till 34 filer i sekunden) och hjälpte till Amsterdam (26 till 34). När blocken väl är på plats kostar skrivningen av varje fil (data synkade till disk, ett namnbyte, händelser i liggaren) några millisekunder på dessa nätverksblockvolymer, vilket begränsar varje källa till några hundra filer i sekunden.
Med båda läsarna samtidigt var Warszawa lika snabbt som ensamt, och Amsterdams två körningar skilde sig åt (202 s och 110 s): läsarnas block hämtas från den enhet som svarar först, och den ena körningen väntade mer på den andra läsaren än den andra körningen gjorde. Bucketen, uppmätt med båda läsarna tre timmar senare, levererade 64 filer i sekunden till Amsterdam och 53 till Warszawa: nästan dubbelt så mycket som den gav enskilda läsare i den tidigare sessionen. Dess hastighet beror mer på tiden på dygnet än på antalet läsare.
512 MiB loggrader, lagrade som 138 MiB. Färre byte färdas, så en läsare får mer fil per sekund än med slumpmässiga data.
Peer-to-peer (från skrivaren i Paris) S3-bucket i Paris (MB/s, mer är bättre)
| Läsare | Peer-to-peer: tid | MB/s | S3: tid | MB/s | P2P mot S3 |
|---|---|---|---|---|---|
| Amsterdam, ensam | 32 s (33 s / 31 s) | 16.7 | 36 s (21 s / 52 s) | 18.1 | 1.1× snabbare |
| Warszawa, ensam | 74 s (70 s / 79 s) | 7.2 | 32 s (32 s / 32 s) | 16.7 | 2.3× långsammare |
| Amsterdam, båda samtidigt | 32 s (32 s / 31 s) | 16.9 | 31 s (23 s / 39 s) | 18.4 | 1.0× långsammare |
| Warszawa, båda samtidigt | 66 s (63 s / 69 s) | 8.1 | 63 s (28 s / 98 s) | 12.3 | 1.0× långsammare |
Här var bucketen lite snabbare till Amsterdam och mer än dubbelt så snabb till Warszawa. Med båda läsarna samtidigt gav peer-to-peer Amsterdam samma 16.9 MB/s som ensamt och Warszawa 8.1 MB/s, något mer än ensamt; i den första av de två körningarna hämtade Warszawa två tredjedelar av sina block från Amsterdam, i den andra alla från Paris. En enhet som levererar ett block behåller inte den komprimerade kopian: den läser den okomprimerade filen och komprimerar blocket på nytt, med zstd nivå 12, för varje begäran; enheten i Paris använde 31 s CPU-tid per levererade 512 MiB, mot 40 s för 4 GiB slumpmässiga data. Bucketen returnerar det lagrade objektet som det är.
Innan något kan laddas ned delar skrivaren upp sina filer i block, komprimerar, krypterar och lagrar dem. Tre destinationer visar var tiden går: en RAM-disk (bara Varstos eget arbete), maskinens disk (en nätverksblockvolym, där varje objekt skrivs med en synkning till disk) och bucketen.
| Datamängd | Destination | Version | Tid | MB/s | CPU (användare + system) | Minnestopp |
|---|---|---|---|---|---|---|
| filer: 10 000 filer, 0.27 GiB | RAM-disk (tmpfs) | uppmätt version | 50 s (median av 2) | 5.9 | 12 s (5 + 7) | 68 MiB |
| filer: 10 000 filer, 0.27 GiB | S3-bucket, samma region | uppmätt version | 652 s (median av 2) | 0.5 | 21 s (8 + 13) | 69 MiB |
| små: 50 000 filer, 1.36 GiB | RAM-disk (tmpfs) | uppmätt version | 255 s (median av 2) | 5.7 | 62 s (27 + 35) | 258 MiB |
| små: 50 000 filer, 1.36 GiB | Lokal disk (nätverksblockvolym) | uppmätt version | 468 s | 3.1 | 67 s (27 + 41) | 258 MiB |
| små: 50 000 filer, 1.36 GiB | Lokal disk (nätverksblockvolym) | alpha.8 (före zstd-åtgärden) | 515 s | 2.8 | 109 s (31 + 78) | 253 MiB |
| stora: 2 filer, 4.00 GiB | S3-bucket, samma region | uppmätt version | 932 s (median av 2) | 4.6 | 80 s (37 + 43) | 108 MiB |
| mycket stora: 5 filer, 12.00 GiB | Lokal disk (nätverksblockvolym) | uppmätt version | 418 s | 30.9 | 197 s (85 + 112) | 147 MiB |
| mycket stora: 5 filer, 12.00 GiB | Lokal disk (nätverksblockvolym) | alpha.8 (före zstd-åtgärden) | 694 s | 18.6 | 483 s (110 + 373) | 137 MiB |
| text: 128 filer, 0.50 GiB | RAM-disk (tmpfs) | uppmätt version | 45 s (median av 2) | 12.0 | 44 s (41 + 2) | 68 MiB |
| text: 128 filer, 0.50 GiB | Lokal disk (nätverksblockvolym) | uppmätt version | 56 s | 9.6 | 45 s (42 + 3) | 68 MiB |
| text: 128 filer, 0.50 GiB | Lokal disk (nätverksblockvolym) | alpha.8 (före zstd-åtgärden) | 68 s | 7.9 | 56 s (43 + 13) | 68 MiB |
| text: 128 filer, 0.50 GiB | S3-bucket, samma region | uppmätt version | 145 s (median av 2) | 3.7 | 45 s (41 + 4) | 77 MiB |
Mätningen var också en jakt på flaskhalsar. Dessa ändringar finns i de uppmätta versionerna, var och en med ett test:
| Problem | Åtgärd | Före | Efter |
|---|---|---|---|
| En nedladdning hämtade ett block i taget: varje block väntade en hel rundresa innan nästa begärdes. | Upp till åtta block i en fil samtidigt på väg, från andra enheter eller lagringsplatser, i ett glidande fönster; de kontrolleras och skrivs fortfarande i ordning. S3-klienten håller tillräckligt många vilande anslutningar för dem. | Text från bucketen till Warszawa: 122 s (4.4 MB/s) | 27.8 s (19.4 MB/s), 4.4 gånger snabbare (enskilda körningar; steg på vägen: fasta omgångar om åtta 104 s, med vilande anslutningar kvar 61 s) |
| Små filer gick en i taget: varje fil är ett block, så fönstret ovan gällde aldrig. | En hämtning hämtar blocken för upp till 32 kommande filer med ett block var tillsammans (10 okt). | 10 000 filer från bucketen till Warszawa: 596 s (17 filer/s) | 294 s (34 filer/s) |
| Peer-to-peer-servern för HTTP besvarade en begäran i taget, så åtta samtidiga begäranden köade hos servern. | Åtta begäranden besvaras samtidigt. | Stora filer peer-to-peer till Amsterdam: 363 s (11.8 MB/s), en körning | 159 s (27.0 MB/s) |
| En ny zstd-kontext skapades för varje block; dess tabeller allokerades och nollställdes varje gång, vilket var mer arbete än att komprimera blocket. | En kontext per tråd som återanvänds (utdata är identiska byte för byte, vilket ett test kontrollerar). | 12 GiB till lokal disk: 694 s, 483 s CPU | 418 s, 197 s CPU (enskilda körningar) |
| S3-klienten vägrade alla svar över 10 MiB. Efter en uppladdning av några tusen filer var liggarens batch 13 MB, och ingen annan enhet kunde ansluta eller synkronisera. | Svar på upp till 2 GiB läses. | Anslutningen misslyckades | Anslutningen fungerar; test med ett objekt på 12 MiB |
| Bakgrundstjänsten behandlade varje öppnad fil som en ändring: att leverera block till andra enheter, ett säkerhetskopieringsverktyg eller ett filvisningsprogram startade en fullständig synkronisering med några sekunders mellanrum. | Att öppna och läsa är inga ändringar; att stänga en fil som öppnats för skrivning är det fortfarande. | 90 synkroniseringar på 11 minuter medan filer lästes | Läsning av alla 10 000 filer: ingen extra synkronisering |
| Samtidiga begäranden öppnade var och en sin egen QUIC-anslutning till en enhet som de ännu inte hade någon anslutning till. | Ett anslutningsförsök per adress; de andra väntar och delar på det (ett test kontrollerar en enda anslutning för en hel hämtning). | Hittat vid test av QUIC (nedan) | |
| En kvarhållen QUIC-anslutning till en enhet som hade startats om fick varje begäran över den att misslyckas, och enheten föll permanent tillbaka till nästa väg. | Anslut på nytt en gång och fråga igen. | Hittat vid test av QUIC (nedan) | |
| Begäranden som blev klara på en gammal väg kunde ångra ett byte till en bättre väg som en annan begäran just hade gjort. | Ett sent svar behåller den aktuella vägen. | Hittat vid test av QUIC (nedan) | |
Eftersom TCP-vägen öppnar en anslutning per block såg QUIC ut som botemedlet: Varsto talar redan QUIC med enheter bakom NAT, med en anslutning per enhet och en ström per begäran. Den 10 oktober ändrades vägordningen så att QUIC provas före TCP för adresser utanför det lokala nätverket. Det var långsammare på dessa maskiner och använde mer än dubbelt så mycket CPU-tid:
| Stora filer, peer-to-peer | TCP först (behållet) | QUIC först (återställt) |
|---|---|---|
| Amsterdam | 159 s, 27.0 MB/s; läsaren 38 s CPU, Paris 40 s | 230 s, 18.7 MB/s (229 s / 230 s); läsaren 98 s CPU, Paris 88 s |
| Warszawa | 423 s, 10.2 MB/s | 466 s, 9.2 MB/s (en körning); läsaren 130 s CPU |
Så TCP förblir förstahandsvalet och QUIC är fortsatt vägen genom NAT. Var QUIC-vägen förlorar sin tid hann inte utredas; värden tappade inga UDP-paket. Experimentet avslöjade också en brist som ännu inte är åtgärdad: en enhets peer-tabell byggs innan en synkronisering läser enhetsregistret, så en enhet som just har anslutit nekas över QUIC av de andra enheterna fram till deras nästa synkronisering (över TCP betjänas den direkt).
rclone serve s3 över samma förbindelse) från 41.5 till 45.5 och från 39.1 till 52.8 MB/s (medelvärden av två körningar). Detta är lokala mätningar, inte en upprepning av körningarna ovan; mätskriptet är scripts/bench/netem-local.sh.Varsto använder båda med avsikt, och mätningarna visar varför.
Scaleways publika prislista (läst den 9 oktober 2026, regionen Paris, exklusive moms): Object Storage Standard Multi-AZ €0.000022 per GB-timme (omkring €0.016 per GB-månad), begäranden ingår, inkommande trafik ingår, utgående trafik gratis för de första 75 GB i månaden och därefter €0.01 per GB. Överföringar mellan regioner (Paris – Amsterdam, Paris – Warszawa) räknas som utgående trafik; inom en region är de gratis.
En läsare i Amsterdam som laddar ned mängden på 4 GiB från bucketen i Paris kostar alltså omkring €0.04 när de fria 75 GB är förbrukade, och ett hushåll som synkroniserar 500 GB i månaden till enheter utanför bucketens region betalar omkring €4 i månaden för utgående trafik. Peer-to-peer flyttar samma byte över enheternas egna anslutningar och lägger inget till lagringsräkningen. Andra leverantörer tar mer betalt för utgående trafik eller per begäran; metoden ovan gäller för dem oförändrad. Maskinerna för den här mätningen (tre instanser à €0.147 i timmen, omkring sju och en halv timme under de två dagarna) kostade omkring €3.50.
Upprepa: scripts/bench/p2p-bench.py skapar maskinerna och bucketen med Scaleways kommandoradsverktyg, kör varje steg, skriver results.jsonl och raderar allt igen; report.py och page.py gör om resultaten till sammanfattningen och tabellerna på den här sidan.