Performance testing upload/download using AntTP

Another problem is if people are not setting up their connection correctly.

People maybe using port forwarding setting in the node by specifying ports to the launchpad or antnode without setting up their router, and/or opening the ports in the firewall.

So while the nodes are part of the network participating in churning etc, they cannot respond to quote requests since they are not receiving them (blocked by router, dropping unsolicited packets). Or their firewall has not opened those ports.

I suspect there maybe a lot of that. And the main way around that is to request quotes from a lot more neighbouring nodes (say 20 in parallel) and take the first ones, trying for 10 quotes per chunk favouring the closer ones, and if only 5 in reasonable time then that is enough. This allows for a 4 to one failure rate.

3 Likes

Shouldn’t such nodes get shunned too? If they can’t respond to requests, surely the network should eject them?

4 Likes

Yes, I wasn’t suggesting otherwise. But to pin it on if upgraded yet or not, then there has to be allowances for nodes of different versions to work together without penality. How far different is the question. Minor upgrade, major upgrade?

Also there has to be an allowance or it would mean every upgrade, minor or major, would break connectivity if newly upgraded nodes shun the ones that have yet to upgrade and the the other way around.

There needs to be some sort of allowances, which was my reason for saying something

6 Likes

Have tweaked my K6 script, to pass the datamap.list that Neo has created, and using your sn_httpd as the ant client is slow to get peers and get going…

./k6 run -d30m -u 80 -i 1000 ./k6-neo-datamap.js

Initially its really impressive, ~ 8-10seconds to download the file, then as more user threads start, the duration steadly increases to around 50seconds, before the ant_httpd returns ;

ERROR autonomi::client::data_types::chunk] Error fetching chunk ChunkAddress(4668a9): Network(GetRecordError(RecordNotFound))

Assuming that the nodes serving the chunk get overwhelmed and just give up.

Internet link only at 10-15% utlization, and cpu around 13%, I’ve been able to push the downloads well over the 140Mb/S

K6 Summary
     checks.........................: 92.63% 905 out of 977
     data_received..................: 9.5 GB 21 MB/s
     data_sent......................: 539 kB 1.2 kB/s
     http_req_blocked...............: avg=52.31µs  min=1.56µs   med=4.55µs   max=19.59ms  p(90)=8.56µs  p(95)=148.68µs
     http_req_connecting............: avg=32.07µs  min=0s       med=0s       max=16.5ms   p(90)=0s      p(95)=88.36µs
     http_req_duration..............: avg=10.52s   min=167.96µs med=695.96µs max=1m0s     p(90)=36.13s  p(95)=47.14s
       { expected_response:true }...: avg=8.89s    min=167.96µs med=656.24µs max=59.49s   p(90)=31.57s  p(95)=39.45s
     http_req_failed................: 3.21%  95 out of 2955
     http_req_receiving.............: avg=2.5ms    min=0s       med=69.36µs  max=111.83ms p(90)=5.66ms  p(95)=9.29ms
     http_req_sending...............: avg=110.95µs min=4.59µs   med=14.84µs  max=16.43ms  p(90)=39.82µs p(95)=78.47µs
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s      p(95)=0s
     http_req_waiting...............: avg=10.52s   min=129.48µs med=589.52µs max=1m0s     p(90)=36.12s  p(95)=47.14s
     http_reqs......................: 2955   6.455401/s
     **iteration_duration.............: avg=32.07s   min=2.45s    med=28.24s   max=1m54s    p(90)=1m1s    p(95)=1m1s**
     iterations.....................: 1000   2.184569/s
     vus............................: 1      min=1          max=80
     vus_max........................: 80     min=80         max=80

.

