Hello everyone,
I’ve been experimenting with upload and download configurations for Storj in recent days. I’ve read the post on transfer optimization (Hotrodding Decentralized Storage) and followed most of the recommendations. However, I’ve run into some strange behavior that I’d like to ask about.
I’ve been running some benchmarks uploading different combinations of files from my PC to Storj. These include some general cases: many small files (200x1 MB), a few medium-sized files (10x1 GB), a single large file (1x10 GB) and a mixture of file sizes. My PC has 10 CPUs, 64 GB of memory, and an upload bandwidth of 40 Mbit/s.
I would like to ask about two specific phenomena I’ve observed:
1. Slow upload speeds
For the small file test I’ve configured both Rclone and Uplink in the same way, allowing 10 parallel transfers and a segment concurrency of 1 (since the files are all smaller than 64 MB). I know that uploads via Uplink are subject to the 2.68x expansion factor and I expected them to be significantly slower than uploads via Rclone through the S3 gateway.
But in practice, uploading 200 small files took not just 2.68x or even 5x but almost 20x longer! All the while, CPU use in Uplink was hovering around 20-30% with low memory use since the files are so small. The upload bandwidth usage was fluctuating a lot, going from full use (close to 40 Mbit/s) down to maybe 5-10 Mbit/s, then up again etc. I’d estimate the average bandwidth used was maybe ~15-20 Mbit/s – if that. I also noticed that performance was varying quite a bit between re-runs with the upload process sometimes taking around 12 minutes, other times over 15 minutes. I was not running any other uploads in the background that would affect the speed in such a significant way.
I cannot see any obvious bottleneck here so I’m really at a loss why Uplink is so extremely inefficient. When uploading larger files, the difference in speed was not nearly as dramatic. Rclone was effectively maxing out my upload bandwidth and hit approximately the maximum upload speed possible through my connection. Uplink was still slower but by only ~30%, indicating that the upload bandwidth was the main bottleneck here. I cannot verify if the performance difference would be larger if my upload connection was faster but I suspect so.
2. Errors when uploading
I was also running into plenty of errors and issues when performing uploads via Uplink, esp. those that took a longer time and/or contained many files. There were warnings that parts could not be uploaded, the necessary minimum number of segments not being reached etc. It was so problematic that sometimes as much as 15 % of files were not uploaded correctly. This has never happened with Rclone. No matter what I upload via Rclone, as long as the process isn’t crashing entirely for whatever reason, Rclone never misses even a single file.
What is the reason for this and how can I alleviate it?
Thank you in advance!