K6 Output / not complete
INFO[0007] Addr: 8709620be538cc3d1edd9c2c3b554d467dfb690f92315377d27f68b05382fd87, 81-12349-upload.file, 10.00 Mb, 7.24 sec  source=console
INFO[0010] Addr: 77efd739b73eb3329f841d1b769caf1f0121cbca59dca1eafcebfb9ee5902738, 50-12349-upload.file, 10.00 Mb, 10.48 sec  source=console
INFO[0010] Addr: b372014c4f3d908f064722f9429308f6ed96072b4c99f854a0cc19d0401c7999, 224-15384-upload.file, 10.00 Mb, 10.65 sec  source=console
INFO[0012] Addr: 73f7ed391bf034a2e3c714fc95f5ea50e7e30fbba32f4760f6cf90934030d6e7, 12.file, 10.00 Mb, 12.09 sec  source=console
INFO[0013] Addr: 940d1c57172b62402e400ae29891ebc4722f6f4e0986c22587f1920da581f080, 348-20355-upload.file, 10.00 Mb, 13.48 sec  source=console
INFO[0014] Addr: 95dfc5332dc973d404fbeac6673cc5dfad2810747b8e3cf3587f023f9823e4b0, 99-15384-upload.file, 10.00 Mb, 14.78 sec  source=console
INFO[0014] Addr: 95dfc5332dc973d404fbeac6673cc5dfad2810747b8e3cf3587f023f9823e4b0, 99-15384-upload.file, 10.00 Mb, 14.78 sec  source=console
INFO[0015] Addr: c652363e75394bd6d25f29c983a9ab129869926a662854e854d9a3e637199c1c, 8.file, 10.00 Mb, 15.65 sec  source=console
INFO[0017] Addr: 46d2b97891fdc8f4809c561c47abf226883d7cb46b25692b9767b66db10899b6, 9-18281-upload.file, 10.00 Mb, 17.07 sec  source=console
INFO[0017] Addr: 23bf3e37a6c77352f53f73fdf04a83ca829170b70da5928c7d20b256b70869f2, 151-15384-upload.file, 10.00 Mb, 17.23 sec  source=console
INFO[0017] Addr: c324f3c88e360e5246389bd5a317a8ffc8e3141e029aa60bd6eec2c2e69a3433, 51.file, 10.00 Mb, 17.50 sec  source=console
INFO[0018] Addr: 5237c7d43caede2148564058e5d3e6e2cc43641c825677b2b3e9ed5611707eef, 18-12349-upload.file, 10.00 Mb, 18.77 sec  source=console
INFO[0019] Addr: af1a4531bce7bf6f1ae3aff408e9a9635b73f6f9e0c9966d799c08f4fd55d6de, 216-15384-upload.file, 10.00 Mb, 19.59 sec  source=console
INFO[0020] Addr: 602a55d2159f491478bdd49c6a30dc088942d686a396713381ce66a6abc64453, 228-15384-upload.file, 10.00 Mb, 19.96 sec  source=console
INFO[0021] Addr: 7aa437483ea9bf6cd026c838e3001608f9fdf0315bcaf890c5acd5b52ae42364, 12.file, 10.00 Mb, 2.43 sec  source=console
INFO[0022] Addr: 092c4c314a14351effe6da312594927ec5da71fddf53e13eb1c633d3eb6d1eaa, 120-15384-upload.file, 10.00 Mb, 7.41 sec  source=console
INFO[0024] Addr: 35a56c91a932a09fee74ec481fdeebfd5e420b1f8028f7e48f730237cee2943e, 104-15384-upload.file, 10.00 Mb, 23.96 sec  source=console
INFO[0024] Addr: 545f4d3d5ca7e9e82db28136737a128e267c4664a8a44429ebe13d858f3a9429, 266-20355-upload.file, 10.00 Mb, 24.10 sec  source=console
INFO[0024] Addr: 0b2a5cae4ae6abdc726dc768ac2f2c77b999d6cd7c6efc299cee5c606149f546, 13-15384-upload.file, 10.00 Mb, 24.11 sec  source=console
INFO[0024] Addr: fdf38e6dff65b2748ae0efa6e81b658bde14979e6175425d16a81e20f1c90ddf, 107-12349-upload.file, 10.00 Mb, 24.23 sec  source=console
INFO[0025] Addr: 7954cc9f18f4bb070a6834e2aa748df2f01c6cd4c73e6f0f8ca3ddf284673668, 175-15384-upload.file, 10.00 Mb, 25.62 sec  source=console
INFO[0026] Addr: c2e8b9090b7973a7f81ac7618e4082ce6caa81cd614e21b1f44c7020bf7f1f74, 191-15384-upload.file, 10.00 Mb, 26.52 sec  source=console
INFO[0028] Addr: 8917fc150b94844510c1fe3dea0ed446f212e62658cb0c3a79f9e4547953ac23, 108-12349-upload.file, 10.00 Mb, 28.48 sec  source=console
INFO[0028] Addr: b405d5ac0fd15f86331472535dbbda8d4351e99cbc5718e1f3570b33b951cb38, 8.file, 10.00 Mb, 28.91 sec  source=console
INFO[0028] Addr: b405d5ac0fd15f86331472535dbbda8d4351e99cbc5718e1f3570b33b951cb38, 8.file, 10.00 Mb, 28.91 sec  source=console
INFO[0029] Addr: ee0cda630b911497f5d1a00a557f1aa9e6353c995d51016c686482adde2fbb2c, 7-18281-upload.file, 10.00 Mb, 9.74 sec  source=console
INFO[0030] Addr: f061d60bd9c7c3dec25164de2951fd33ae00b72bdd9e4757455f2df4b280aa7e, 12.file, 10.00 Mb, 30.46 sec  source=console
INFO[0031] Addr: 08562f4adf925f5d33e41cebd5a863190a1d7980660a9afa79ffb57e9e3cc762, 80-18281-upload.file, 10.00 Mb, 31.24 sec  source=console
INFO[0031] Addr: 3df1570877680b6a3f7ec77e2a55be3aa9503c61bc5aefaa9f3742caca100b14, 38.file, 10.00 Mb, 21.41 sec  source=console
INFO[0032] Addr: db2e659330d06b1e1b60ad277772e040e521fa262ec2fc11a102ec00a0f7e718, 21.file, 10.00 Mb, 19.31 sec  source=console
INFO[0032] Addr: edf093f1561c5b60bcbe00b97479a00e3286e2a9386abe4484bda9feee449099, 102-15384-upload.file, 10.00 Mb, 17.00 sec  source=console
INFO[0033] Addr: 40b398cf5ba6c44575382c70f9c4cd3eaa9f7218025d9213f6c17e24d1d5b4ac, 55.file, 10.00 Mb, 23.47 sec  source=console
INFO[0033] Addr: 32ad3927f059883e9fb6b7fc7962b41313963d69513e60646083623f4266ff84, 88-12349-upload.file, 10.00 Mb, 25.08 sec  source=console
INFO[0033] Addr: 2fdad7c909d752c2de3d4accd90caa155284e43d06c2d1713e6d731a8d8692b0, 6-15384-upload.file, 10.00 Mb, 20.88 sec  source=console
INFO[0034] Addr: d98de5119c19986ef3d32470f950e7354e350051d307574ed71027b497eb6eb5, 154-20355-upload.file, 10.00 Mb, 22.90 sec  source=console
INFO[0035] Addr: ea84e9aaf4919a2b0e7fa3e825622b160b0593363b2c148cddeba5e039015fbc, 39-15384-upload.file, 10.00 Mb, 35.65 sec  source=console
INFO[0035] Addr: 4291b0873329674267c0a4301d3a8471b7d5a28661d0699cdfc0275dd9cad64a, 15.file, 10.00 Mb, 35.65 sec  source=console
INFO[0035] Addr: 9412a9a73ffd37df7949fe3a49f2f69693a6d5e40d1ef89a1dc4d05421600f34, 36-12349-upload.file, 10.00 Mb, 9.26 sec  source=console
INFO[0036] Addr: caa75eeefce9c8edb964b5c7b6813d45789187cdd9b6f604fc81a07dcf363fbf, 85-15384-upload.file, 10.00 Mb, 6.71 sec  source=console
INFO[0036] Addr: caa75eeefce9c8edb964b5c7b6813d45789187cdd9b6f604fc81a07dcf363fbf, 85-15384-upload.file, 10.00 Mb, 6.73 sec  source=console
INFO[0037] Addr: daa6771dce1a73d6b00361b2bc238f6312d4eb301db359c0cf0b4376984d0c9b, 14.file, 10.00 Mb, 18.06 sec  source=console
INFO[0037] Addr: daa6771dce1a73d6b00361b2bc238f6312d4eb301db359c0cf0b4376984d0c9b, 14.file, 10.00 Mb, 18.07 sec  source=console
INFO[0037] Addr: 8e8c57bd754bce91b82a2ccfbb1745dc7ba3eebc07f7453137d09ac7288bbefe, 55-12349-upload.file, 10.00 Mb, 22.14 sec  source=console
INFO[0038] Addr: 8e8c57bd754bce91b82a2ccfbb1745dc7ba3eebc07f7453137d09ac7288bbefe, 55-12349-upload.file, 10.00 Mb, 23.17 sec  source=console
INFO[0038] Addr: 742af451062969f2816f3dc8ad4205de9a1b04fc15669ae94fdb8f8a816021dd, 88-15384-upload.file, 10.00 Mb, 18.75 sec  source=console
INFO[0038] Addr: 373daba351d250fecee7ff92083db5a8be6fae9a63d3df8797e17847209144fb, 4.file, 10.00 Mb, 4.41 sec  source=console
INFO[0038] Addr: 373daba351d250fecee7ff92083db5a8be6fae9a63d3df8797e17847209144fb, 4.file, 10.00 Mb, 4.42 sec  source=console
INFO[0038] Addr: 4868ea1ff44387374e902e356be2ea3cc2974931935be511e188ee92b3c57a4a, 2.file, 10.00 Mb, 18.72 sec  source=console
INFO[0038] Addr: 4868ea1ff44387374e902e356be2ea3cc2974931935be511e188ee92b3c57a4a, 2.file, 10.00 Mb, 18.73 sec  source=console
INFO[0039] Addr: e2b977afe2a7efcd5963c7ba09b74491a1f13bd89b1fd7ff835f1c71d1f1821a, 152-15384-upload.file, 10.00 Mb, 26.11 sec  source=console
INFO[0039] Addr: 2884668d436095faaeb9c690c5c812bb64bdf8123a6fa00071f27322d35706cf, 31-18281-upload.file, 10.00 Mb, 18.06 sec  source=console
INFO[0039] Addr: b1f027824c56115105f7f985d67c15024dbd9511bcf49d8de4b948e8432538ef, 12-12349-upload.file, 10.00 Mb, 13.38 sec  source=console
INFO[0040] Addr: 05a51dac23f7d25d12f3bafcf2446b8a01ddf3e2fdda07e9d6cdc7b8158fb49e, 56-12349-upload.file, 10.00 Mb, 18.25 sec  source=console
INFO[0040] Addr: 05a51dac23f7d25d12f3bafcf2446b8a01ddf3e2fdda07e9d6cdc7b8158fb49e, 56-12349-upload.file, 10.00 Mb, 15.46 sec  source=console
INFO[0041] Addr: 46c663fd4a37bb1f8d7b6ac5909cd4627a001b25bc3eca13a116328634b82a23, 3.file, 10.00 Mb, 14.44 sec  source=console
INFO[0041] Addr: 1df9012dc450bf51d4942ce24fca51eb04f8f7aded3b013d72bbea5e44bdb7f7, 209-20355-upload.file, 10.00 Mb, 11.27 sec  source=console
INFO[0043] Addr: d98de5119c19986ef3d32470f950e7354e350051d307574ed71027b497eb6eb5, 154-20355-upload.file, 10.00 Mb, 17.86 sec  source=console
INFO[0043] Addr: e8c02933322ae3ce2c1a7015ebe506eedb26c496dfe324ad848fab7ea54bacdb, 214-15384-upload.file, 10.00 Mb, 42.97 sec  source=console
INFO[0043] Addr: e224a2c997749b6a7cbd9bf769de75afba3292433f60a294d25eb6e22aee2759, 41.file, 10.00 Mb, 7.68 sec  source=console
INFO[0043] Addr: 9750046d5e2cb6db6d3d81eaa0f44b909bf9537fa3fee32fcbc9b7e509cf841b, 259-20355-upload.file, 10.00 Mb, 27.64 sec  source=console
INFO[0043] Addr: 86043cf3a42538e08d47efee9ff34340f6630b94fc217e055b773954912a1f25, 33.file, 10.00 Mb, 43.31 sec  source=console
INFO[0043] Addr: ebb1252465360578a71720cbe8b356ad2bc5b5da83bc2eeb55210e398c2e21c7, 18.file, 10.00 Mb, 27.90 sec  source=console
INFO[0043] Addr: ebb1252465360578a71720cbe8b356ad2bc5b5da83bc2eeb55210e398c2e21c7, 18.file, 10.00 Mb, 27.92 sec  source=console
INFO[0043] Addr: f4c2d44a9492cb48e47bba417ec618544d05499dce5d522646905b571fe74cf7, 197-15384-upload.file, 10.00 Mb, 32.36 sec  source=console
INFO[0044] Addr: 55d62c112f8a36985132590ddd9b5e33ffbfba5f50fdf67e95253c7dfca9d843, 62-15384-upload.file, 10.00 Mb, 17.39 sec  source=console
INFO[0044] Addr: b35b71c46e423741e004fc4a32856a4ba1782de829d9bfb3c82b66f0ac9b26d2, 36.file, 10.00 Mb, 7.63 sec  source=console
INFO[0044] Addr: 22da52c3de9fec949d297a2402756e0d1f92adb96221f27d6bb95fe940fc8c07, 150-18281-upload.file, 10.00 Mb, 32.61 sec  source=console
INFO[0044] Addr: ab2208abfdcb2370ead8d6c41c83a33bb04c9c0942f6e9180cd9846b2a64e101, 56.file, 10.00 Mb, 28.30 sec  source=console
INFO[0044] Addr: ab2208abfdcb2370ead8d6c41c83a33bb04c9c0942f6e9180cd9846b2a64e101, 56.file, 10.00 Mb, 28.31 sec  source=console
INFO[0046] Addr: ae79c5ccb6bcfe5cf4cdf145e4dc9d5660d33f69d738b0ddc4822d1bce506f9c, 159-15384-upload.file, 10.00 Mb, 28.28 sec  source=console
INFO[0046] Addr: 42a54079cee206fd41136f909f632f3646412c66bd0a8d67102f9ed8bc9713ad, 63-12349-upload.file, 10.00 Mb, 46.92 sec  source=console
INFO[0047] Addr: 95dfc5332dc973d404fbeac6673cc5dfad2810747b8e3cf3587f023f9823e4b0, 99-15384-upload.file, 10.00 Mb, 11.99 sec  source=console
INFO[0047] Addr: 871364f68f09e23685fd61b45af82404e4078c33d1b34be6718d4a970f2a301a, 81-15384-upload.file, 10.00 Mb, 7.46 sec  source=console
INFO[0047] Addr: 943d2301d4086ac698975b8fdc016ee7e00309803c9f7ab35a1419b24e43ad43, 100-12349-upload.file, 10.00 Mb, 17.90 sec  source=console
INFO[0047] Addr: 2aeae741e32f7d9b028fbd81ef28d5b71b0c52476e3ae9edec2ceed72fa6979b, 51-15384-upload.file, 10.00 Mb, 13.59 sec  source=console
INFO[0047] Addr: 0e0898313bbe413ebae455145aabc762eb87595c877fd5a8e3e2755790225ed8, 8-12349-upload.file, 10.00 Mb, 25.17 sec  source=console
INFO[0047] Addr: 0e0898313bbe413ebae455145aabc762eb87595c877fd5a8e3e2755790225ed8, 8-12349-upload.file, 10.00 Mb, 25.18 sec  source=console
INFO[0048] Addr: ea6bc003929e8ecb63797f1b0fcf2ff647b644c6e89a23c08aade67f6f10ca07, 150-15384-upload.file, 10.00 Mb, 22.83 sec  source=console
INFO[0048] Addr: 9051412a1a1aa827e4dfb15da8c013973a79d8f6246f5318049c214a2b41c209, 66-15384-upload.file, 10.00 Mb, 16.53 sec  source=console
INFO[0048] Addr: 2b5c1d63083dab3fff4d14fb6953d43c6506c8bd6bdf0ea3d5d9e91ab8daa92a, 13.file, 10.00 Mb, 13.87 sec  source=console
INFO[0049] Addr: a3c3fc5d77dad08865193bf1e7c607ec0dceac134d7b8005a8e7d2f9edcb5a7b, 118.file, 10.00 Mb, 6.70 sec  source=console
INFO[0049] Addr: 7fe3fd1aaf3b8479c71c3b4f9cd7eb5d1db0d23d6181d1404cc117d808195212, 76-15384-upload.file, 10.00 Mb, 49.74 sec  source=console
INFO[0049] Addr: 509abf958f8c222e4ce1eca728a2b0b3383f0d1adc9590baf2e219a386c0fc30, 13.file, 10.00 Mb, 23.03 sec  source=console
INFO[0050] Addr: 6396b83260d505acec15a4cf2652bf55447a62fcf6ac792ee5a732ae9527b374, 78-18281-upload.file, 10.00 Mb, 35.48 sec  source=console
INFO[0051] Addr: 6b6e39aed3db3a7c910419e9aa2e7e45f88f404bd68ee3b61474f4bc8644ae6b, 53-18281-upload.file, 10.00 Mb, 23.89 sec  source=console
INFO[0051] Addr: c43ed022873c82ae60bb5d9af2b5c08aa8c23bdb8e1223c96ea1d43c2970eab2, 147-15384-upload.file, 10.00 Mb, 32.85 sec  source=console
INFO[0051] Addr: f85b3adfada5b67221d34d5ce549328157ec3c3d89c3e8181f0ae8d9a484a5a9, 115-15384-upload.file, 10.00 Mb, 13.53 sec  source=console
INFO[0052] Addr: f079312cf0869d5f1846e80a3d3079bc6b8407173c3133492510c975aaf39b29, 19.file, 10.00 Mb, 29.17 sec  source=console
INFO[0052] Addr: eb6b44c392ef48ca11c964f46f9b8197adc4be1cdd27e45bc18d5d02cc5e5f03, 80.file, 10.00 Mb, 37.39 sec  source=console
INFO[0052] Addr: ec71455687e3d51ea2106a4caa474b24c9c0506581bc99203c8b357dd496f28e, 38-12349-upload.file, 10.00 Mb, 18.32 sec  source=console
INFO[0053] Addr: 503ba8dbb7695c24461e45e07ccb74819ddae46b0d354f3f855fc7eb3cbe9581, 233-15384-upload.file, 10.00 Mb, 33.45 sec  source=console
INFO[0054] Addr: f9d0c3b36bc3e7e2036990dc81b554e32a13e4612af603e3c71d6958266d9edd, 14-12349-upload.file, 10.00 Mb, 16.87 sec  source=console
INFO[0054] Addr: 8917fc150b94844510c1fe3dea0ed446f212e62658cb0c3a79f9e4547953ac23, 108-12349-upload.file, 10.00 Mb, 29.76 sec  source=console
INFO[0056] Addr: 6d6a26187bcd67714f6d6b8bed569cb43ba802b3db765f122a0ffce32813b5d6, 1.file, 10.00 Mb, 12.00 sec  source=console
INFO[0056] Addr: bde366c8588fd22e88a28be063954bd730de5eb8a4de201010fb224013c463ba, 53-15384-upload.file, 10.00 Mb, 26.12 sec  source=console
INFO[0056] Addr: d95a5d6546b74793d59d0597462f98a401317a8b117a9eb6c45c5a07a152756e, 52.file, 10.00 Mb, 23.77 sec  source=console
INFO[0056] Addr: d95a5d6546b74793d59d0597462f98a401317a8b117a9eb6c45c5a07a152756e, 52.file, 10.00 Mb, 36.42 sec  source=console
INFO[0058] Addr: 4092b6e947088953f4a84381e880b9d391740c5c08b37c00585d901893af8463, 73-15384-upload.file, 10.00 Mb, 11.89 sec  source=console
INFO[0058] Addr: 9deb01b592a32de51d6c1ab280421d6529ff3f7fb7c96b0afa595113ffd56931, 34-15384-upload.file, 10.00 Mb, 2.12 sec  source=console
INFO[0058] Addr: 9deb01b592a32de51d6c1ab280421d6529ff3f7fb7c96b0afa595113ffd56931, 34-15384-upload.file, 10.00 Mb, 2.13 sec  source=console
INFO[0059] Addr: 210e72dba7f1b7a0f50f92dc7512cf717b9892f8cd03ac73097dabdddf6d5ce4, 7.file, 10.00 Mb, 6.43 sec  source=console
INFO[0059] Addr: c5b5c415e2a3241e8f44af00407a9dbc9b8d172ad81cd4cc08519031f6c55055, 44-12349-upload.file, 10.00 Mb, 8.38 sec  source=console
WARN[0060] Request Failed                                error="Get \"http://localhost:8080/7ebc383f34adcaebcf0c214f2b491c49d434878acbfdc5e64fe9c89797eb2564\": request timeout"
WARN[0060] Request Failed                                error="Get \"http://localhost:8080/1123bd4b79e6f9d3a161a85539be9351ef25273f4d6b7466f6016f5cd4cfa8ff\": request timeout"
ERRO[0060] Error: Cannot read property 'match' of undefined or null  source=console
ERRO[0060] Error: Cannot read property 'match' of undefined or null  source=console
WARN[0060] Request Failed                                error="Get \"http://localhost:8080/bb1c51e56c56e4bcef5ea88c88d38dc06cae82d8ccde9b10348f73d8c3e2ba16\": request timeout"
WARN[0060] Request Failed                                error="Get \"http://localhost:8080/b6b997ef0e3d5ad5edd2b7067e2fbe72ea0d08eb5b3c8f7f7ad8146527f9b65b\": request timeout"
ERRO[0060] Error: Cannot read property 'match' of undefined or null  source=console
ERRO[0060] Error: Cannot read property 'match' of undefined or null  source=console
WARN[0060] Request Failed                                error="Get \"http://localhost:8080/a71f24af15e68240bc55fc8b55448baa77b7357c4a27007b5292c9c7b1bf1c40\": request timeout"
ERRO[0060] Error: Cannot read property 'match' of undefined or null  source=console
WARN[0060] Request Failed                                error="Get \"http://localhost:8080/7ebc383f34adcaebcf0c214f2b491c49d434878acbfdc5e64fe9c89797eb2564\": request timeout"
ERRO[0060] Error: Cannot read property 'match' of undefined or null  source=console
WARN[0060] Request Failed                                error="Get \"http://localhost:8080/f48beb601dac099a11aab31178d491f59a4d3af81c6df8da7a0891539cc239bb\": request timeout"
ERRO[0060] Error: Cannot read property 'match' of undefined or null  source=console
WARN[0060] Request Failed                                error="Get \"http://localhost:8080/10aba9ea7fc87e73678b45e8d01d0b6a5e53e7fcc20b271e4a7a92e1ee986f15/17-12349-upload.file\": request timeout"
ERRO[0060] Name: 17-12349-upload.file, Duration: 60.00 seconds, Download Size: 0 bytes - Error: Download size is less than 1KB  source=console
WARN[0060] Request Failed                                error="Get \"http://localhost:8080/9616630d105c6201d119f6c292f9746139cc494b8242175aa00827a94a0ecc41/28.file\": request timeout"
ERRO[0060] Name: 28.file, Duration: 60.00 seconds, Download Size: 0 bytes - Error: Download size is less than 1KB  source=console
INFO[0061] Addr: dea8ecb2719ebd05a78e23898fdb0d9cd8f157b23d96a8c4b917798c44a8600c, 28-12349-upload.file, 10.00 Mb, 27.74 sec  source=console

.

k6-neo-datamap.js
import { sleep } from 'k6';
import http from 'k6/http';
import { SharedArray } from 'k6/data';
import { check } from 'k6';

const csvData = new SharedArray('data', function () {
    return open('./datamap.list').split('\n').filter(line => !line.startsWith('#') && line.trim() !== '').slice(1);
});

//need to be running an instance on ant_httpd
const SERVER = "http://localhost:8080/";

function getRandomRow() {
    const randomIndex = Math.floor(Math.random() * csvData.length);
    return csvData[randomIndex].split(',');
}

function extractFileName(responseBody) {
    const regex = /<a href="([^"]+)"/;
    const match = responseBody.match(regex);
    return match ? match[1] : null;
}

export default function () {
    try {
        const row = getRandomRow();
        const address = row[0];

        let url = `${SERVER}${address}`;
        let response = http.get(url);

        const name = extractFileName(response.body);
        if (!name || name.length < 3) {
            throw new Error("File name is empty or less than 3 characters");
        }

        url = `${SERVER}${address}/${name}`;

        const start = new Date().getTime();
        response = http.get(url);
        const end = new Date().getTime();
        const duration = (end - start) / 1000;
        const downloadSize = parseInt(response.headers['Content-Length']) || 0;
        const downloadSizeMB = downloadSize / 1048576;

        if (downloadSize < 1024) {
            console.error(`Name: ${name}, Duration: ${duration.toFixed(2)} seconds, Download Size: ${downloadSize} bytes - Error: Download size is less than 1KB`);
            response.status = 501;
        }

        if (response.status !== 200 && response.status !== 501) {
            throw new Error(`Request failed with status: ${response.status}`);
        }

        check(response, {
            'status is 200': (r) => r.status === 200,
        });

        if (response.status === 200) {
            console.log(`Addr: ${address}, ${name}, ${downloadSizeMB.toFixed(2)} Mb, ${duration.toFixed(2)} sec`);
        }

        sleep(1);
    } catch (error) {
        console.error(`Error: ${error.message}`);
    }
}
5 Likes

It is also possible that for one of more files there is some errors in uploading where a chunk was not successfully uploaded. The upload was using the -x option to speed things up, but has the downside that a chunk might not be successfully stored

Be good to know which file so I can remove it from the list if its a problem. My download script cares not if a download error occurs

Those are pretty impressive numbers again! Much higher throughput than what I’ve seen for a while.

Are you still getting the same figures for the other test file with just the images?

I’m still finding the network pretty sluggish for most downloads compared to the final test network. I’m looking forward to the new release later in the week.

1 Like

So, with AntTP running 0.4.3 on localhost, I’m getting some much faster numbers again. Still not as fast as the test nets, but it’s starting to get close again…

$ cat localhost-autonomi-http.js; k6 run -u 10 -i 1000 localhost-autonomi-http.js 
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_QdxdljdwBwR2QbAVr8scuw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_dH5Ce6neTHIfEkAbmsr1BQ.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_pt48p45dQmR5PBW8np1l8Q.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_sWZ4OWGeQjWs6urcPwR6Yw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_ZT6qplX5Yt8PMCUqxq1lFQ.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_SxkGLnSNsMtu0SDrsWW8Wg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_bogEVpJvgx_gMHQoHMoSLg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_LFEyRQMHmxRnZtJwMozW5w.jpeg');
  //http.get('http://vader.lan/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/st-patrick-monument.mp4');
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: localhost-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 730 MB 1.2 MB/s
     data_sent......................: 292 kB 463 B/s
     dropped_iterations.............: 790    1.253966/s
     http_req_blocked...............: avg=12.16µs min=2.12µs   med=5.04µs   max=1.07ms   p(90)=10.05µs p(95)=13.93µs
     http_req_connecting............: avg=1.51µs  min=0s       med=0s       max=433.56µs p(90)=0s      p(95)=0s     
     http_req_duration..............: avg=3.76s   min=928.15ms med=2.02s    max=17.56s   p(90)=10.82s  p(95)=12.04s 
       { expected_response:true }...: avg=3.76s   min=928.15ms med=2.02s    max=17.56s   p(90)=10.82s  p(95)=12.04s 
     http_req_failed................: 0.00%  0 out of 1670
     http_req_receiving.............: avg=1.3ms   min=32.45µs  med=486.37µs max=13.79ms  p(90)=3.91ms  p(95)=5.13ms 
     http_req_sending...............: avg=37.67µs min=7.04µs   med=16.43µs  max=2.42ms   p(90)=38.06µs p(95)=79.57µs
     http_req_tls_handshaking.......: avg=0s      min=0s       med=0s       max=0s       p(90)=0s      p(95)=0s     
     http_req_waiting...............: avg=3.76s   min=927.95ms med=2.02s    max=17.56s   p(90)=10.81s  p(95)=12.04s 
     http_reqs......................: 1670   2.650788/s
     iteration_duration.............: avg=29.72s  min=18.22s   med=29.7s    max=53.32s   p(90)=38.44s  p(95)=46.84s 
     iterations.....................: 200    0.31746/s
     vus............................: 10     min=10        max=10
     vus_max........................: 10     min=10        max=10


running (10m30.0s), 00/10 VUs, 200 complete and 10 interrupted iterations
default ✗ [======>-------------------------------] 10 VUs  10m30.0s/10m0s  0200/1000 shared iters
8 Likes

EDIT: I thought it was speeding up, but I had a different test run in my head! ha! Pretty similar to yesterday, actually.

t$ date; cat localhost-autonomi-http.js; k6 run -u 10 -i 1000 localhost-autonomi-http.js 
Thu  3 Apr 15:29:11 BST 2025
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_QdxdljdwBwR2QbAVr8scuw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_dH5Ce6neTHIfEkAbmsr1BQ.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_pt48p45dQmR5PBW8np1l8Q.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_sWZ4OWGeQjWs6urcPwR6Yw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_ZT6qplX5Yt8PMCUqxq1lFQ.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_SxkGLnSNsMtu0SDrsWW8Wg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_bogEVpJvgx_gMHQoHMoSLg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_LFEyRQMHmxRnZtJwMozW5w.jpeg');
  //http.get('http://vader.lan/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/st-patrick-monument.mp4');
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: localhost-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 558 MB 902 kB/s
     data_sent......................: 222 kB 359 B/s
     dropped_iterations.............: 840    1.35687/s
     http_req_blocked...............: avg=12.36µs min=1.66µs  med=4.43µs   max=2.33ms   p(90)=9.09µs  p(95)=12.68µs
     http_req_connecting............: avg=2.72µs  min=0s      med=0s       max=538.34µs p(90)=0s      p(95)=0s     
     http_req_duration..............: avg=4.83s   min=1.09s   med=2.63s    max=18.39s   p(90)=11.93s  p(95)=12.84s 
       { expected_response:true }...: avg=4.83s   min=1.09s   med=2.63s    max=18.39s   p(90)=11.93s  p(95)=12.84s 
     http_req_failed................: 0.00%  0 out of 1280
     http_req_receiving.............: avg=1.24ms  min=31.38µs med=484.73µs max=16.3ms   p(90)=3.53ms  p(95)=4.64ms 
     http_req_sending...............: avg=41.67µs min=5.64µs  med=14.45µs  max=1.95ms   p(90)=36.36µs p(95)=68.94µs
     http_req_tls_handshaking.......: avg=0s      min=0s      med=0s       max=0s       p(90)=0s      p(95)=0s     
     http_req_waiting...............: avg=4.83s   min=1.09s   med=2.63s    max=18.39s   p(90)=11.92s  p(95)=12.84s 
     http_reqs......................: 1280   2.067612/s
     iteration_duration.............: avg=38.69s  min=15.93s  med=35.97s   max=1m25s    p(90)=48.97s  p(95)=1m25s  
     iterations.....................: 160    0.258451/s
     vus............................: 10     min=10        max=10
     vus_max........................: 10     min=10        max=10


running (10m19.1s), 00/10 VUs, 160 complete and 0 interrupted iterations
default ✗ [=====>--------------------------------] 10 VUs  10m19.1s/10m0s  0160/1000 shared iters

Well, a bit later in the day and it is faster now… ha! So, it is varying a bit:

$ date; cat localhost-autonomi-http.js; k6 run -u 10 -i 1000 localhost-autonomi-http.js 
Thu  3 Apr 16:19:19 BST 2025
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_QdxdljdwBwR2QbAVr8scuw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_dH5Ce6neTHIfEkAbmsr1BQ.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_pt48p45dQmR5PBW8np1l8Q.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_sWZ4OWGeQjWs6urcPwR6Yw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_ZT6qplX5Yt8PMCUqxq1lFQ.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_SxkGLnSNsMtu0SDrsWW8Wg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_bogEVpJvgx_gMHQoHMoSLg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_LFEyRQMHmxRnZtJwMozW5w.jpeg');
  //http.get('http://vader.lan/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/st-patrick-monument.mp4');
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: localhost-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 1.0 GB 1.7 MB/s
     data_sent......................: 416 kB 681 B/s
     dropped_iterations.............: 700    1.145032/s
     http_req_blocked...............: avg=7.08µs  min=1.69µs   med=4.08µs   max=505.02µs p(90)=7.32µs  p(95)=10.04µs
     http_req_connecting............: avg=807ns   min=0s       med=0s       max=402.07µs p(90)=0s      p(95)=0s     
     http_req_duration..............: avg=2.54s   min=952.87ms med=1.72s    max=11.8s    p(90)=6.23s   p(95)=6.57s  
       { expected_response:true }...: avg=2.54s   min=952.87ms med=1.72s    max=11.8s    p(90)=6.23s   p(95)=6.57s  
     http_req_failed................: 0.00%  0 out of 2400
     http_req_receiving.............: avg=1.06ms  min=28.2µs   med=411.04µs max=10.44ms  p(90)=3.15ms  p(95)=4.06ms 
     http_req_sending...............: avg=26.86µs min=5.78µs   med=13.02µs  max=2.81ms   p(90)=29.55µs p(95)=46.39µs
     http_req_tls_handshaking.......: avg=0s      min=0s       med=0s       max=0s       p(90)=0s      p(95)=0s     
     http_req_waiting...............: avg=2.54s   min=952.81ms med=1.72s    max=11.8s    p(90)=6.23s   p(95)=6.56s  
     http_reqs......................: 2400   3.925825/s
     iteration_duration.............: avg=20.37s  min=11.81s   med=19.47s   max=30.65s   p(90)=25.72s  p(95)=27.58s 
     iterations.....................: 300    0.490728/s
     vus............................: 10     min=10        max=10
     vus_max........................: 10     min=10        max=10


running (10m11.3s), 00/10 VUs, 300 complete and 0 interrupted iterations
default ✗ [==========>---------------------------] 10 VUs  10m11.3s/10m0s  0300/1000 shared iters
2 Likes
2025.1.2.13: 31.34482759%
2025.1.2.12: 6.13793103%
2025.1.2.11: 57.70689655%
2025.1.2.6: 3.58620690%
old: 1.22413793%

Hopefully your numbers will get better as more people get on 2025.1.2.13. We seem to have stalled at ~30% for about 24 hours or so now.

10 Likes

31% is way better than the previous release. Last I saw it was under 2%.

I wonder why this is picking up so fast, at least to start.

2 Likes

The 2025.1.2.12 release didn’t actually contain an update for the node. There was a new binary built with a different package version, but there were no changes. It remained on 0.3.8. Some people must be downloading the binary from the Github release, because you wouldn’t get that binary if you were going via antctl.

Also, I think the numbers we have now are much more accurate, so it’s hard to tell what the state of play really was before the 2025.1.2.13 release.

8 Likes

Getting faster!

$ date; cat localhost-autonomi-http.js; k6 run -u 10 -i 1000 localhost-autonomi-http.js 
Mon  7 Apr 08:34:06 BST 2025
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_QdxdljdwBwR2QbAVr8scuw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_dH5Ce6neTHIfEkAbmsr1BQ.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_pt48p45dQmR5PBW8np1l8Q.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_sWZ4OWGeQjWs6urcPwR6Yw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_ZT6qplX5Yt8PMCUqxq1lFQ.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_SxkGLnSNsMtu0SDrsWW8Wg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_bogEVpJvgx_gMHQoHMoSLg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_LFEyRQMHmxRnZtJwMozW5w.jpeg');
  //http.get('http://vader.lan/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/st-patrick-monument.mp4');
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: localhost-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 1.3 GB 2.2 MB/s
     data_sent......................: 527 kB 869 B/s
     dropped_iterations.............: 620    1.020981/s
     http_req_blocked...............: avg=8.37µs  min=1.76µs   med=4.9µs    max=1.37ms   p(90)=8.26µs  p(95)=11.09µs
     http_req_connecting............: avg=626ns   min=0s       med=0s       max=343.47µs p(90)=0s      p(95)=0s     
     http_req_duration..............: avg=1.99s   min=739.09ms med=1.57s    max=8.11s    p(90)=3.24s   p(95)=6.2s   
       { expected_response:true }...: avg=1.99s   min=739.09ms med=1.57s    max=8.11s    p(90)=3.24s   p(95)=6.2s   
     http_req_failed................: 0.00%  0 out of 3040
     http_req_receiving.............: avg=1.06ms  min=25.84µs  med=448.77µs max=9.36ms   p(90)=3.06ms  p(95)=3.92ms 
     http_req_sending...............: avg=31.14µs min=5.74µs   med=15.36µs  max=6.27ms   p(90)=29.61µs p(95)=44.55µs
     http_req_tls_handshaking.......: avg=0s      min=0s       med=0s       max=0s       p(90)=0s      p(95)=0s     
     http_req_waiting...............: avg=1.99s   min=738.98ms med=1.57s    max=8.11s    p(90)=3.24s   p(95)=6.2s   
     http_reqs......................: 3040   5.006102/s
     iteration_duration.............: avg=15.98s  min=10.31s   med=15.19s   max=24.03s   p(90)=22.4s   p(95)=23.91s 
     iterations.....................: 380    0.625763/s
     vus............................: 10     min=10        max=10
     vus_max........................: 10     min=10        max=10


running (10m07.3s), 00/10 VUs, 380 complete and 0 interrupted iterations
default ✗ [=============>------------------------] 10 VUs  10m07.3s/10m0s  0380/1000 shared iters
10 Likes

Latest run was similarly quick too:

EDIT: Note that this includes an AntTP change which streams all files, in addition to those with RANGE requests. For localhost, the end result is similar, but for public instances, it reduces the latency (from autonomi → AntTP → client), as chunks are sent (in order) as soon as they arrive from the Autonomi library.

$ date; cat localhost-autonomi-http.js; k6 run -u 10 -i 1000 localhost-autonomi-http.js 
Fri 11 Apr 11:01:11 BST 2025
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_QdxdljdwBwR2QbAVr8scuw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_dH5Ce6neTHIfEkAbmsr1BQ.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_pt48p45dQmR5PBW8np1l8Q.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_sWZ4OWGeQjWs6urcPwR6Yw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_ZT6qplX5Yt8PMCUqxq1lFQ.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_SxkGLnSNsMtu0SDrsWW8Wg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_bogEVpJvgx_gMHQoHMoSLg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_LFEyRQMHmxRnZtJwMozW5w.jpeg');
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: localhost-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 1.3 GB 2.1 MB/s
     data_sent......................: 500 kB 830 B/s
     dropped_iterations.............: 640    1.06312/s
     http_req_blocked...............: avg=8.32µs   min=1.66µs   med=5.3µs    max=776.85µs p(90)=10.48µs  p(95)=13.63µs 
     http_req_connecting............: avg=595ns    min=0s       med=0s       max=270.8µs  p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=2.09s    min=714.56ms med=1.38s    max=15.81s   p(90)=2.98s    p(95)=5.94s   
       { expected_response:true }...: avg=2.09s    min=714.56ms med=1.38s    max=15.81s   p(90)=2.98s    p(95)=5.94s   
     http_req_failed................: 0.00%  0 out of 2880
     http_req_receiving.............: avg=1.65s    min=405.38ms med=968.24ms max=15.52s   p(90)=2.52s    p(95)=5.59s   
     http_req_sending...............: avg=31.92µs  min=6.11µs   med=16.28µs  max=2.1ms    p(90)=37.32µs  p(95)=56.97µs 
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=433.09ms min=163.32ms med=416.33ms max=1s       p(90)=610.21ms p(95)=655.58ms
     http_reqs......................: 2880   4.784039/s
     iteration_duration.............: avg=16.72s   min=8.79s    med=14.94s   max=26.8s    p(90)=25.53s   p(95)=26.03s  
     iterations.....................: 360    0.598005/s
     vus............................: 10     min=10        max=10
     vus_max........................: 10     min=10        max=10


running (10m02.0s), 00/10 VUs, 360 complete and 0 interrupted iterations
default ✗ [============>-------------------------] 10 VUs  10m02.0s/10m0s  0360/1000 shared iters
7 Likes

I tried using 3 medium sized video files to see how that is looking now. It has a much higher throughput and I’m wondering if my wifi may be bottlenecking now. I’ll have to do a run plugged in! ha!

Note that those are megabytes - that’s 220 mbit/s! :exploding_head:

$ cat localhost-large-autonomi-http.js; k6 run -u 10 -i 1000 localhost-large-autonomi-http.js
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/91d16e58e9164bccd29a8fd8d25218a61d8253b51c26119791b2633ff4f6b309/to-autonomi.mp4');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/st-patrick-monument.mp4');
  http.get('http://localhost:8080/b6ec9f0f84cf6236dc42d3624679649f51024a57a58b2805552bb3aa690244dd/newcastle-promenade.mp4');
}

/\      Grafana   /‾‾/  
/\  /  \     |\  __   /  /   
/  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
/ __________ \  |_|\_\  \_____/

execution: local
script: localhost-large-autonomi-http.js
output: -

    scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
* default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


data_received..................: 17 GB 28 MB/s
data_sent......................: 60 kB 97 B/s
dropped_iterations.............: 880   1.42613/s
http_req_blocked...............: avg=45.68µs min=2.84µs  med=11.21µs  max=1.64ms   p(90)=35.65µs  p(95)=48.21µs
http_req_connecting............: avg=22.87µs min=0s      med=0s       max=1.35ms   p(90)=0s       p(95)=0s
http_req_duration..............: avg=17.13s  min=2.23s   med=11.99s   max=40.66s   p(90)=32.76s   p(95)=38.21s
{ expected_response:true }...: avg=17.13s  min=2.23s   med=11.99s   max=40.66s   p(90)=32.76s   p(95)=38.21s
http_req_failed................: 0.00% 0 out of 360
http_req_receiving.............: avg=15.44s  min=1.15s   med=10.29s   max=40.47s   p(90)=32.54s   p(95)=37.86s
http_req_sending...............: avg=66.51µs min=11.09µs med=38.22µs  max=640.58µs p(90)=127.49µs p(95)=168.42µs
http_req_tls_handshaking.......: avg=0s      min=0s      med=0s       max=0s       p(90)=0s       p(95)=0s
http_req_waiting...............: avg=1.69s   min=10.81ms med=514.21ms max=13.56s   p(90)=5.42s    p(95)=12.93s
http_reqs......................: 360   0.583417/s
iteration_duration.............: avg=51.42s  min=41.84s  med=50.18s   max=1m10s    p(90)=1m1s     p(95)=1m10s
iterations.....................: 120   0.194472/s
vus............................: 10    min=10       max=10
vus_max........................: 10    min=10       max=10


running (10m17.1s), 00/10 VUs, 120 complete and 0 interrupted iterations
default ✗ [===>----------------------------------] 10 VUs  10m17.1s/10m0s  0120/1000 shared iters
12 Likes

220 Mbit/s is some serious good numbers for a decentralized network, very acceptable speeds. 25-50 Mbit/s would be very good, anything above that is excellent in my book.

10 Likes

On the smaller file test, some further gains today too.

I’ve also made some (unreleased) optimisations to AntTP, which should be helping here too:

$ cat localhost-autonomi-http.js; k6 run -u 10 -i 1000 localhost-autonomi-http.js
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_QdxdljdwBwR2QbAVr8scuw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_dH5Ce6neTHIfEkAbmsr1BQ.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_pt48p45dQmR5PBW8np1l8Q.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_sWZ4OWGeQjWs6urcPwR6Yw.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_ZT6qplX5Yt8PMCUqxq1lFQ.png');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_SxkGLnSNsMtu0SDrsWW8Wg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_bogEVpJvgx_gMHQoHMoSLg.jpeg');
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_LFEyRQMHmxRnZtJwMozW5w.jpeg');
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: localhost-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 1.9 GB 3.2 MB/s
     data_sent......................: 763 kB 1.3 kB/s
     dropped_iterations.............: 450    0.744449/s
     http_req_blocked...............: avg=7.73µs   min=1.52µs   med=4.49µs   max=1.15ms   p(90)=8.05µs   p(95)=11.46µs
     http_req_connecting............: avg=483ns    min=0s       med=0s       max=560.98µs p(90)=0s       p(95)=0s     
     http_req_duration..............: avg=1.37s    min=637.41ms med=1.11s    max=17.3s    p(90)=1.78s    p(95)=2.24s  
       { expected_response:true }...: avg=1.37s    min=637.41ms med=1.11s    max=17.3s    p(90)=1.78s    p(95)=2.24s  
     http_req_failed................: 0.00%  0 out of 4400
     http_req_receiving.............: avg=890.62ms min=405.67ms med=688.58ms max=17.17s   p(90)=1.12s    p(95)=1.37s  
     http_req_sending...............: avg=27.06µs  min=5.11µs   med=14.85µs  max=1.31ms   p(90)=32.11µs  p(95)=49.59µs
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s     
     http_req_waiting...............: avg=483.03ms min=107.4ms  med=405.61ms max=10.78s   p(90)=723.74ms p(95)=851.5ms
     http_reqs......................: 4400   7.27906/s
     iteration_duration.............: avg=10.99s   min=7.16s    med=9.36s    max=30.22s   p(90)=14.47s   p(95)=20.94s 
     iterations.....................: 550    0.909882/s
     vus............................: 10     min=10        max=10
     vus_max........................: 10     min=10        max=10


running (10m04.5s), 00/10 VUs, 550 complete and 0 interrupted iterations
default ✗ [===================>------------------] 10 VUs  10m04.5s/10m0s  0550/1000 shared iters
2 Likes

From doing some digging, this actually looks like there is some caching within the library helping out here too. Adding more simultaneous clients results in a higher bandwidth to the client, but little difference across my router.

I don’t think it is AntTP doing it, as each request is mostly isolated, but there is a shared library between the connections. I’d like to understand some more though. It only seems to apply when there are lots of connections asking for exactly the same chunk, at about the same time, too.

I’ll do some testing with a variety of concurrent connections to see how that looks too. I suspect the caching is short lived, as the next iteration is regular speed again.

5 Likes

Did another couple of runs today to see how we are looking with the latest versions of AntTP and antnode running.

The regular ‘100-200kb’ file size test:

$ cat ~/dev/anttp/test/performance/src/localhost-autonomi-http.js; k6 run -u 10 -i 1000 ~/dev/anttp/test/performance/src/localhost-autonomi-http.js
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_QdxdljdwBwR2QbAVr8scuw.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_dH5Ce6neTHIfEkAbmsr1BQ.jpeg', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_pt48p45dQmR5PBW8np1l8Q.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_sWZ4OWGeQjWs6urcPwR6Yw.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_ZT6qplX5Yt8PMCUqxq1lFQ.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_SxkGLnSNsMtu0SDrsWW8Wg.jpeg', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_bogEVpJvgx_gMHQoHMoSLg.jpeg', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_LFEyRQMHmxRnZtJwMozW5w.jpeg', { timeout: '600s' });
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: /home/paul/dev/anttp/test/performance/src/localhost-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 1.6 GB 2.7 MB/s
     data_sent......................: 639 kB 1.1 kB/s
     dropped_iterations.............: 540    0.899195/s
     http_req_blocked...............: avg=7.49µs   min=1.16µs   med=3.89µs   max=1.42ms  p(90)=11.27µs  p(95)=17.04µs 
     http_req_connecting............: avg=362ns    min=0s       med=0s       max=161.3µs p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=1.63s    min=729.16ms med=1.51s    max=4.9s    p(90)=2.33s    p(95)=2.77s   
       { expected_response:true }...: avg=1.63s    min=729.16ms med=1.51s    max=4.9s    p(90)=2.33s    p(95)=2.77s   
     http_req_failed................: 0.00%  0 out of 3680
     http_req_receiving.............: avg=960.63ms min=250.81ms med=893.35ms max=3.38s   p(90)=1.41s    p(95)=1.73s   
     http_req_sending...............: avg=41.38µs  min=4.47µs   med=13.5µs   max=1.43ms  p(90)=59.85µs  p(95)=140.96µs
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s      p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=671.07ms min=293.85ms med=571.02ms max=3.01s   p(90)=988.09ms p(95)=1.28s   
     http_reqs......................: 3680   6.127848/s
     iteration_duration.............: avg=13.05s   min=9.36s    med=12.81s   max=16.55s  p(90)=14.96s   p(95)=15.79s  
     iterations.....................: 460    0.765981/s
     vus............................: 10     min=10        max=10
     vus_max........................: 10     min=10        max=10


running (10m00.5s), 00/10 VUs, 460 complete and 0 interrupted iterations
default ✗ [================>---------------------] 10 VUs  10m00.5s/10m0s  0460/1000 shared iters

Which is actually a little slower than a couple of weeks ago (2.7 MB/s vs 3.2 MB/s), but in a similar ball park. 1.6s average download time per file, and min of 730ms is pretty decent too.

Then for the medium (3MB, 40MB, 100MB files):

$ cat ~/dev/anttp/test/performance/src/localhost-large-autonomi-http.js; k6 run -u 10 -i 1000 ~/dev/anttp/test/performance/src/localhost-large-autonomi-http.js 
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/91d16e58e9164bccd29a8fd8d25218a61d8253b51c26119791b2633ff4f6b309/to-autonomi.mp4', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/st-patrick-monument.mp4', { timeout: '600s' });
  http.get('http://localhost:8080/b6ec9f0f84cf6236dc42d3624679649f51024a57a58b2805552bb3aa690244dd/newcastle-promenade.mp4', { timeout: '600s' });
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: /home/paul/dev/anttp/test/performance/src/localhost-large-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 23 GB 38 MB/s
     data_sent......................: 79 kB 130 B/s
     dropped_iterations.............: 840   1.380376/s
     http_req_blocked...............: avg=19.4µs   min=1.18µs  med=8.53µs   max=565.65µs p(90)=27.86µs  p(95)=42.74µs 
     http_req_connecting............: avg=4.16µs   min=0s      med=0s       max=283.26µs p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=12.67s   min=1.97s   med=10.17s   max=27.43s   p(90)=23.93s   p(95)=24.8s   
       { expected_response:true }...: avg=12.67s   min=1.97s   med=10.17s   max=27.43s   p(90)=23.93s   p(95)=24.8s   
     http_req_failed................: 0.00% 0 out of 480
     http_req_receiving.............: avg=12.04s   min=1.57s   med=9.54s    max=26.84s   p(90)=23.37s   p(95)=24.38s  
     http_req_sending...............: avg=216.22µs min=5.46µs  med=25.89µs  max=36.23ms  p(90)=104.78µs p(95)=193.4µs 
     http_req_tls_handshaking.......: avg=0s       min=0s      med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=632.92ms min=215.7ms med=492.15ms max=3.93s    p(90)=748.59ms p(95)=967.08ms
     http_reqs......................: 480   0.788786/s
     iteration_duration.............: avg=38.03s   min=34.43s  med=37.26s   max=51.45s   p(90)=40.92s   p(95)=51.45s  
     iterations.....................: 160   0.262929/s
     vus............................: 10    min=10       max=10
     vus_max........................: 10    min=10       max=10


running (10m08.5s), 00/10 VUs, 160 complete and 0 interrupted iterations
default ✗ [=====>--------------------------------] 10 VUs  10m08.5s/10m0s  0160/1000 shared iters

Those results are certainly more impressive and may reflect some of the gains in AntTP streaming, as well as the network as a whole. Regardless, 38 MB / 300 Mbit is mighty impressive and is probably reaching what my wifi can do where I sit. As before, it should be noted that the Autonomi library appears to be doing some caching, which may be amplifying the throughput, but the wifi was pushing 20-30 MB from system monitor.

For completeness, I tried the same test above with 1 client (instead of 10) to view the impact:

$ cat ~/dev/anttp/test/performance/src/localhost-large-autonomi-http.js; k6 run -u 1 -i 1000 ~/dev/anttp/test/performance/src/localhost-large-autonomi-http.js 
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/91d16e58e9164bccd29a8fd8d25218a61d8253b51c26119791b2633ff4f6b309/to-autonomi.mp4', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/st-patrick-monument.mp4', { timeout: '600s' });
  http.get('http://localhost:8080/b6ec9f0f84cf6236dc42d3624679649f51024a57a58b2805552bb3aa690244dd/newcastle-promenade.mp4', { timeout: '600s' });
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: /home/paul/dev/anttp/test/performance/src/localhost-large-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 1 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 1 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 2.9 GB 4.6 MB/s
     data_sent......................: 9.9 kB 16 B/s
     dropped_iterations.............: 980    1.555554/s
     http_req_blocked...............: avg=16.98µs  min=2.84µs   med=4.23µs   max=737.13µs p(90)=5.33µs  p(95)=7.13µs 
     http_req_connecting............: avg=1.64µs   min=0s       med=0s       max=97.15µs  p(90)=0s      p(95)=0s     
     http_req_duration..............: avg=10.65s   min=1.89s    med=7.15s    max=32.53s   p(90)=21.53s  p(95)=24.15s 
       { expected_response:true }...: avg=10.65s   min=1.89s    med=7.15s    max=32.53s   p(90)=21.53s  p(95)=24.15s 
     http_req_failed................: 0.00%  0 out of 59
     http_req_receiving.............: avg=10.03s   min=1.44s    med=6.74s    max=31.46s   p(90)=20.72s  p(95)=22.88s 
     http_req_sending...............: avg=24.8µs   min=11.51µs  med=15.25µs  max=523.37µs p(90)=21.17µs p(95)=24.85µs
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s      p(95)=0s     
     http_req_waiting...............: avg=620.79ms min=300.28ms med=518.62ms max=1.79s    p(90)=1.06s   p(95)=1.11s  
     http_reqs......................: 59     0.093651/s
     iteration_duration.............: avg=31.5s    min=25.59s   med=30.41s   max=43.13s   p(90)=39.79s  p(95)=41.26s 
     iterations.....................: 19     0.030159/s
     vus............................: 1      min=1       max=1
     vus_max........................: 1      min=1       max=1


running (10m30.0s), 0/1 VUs, 19 complete and 1 interrupted iterations
default ✗ [--------------------------------------] 1 VUs  10m30.0s/10m0s  0019/1000 shared iters

While 4.6 MB is not as quick, it’s still about 37 Mbit and pretty impressive for a single client!

I’ll try plugging directly into the router later to see if I can get some figures without wifi in the way for the larger files.

10 Likes

With the latest version rolling out further, I thought I’d give it another test:

$ cat ~/dev/anttp/test/performance/src/localhost-autonomi-http.js; k6 run -u 10 -i 1000 ~/dev/anttp/test/performance/src/localhost-autonomi-http.js
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_QdxdljdwBwR2QbAVr8scuw.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_dH5Ce6neTHIfEkAbmsr1BQ.jpeg', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_pt48p45dQmR5PBW8np1l8Q.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_sWZ4OWGeQjWs6urcPwR6Yw.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_ZT6qplX5Yt8PMCUqxq1lFQ.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_SxkGLnSNsMtu0SDrsWW8Wg.jpeg', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_bogEVpJvgx_gMHQoHMoSLg.jpeg', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_LFEyRQMHmxRnZtJwMozW5w.jpeg', { timeout: '600s' });
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: /home/paul/dev/anttp/test/performance/src/localhost-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 2.8 GB 4.7 MB/s
     data_sent......................: 1.1 MB 1.9 kB/s
     dropped_iterations.............: 190    0.3162/s
     http_req_blocked...............: avg=6.56µs   min=1.4µs   med=4.08µs   max=752.72µs p(90)=11.05µs  p(95)=14.19µs 
     http_req_connecting............: avg=252ns    min=0s      med=0s       max=223.98µs p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=927.15ms min=356.1ms med=860.09ms max=2.85s    p(90)=1.41s    p(95)=1.68s   
       { expected_response:true }...: avg=927.15ms min=356.1ms med=860.09ms max=2.85s    p(90)=1.41s    p(95)=1.68s   
     http_req_failed................: 0.00%  0 out of 6480
     http_req_receiving.............: avg=621.6ms  min=223.8ms med=564.47ms max=2.5s     p(90)=1.03s    p(95)=1.25s   
     http_req_sending...............: avg=29.02µs  min=4.98µs  med=14.22µs  max=7.31ms   p(90)=39.44µs  p(95)=60.47µs 
     http_req_tls_handshaking.......: avg=0s       min=0s      med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=305.52ms min=38.6ms  med=289.13ms max=1.11s    p(90)=507.56ms p(95)=610.88ms
     http_reqs......................: 6480   10.784096/s
     iteration_duration.............: avg=7.41s    min=5.83s   med=7.14s    max=13.38s   p(90)=8.33s    p(95)=10.05s  
     iterations.....................: 810    1.348012/s
     vus............................: 10     min=10        max=10
     vus_max........................: 10     min=10        max=10


running (10m00.9s), 00/10 VUs, 810 complete and 0 interrupted iterations
default ✗ [=============================>--------] 10 VUs  10m00.9s/10m0s  0810/1000 shared iters

I think that is the fastest run yet and we’re starting to be comparable with the beta network!

While 4.7 MB/s (38 Mbit/s) is pretty impressive for these average (100-300kb) files, 925ms average download time is very nice indeed!

IIRC, we got to around 850ms in beta, with a few thousand nodes. We’re now getting the same sort of results with millions of nodes!

Improvements to AntTP may have played a role in this too, but the major changes are to the Autonomi Network. Well done team!

What does this mean? Under 1s starts to open the door to all sorts of content rich websites. Combined with some nice caching and some optimisations in archive format (e.g. tarchive and it should be a very smooth browsing experience!

17 Likes

In case anyone was wondering, the network is still just as fast as before, if not faster.

I did a few runs and I was reliably getting 800+ iterations with the standard test data set. The best was this one with 850, with an average latency of 890ms! :smiling_face_with_sunglasses:

$ cat ~/dev/anttp/test/performance/src/localhost-autonomi-http.js; k6 run -u 10 -i 1000 ~/dev/anttp/test/performance/src/localhost-autonomi-http.js
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_QdxdljdwBwR2QbAVr8scuw.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_dH5Ce6neTHIfEkAbmsr1BQ.jpeg', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_pt48p45dQmR5PBW8np1l8Q.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_sWZ4OWGeQjWs6urcPwR6Yw.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_ZT6qplX5Yt8PMCUqxq1lFQ.png', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_SxkGLnSNsMtu0SDrsWW8Wg.jpeg', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_bogEVpJvgx_gMHQoHMoSLg.jpeg', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/1_LFEyRQMHmxRnZtJwMozW5w.jpeg', { timeout: '600s' });
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: /home/paul/dev/anttp/test/performance/src/localhost-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 3.0 GB 4.9 MB/s
     data_sent......................: 1.2 MB 1.9 kB/s
     dropped_iterations.............: 150    0.247673/s
     http_req_blocked...............: avg=7.78µs   min=1.25µs   med=4.34µs   max=2.02ms   p(90)=11.25µs  p(95)=16.28µs 
     http_req_connecting............: avg=300ns    min=0s       med=0s       max=257.54µs p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=890.49ms min=488.54ms med=829.99ms max=2.69s    p(90)=1.19s    p(95)=1.32s   
       { expected_response:true }...: avg=890.49ms min=488.54ms med=829.99ms max=2.69s    p(90)=1.19s    p(95)=1.32s   
     http_req_failed................: 0.00%  0 out of 6800
     http_req_receiving.............: avg=523.08ms min=274.37ms med=458.33ms max=1.94s    p(90)=791.08ms p(95)=890.04ms
     http_req_sending...............: avg=39.73µs  min=5.11µs   med=14.47µs  max=4.33ms   p(90)=54.33µs  p(95)=114.26µs
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=367.36ms min=156.32ms med=343.25ms max=2.06s    p(90)=499.77ms p(95)=558.8ms 
     http_reqs......................: 6800   11.227844/s
     iteration_duration.............: avg=7.12s    min=6s       med=6.98s    max=9.91s    p(90)=7.8s     p(95)=8.53s   
     iterations.....................: 850    1.403481/s
     vus............................: 10     min=10        max=10
     vus_max........................: 10     min=10        max=10


running (10m05.6s), 00/10 VUs, 850 complete and 0 interrupted iterations
default ✗ [===============================>------] 10 VUs  10m05.6s/10m0s  0850/1000 shared iters

For the large data set:

$ cat ~/dev/anttp/test/performance/src/localhost-large-autonomi-http.js; k6 run -u 10 -i 1000 ~/dev/anttp/test/performance/src/localhost-large-autonomi-http.js
import http from 'k6/http';

export default function () {
  http.get('http://localhost:8080/91d16e58e9164bccd29a8fd8d25218a61d8253b51c26119791b2633ff4f6b309/to-autonomi.mp4', { timeout: '600s' });
  http.get('http://localhost:8080/cec7a9eb2c644b9a5de58bbcdf2e893db9f0b2acd7fc563fc849e19d1f6bd872/st-patrick-monument.mp4', { timeout: '600s' });
  http.get('http://localhost:8080/b6ec9f0f84cf6236dc42d3624679649f51024a57a58b2805552bb3aa690244dd/newcastle-promenade.mp4', { timeout: '600s' });
}

         /\      Grafana   /‾‾/  
    /\  /  \     |\  __   /  /   
   /  \/    \    | |/ /  /   ‾‾\ 
  /          \   |   (  |  (‾)  |
 / __________ \  |_|\_\  \_____/ 

     execution: local
        script: /home/paul/dev/anttp/test/performance/src/localhost-large-autonomi-http.js
        output: -

     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):
              * default: 1000 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)


     data_received..................: 29 GB 47 MB/s
     data_sent......................: 99 kB 160 B/s
     dropped_iterations.............: 800   1.291995/s
     http_req_blocked...............: avg=23.32µs  min=1.45µs   med=12.26µs max=724.4µs  p(90)=37.36µs  p(95)=47.35µs 
     http_req_connecting............: avg=4.2µs    min=0s       med=0s      max=288.43µs p(90)=0s       p(95)=0s      
     http_req_duration..............: avg=10.31s   min=1.22s    med=8.23s   max=26.04s   p(90)=21.24s   p(95)=22.43s  
       { expected_response:true }...: avg=10.31s   min=1.22s    med=8.23s   max=26.04s   p(90)=21.24s   p(95)=22.43s  
     http_req_failed................: 0.00% 0 out of 600
     http_req_receiving.............: avg=9.84s    min=802.38ms med=7.79s   max=25.52s   p(90)=20.74s   p(95)=21.95s  
     http_req_sending...............: avg=442.21µs min=5.65µs   med=36.27µs max=96.49ms  p(90)=116.77µs p(95)=193.05µs
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s      max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=476.77ms min=196.4ms  med=440.4ms max=1.07s    p(90)=681.93ms p(95)=815.23ms
     http_reqs......................: 600   0.968996/s
     iteration_duration.............: avg=30.95s   min=27.12s   med=30.81s  max=34.33s   p(90)=33.21s   p(95)=33.89s  
     iterations.....................: 200   0.322999/s
     vus............................: 10    min=10       max=10
     vus_max........................: 10    min=10       max=10


running (10m19.2s), 00/10 VUs, 200 complete and 0 interrupted iterations
default ✗ [======>-------------------------------] 10 VUs  10m19.2s/10m0s  0200/1000 shared iters

Looking at the throughput, we’re up on before by a fair margin - 47 MB/s (375 Mbit/s)!

I was curious to see what that looked like through my router, and it was a similar ballpark. I’m assuming the difference is due to the data being compressed on download from Autonomi. There may also be some caching going on in the library, but pure guessing there!

Note that about 55 Mbit/s is autonomi nodes… so it’s about 185 Mbit/s for this traffic. It’s a bit rough, but gives us some confirmation at least.

16 Likes