[GH-ISSUE #183] ParallelMultipartUploadRequest suffers from head of line blocking #100

Closed
opened 2026-03-04 01:42:08 +03:00 by kerem · 1 comment
Owner

Originally created by @gaul on GitHub (May 4, 2015).
Original GitHub issue: https://github.com/s3fs-fuse/s3fs-fuse/issues/183

s3fs issues multipart uploads in batches (defaulting to 5) and does not issue the next batch until the current one completes. If ones of these uploads completes slowly, it blocks subsequent uploads and hurts performance. Instead of the blocking curlmulti.Request call, s3fs should issue subsequent uploads as soon as previous ones complete.

Originally created by @gaul on GitHub (May 4, 2015). Original GitHub issue: https://github.com/s3fs-fuse/s3fs-fuse/issues/183 s3fs issues multipart uploads in batches (defaulting to 5) and does not issue the next batch until the current one completes. If ones of these uploads completes slowly, it blocks subsequent uploads and hurts performance. Instead of the blocking `curlmulti.Request` call, s3fs should issue subsequent uploads as soon as previous ones complete.
kerem closed this issue 2026-03-04 01:42:08 +03:00
Author
Owner

@deguich commented on GitHub (Mar 17, 2016):

Hi,

Indeed, It seems s3fs is like s3cmd, it don't really multi-thread request to S3 server. S3 Server log (a ceph radosgw) show upload of multipart chunk one by one. It's a real great oportunity to increase performance of s3fs.

Here is an example with s3fs :

s3fs BUCKET /mnt/BUCKET -o use_path_request_style,url=URL_TO_RADOSGW,parallel_count=50,multipart_size=50,ensure_diskfree=0,use_cache=/mnt/RAMDISK
time cp /root/fich_4G.iso /mnt/BUCKET
cp /root/fich_4G.iso /mnt/BUCKET 0.16s user 24.32s system 14% cpu 2:44.00 total

fich_4G is 3788Mo.
3788/164 = 23Mo/s

With multithread, it's possible to up to the radosgw limit
Uploading example with radula (multithreading python boto wrapper) :

radula put fich_4G.iso BUCKET
2016-03-17 16:13:28,936 INFO:radula: CHUNKS: 40 parts x 100.00 MB
BUCKET/fich_4G.iso
2016-03-17 16:13:28,974 INFO:radula: Initializing Multipart upload
2016-03-17 16:13:29,027 INFO:radula: Starting upload: 2~39bFPHB8xNoPlcbOg1AmchdYZ1ezFpQ (3.97 GB)
2016-03-17 16:13:33,746 INFO:radula: Uploaded part 1 of 40 (100.00 MB) in 4.49s at 22.29 MBps
2016-03-17 16:13:33,749 INFO:radula: Upload Progress: 2.50%  1/40
2016-03-17 16:13:33,866 INFO:radula: Uploaded part 5 of 40 (100.00 MB) in 4.43s at 22.55 MBps
2016-03-17 16:13:33,868 INFO:radula: Upload Progress: 5.00%  2/40
2016-03-17 16:13:33,875 INFO:radula: Uploaded part 2 of 40 (100.00 MB) in 4.48s at 22.34 MBps
2016-03-17 16:13:33,877 INFO:radula: Upload Progress: 7.50%  3/40
2016-03-17 16:13:33,955 INFO:radula: Uploaded part 7 of 40 (100.00 MB) in 4.57s at 21.86 MBps
2016-03-17 16:13:33,959 INFO:radula: Upload Progress: 10.00%  4/40
2016-03-17 16:13:34,286 INFO:radula: Uploaded part 3 of 40 (100.00 MB) in 4.87s at 20.53 MBps
2016-03-17 16:13:34,295 INFO:radula: Upload Progress: 12.50%  5/40
2016-03-17 16:13:34,400 INFO:radula: Uploaded part 10 of 40 (100.00 MB) in 4.93s at 20.29 MBps
2016-03-17 16:13:34,401 INFO:radula: Upload Progress: 15.00%  6/40
2016-03-17 16:13:34,477 INFO:radula: Uploaded part 8 of 40 (100.00 MB) in 5.06s at 19.77 MBps
2016-03-17 16:13:34,480 INFO:radula: Upload Progress: 17.50%  7/40
2016-03-17 16:13:34,633 INFO:radula: Uploaded part 4 of 40 (100.00 MB) in 5.32s at 18.81 MBps
2016-03-17 16:13:34,637 INFO:radula: Upload Progress: 20.00%  8/40
2016-03-17 16:13:34,641 INFO:radula: Uploaded part 9 of 40 (100.00 MB) in 5.22s at 19.17 MBps
2016-03-17 16:13:34,655 INFO:radula: Upload Progress: 22.50%  9/40
2016-03-17 16:13:35,010 INFO:radula: Uploaded part 6 of 40 (100.00 MB) in 5.72s at 17.50 MBps
2016-03-17 16:13:35,024 INFO:radula: Upload Progress: 25.00%  10/40
2016-03-17 16:13:39,212 INFO:radula: Uploaded part 12 of 40 (100.00 MB) in 5.23s at 19.11 MBps
2016-03-17 16:13:39,213 INFO:radula: Upload Progress: 27.50%  11/40
2016-03-17 16:13:39,336 INFO:radula: Uploaded part 13 of 40 (100.00 MB) in 5.35s at 18.70 MBps
2016-03-17 16:13:39,339 INFO:radula: Upload Progress: 30.00%  12/40
2016-03-17 16:13:39,377 INFO:radula: Uploaded part 11 of 40 (100.00 MB) in 5.52s at 18.12 MBps
2016-03-17 16:13:39,379 INFO:radula: Upload Progress: 32.50%  13/40
2016-03-17 16:13:39,692 INFO:radula: Uploaded part 14 of 40 (100.00 MB) in 5.60s at 17.85 MBps
2016-03-17 16:13:39,694 INFO:radula: Upload Progress: 35.00%  14/40
2016-03-17 16:13:39,910 INFO:radula: Uploaded part 16 of 40 (100.00 MB) in 5.31s at 18.84 MBps
2016-03-17 16:13:39,913 INFO:radula: Upload Progress: 37.50%  15/40
2016-03-17 16:13:40,140 INFO:radula: Uploaded part 19 of 40 (100.00 MB) in 5.26s at 19.01 MBps
2016-03-17 16:13:40,144 INFO:radula: Upload Progress: 40.00%  16/40
2016-03-17 16:13:40,468 INFO:radula: Uploaded part 20 of 40 (100.00 MB) in 5.31s at 18.84 MBps
2016-03-17 16:13:40,472 INFO:radula: Upload Progress: 42.50%  17/40
2016-03-17 16:13:40,587 INFO:radula: Uploaded part 15 of 40 (100.00 MB) in 6.08s at 16.44 MBps
2016-03-17 16:13:40,588 INFO:radula: Upload Progress: 45.00%  18/40
2016-03-17 16:13:40,787 INFO:radula: Uploaded part 18 of 40 (100.00 MB) in 5.88s at 17.01 MBps
2016-03-17 16:13:40,787 INFO:radula: Upload Progress: 47.50%  19/40
2016-03-17 16:13:41,162 INFO:radula: Uploaded part 17 of 40 (100.00 MB) in 6.45s at 15.51 MBps
2016-03-17 16:13:41,162 INFO:radula: Upload Progress: 50.00%  20/40
2016-03-17 16:13:44,722 INFO:radula: Uploaded part 21 of 40 (100.00 MB) in 5.36s at 18.65 MBps
2016-03-17 16:13:44,724 INFO:radula: Upload Progress: 52.50%  21/40
2016-03-17 16:13:44,887 INFO:radula: Uploaded part 22 of 40 (100.00 MB) in 5.37s at 18.61 MBps
2016-03-17 16:13:44,889 INFO:radula: Upload Progress: 55.00%  22/40
2016-03-17 16:13:45,599 INFO:radula: Uploaded part 25 of 40 (100.00 MB) in 5.56s at 18.00 MBps
2016-03-17 16:13:45,601 INFO:radula: Upload Progress: 57.50%  23/40
2016-03-17 16:13:45,726 INFO:radula: Uploaded part 24 of 40 (100.00 MB) in 5.81s at 17.21 MBps
2016-03-17 16:13:45,728 INFO:radula: Upload Progress: 60.00%  24/40
2016-03-17 16:13:45,932 INFO:radula: Uploaded part 28 of 40 (100.00 MB) in 5.23s at 19.13 MBps
2016-03-17 16:13:45,933 INFO:radula: Upload Progress: 62.50%  25/40
2016-03-17 16:13:46,006 INFO:radula: Uploaded part 23 of 40 (100.00 MB) in 6.49s at 15.42 MBps
2016-03-17 16:13:46,013 INFO:radula: Upload Progress: 65.00%  26/40
2016-03-17 16:13:46,114 INFO:radula: Uploaded part 29 of 40 (100.00 MB) in 5.26s at 19.00 MBps
2016-03-17 16:13:46,117 INFO:radula: Upload Progress: 67.50%  27/40
2016-03-17 16:13:46,364 INFO:radula: Uploaded part 27 of 40 (100.00 MB) in 5.76s at 17.37 MBps
2016-03-17 16:13:46,368 INFO:radula: Upload Progress: 70.00%  28/40
2016-03-17 16:13:46,371 INFO:radula: Uploaded part 30 of 40 (100.00 MB) in 5.15s at 19.43 MBps
2016-03-17 16:13:46,378 INFO:radula: Upload Progress: 72.50%  29/40
2016-03-17 16:13:46,652 INFO:radula: Uploaded part 26 of 40 (100.00 MB) in 6.39s at 15.65 MBps
2016-03-17 16:13:46,661 INFO:radula: Upload Progress: 75.00%  30/40
2016-03-17 16:13:49,320 INFO:radula: Uploaded part 40 of 40 (72.32 MB) in 2.55s at 28.35 MBps
2016-03-17 16:13:49,322 INFO:radula: Upload Progress: 77.50%  31/40
2016-03-17 16:13:49,620 INFO:radula: Uploaded part 31 of 40 (100.00 MB) in 4.78s at 20.94 MBps
2016-03-17 16:13:49,622 INFO:radula: Upload Progress: 80.00%  32/40
2016-03-17 16:13:49,788 INFO:radula: Uploaded part 32 of 40 (100.00 MB) in 4.76s at 20.99 MBps
2016-03-17 16:13:49,789 INFO:radula: Upload Progress: 82.50%  33/40
2016-03-17 16:13:50,013 INFO:radula: Uploaded part 33 of 40 (100.00 MB) in 4.29s at 23.32 MBps
2016-03-17 16:13:50,015 INFO:radula: Upload Progress: 85.00%  34/40
2016-03-17 16:13:50,087 INFO:radula: Uploaded part 34 of 40 (100.00 MB) in 4.25s at 23.54 MBps
2016-03-17 16:13:50,088 INFO:radula: Upload Progress: 87.50%  35/40
2016-03-17 16:13:50,112 INFO:radula: Uploaded part 35 of 40 (100.00 MB) in 4.06s at 24.65 MBps
2016-03-17 16:13:50,114 INFO:radula: Upload Progress: 90.00%  36/40
2016-03-17 16:13:50,160 INFO:radula: Uploaded part 37 of 40 (100.00 MB) in 3.89s at 25.71 MBps
2016-03-17 16:13:50,162 INFO:radula: Upload Progress: 92.50%  37/40
2016-03-17 16:13:50,168 INFO:radula: Uploaded part 39 of 40 (100.00 MB) in 3.62s at 27.65 MBps
2016-03-17 16:13:50,169 INFO:radula: Upload Progress: 95.00%  38/40
2016-03-17 16:13:50,212 INFO:radula: Uploaded part 36 of 40 (100.00 MB) in 4.08s at 24.50 MBps
2016-03-17 16:13:50,213 INFO:radula: Upload Progress: 97.50%  39/40
2016-03-17 16:13:50,236 INFO:radula: Uploaded part 38 of 40 (100.00 MB) in 3.65s at 27.41 MBps
2016-03-17 16:13:50,237 INFO:radula: Upload Progress: 100.00%  40/40
2016-03-17 16:13:50,635 INFO:radula: Finished uploading 3.97 GB in 21.17s (187.62 MBps)
2016-03-17 16:13:50,636 INFO:radula: Download URL: URL_TO_RADOSGW/BUCKET/fich_4G.iso
<!-- gh-comment-id:197935066 --> @deguich commented on GitHub (Mar 17, 2016): Hi, Indeed, It seems s3fs is like s3cmd, it don't really multi-thread request to S3 server. S3 Server log (a ceph radosgw) show upload of multipart chunk one by one. It's a real great oportunity to increase performance of s3fs. Here is an example with s3fs : <pre> s3fs BUCKET /mnt/BUCKET -o use_path_request_style,url=URL_TO_RADOSGW,parallel_count=50,multipart_size=50,ensure_diskfree=0,use_cache=/mnt/RAMDISK time cp /root/fich_4G.iso /mnt/BUCKET cp /root/fich_4G.iso /mnt/BUCKET 0.16s user 24.32s system 14% cpu 2:44.00 total </pre> fich_4G is 3788Mo. 3788/164 = 23Mo/s With multithread, it's possible to up to the radosgw limit Uploading example with radula (multithreading python boto wrapper) : <pre> radula put fich_4G.iso BUCKET 2016-03-17 16:13:28,936 INFO:radula: CHUNKS: 40 parts x 100.00 MB BUCKET/fich_4G.iso 2016-03-17 16:13:28,974 INFO:radula: Initializing Multipart upload 2016-03-17 16:13:29,027 INFO:radula: Starting upload: 2~39bFPHB8xNoPlcbOg1AmchdYZ1ezFpQ (3.97 GB) 2016-03-17 16:13:33,746 INFO:radula: Uploaded part 1 of 40 (100.00 MB) in 4.49s at 22.29 MBps 2016-03-17 16:13:33,749 INFO:radula: Upload Progress: 2.50% 1/40 2016-03-17 16:13:33,866 INFO:radula: Uploaded part 5 of 40 (100.00 MB) in 4.43s at 22.55 MBps 2016-03-17 16:13:33,868 INFO:radula: Upload Progress: 5.00% 2/40 2016-03-17 16:13:33,875 INFO:radula: Uploaded part 2 of 40 (100.00 MB) in 4.48s at 22.34 MBps 2016-03-17 16:13:33,877 INFO:radula: Upload Progress: 7.50% 3/40 2016-03-17 16:13:33,955 INFO:radula: Uploaded part 7 of 40 (100.00 MB) in 4.57s at 21.86 MBps 2016-03-17 16:13:33,959 INFO:radula: Upload Progress: 10.00% 4/40 2016-03-17 16:13:34,286 INFO:radula: Uploaded part 3 of 40 (100.00 MB) in 4.87s at 20.53 MBps 2016-03-17 16:13:34,295 INFO:radula: Upload Progress: 12.50% 5/40 2016-03-17 16:13:34,400 INFO:radula: Uploaded part 10 of 40 (100.00 MB) in 4.93s at 20.29 MBps 2016-03-17 16:13:34,401 INFO:radula: Upload Progress: 15.00% 6/40 2016-03-17 16:13:34,477 INFO:radula: Uploaded part 8 of 40 (100.00 MB) in 5.06s at 19.77 MBps 2016-03-17 16:13:34,480 INFO:radula: Upload Progress: 17.50% 7/40 2016-03-17 16:13:34,633 INFO:radula: Uploaded part 4 of 40 (100.00 MB) in 5.32s at 18.81 MBps 2016-03-17 16:13:34,637 INFO:radula: Upload Progress: 20.00% 8/40 2016-03-17 16:13:34,641 INFO:radula: Uploaded part 9 of 40 (100.00 MB) in 5.22s at 19.17 MBps 2016-03-17 16:13:34,655 INFO:radula: Upload Progress: 22.50% 9/40 2016-03-17 16:13:35,010 INFO:radula: Uploaded part 6 of 40 (100.00 MB) in 5.72s at 17.50 MBps 2016-03-17 16:13:35,024 INFO:radula: Upload Progress: 25.00% 10/40 2016-03-17 16:13:39,212 INFO:radula: Uploaded part 12 of 40 (100.00 MB) in 5.23s at 19.11 MBps 2016-03-17 16:13:39,213 INFO:radula: Upload Progress: 27.50% 11/40 2016-03-17 16:13:39,336 INFO:radula: Uploaded part 13 of 40 (100.00 MB) in 5.35s at 18.70 MBps 2016-03-17 16:13:39,339 INFO:radula: Upload Progress: 30.00% 12/40 2016-03-17 16:13:39,377 INFO:radula: Uploaded part 11 of 40 (100.00 MB) in 5.52s at 18.12 MBps 2016-03-17 16:13:39,379 INFO:radula: Upload Progress: 32.50% 13/40 2016-03-17 16:13:39,692 INFO:radula: Uploaded part 14 of 40 (100.00 MB) in 5.60s at 17.85 MBps 2016-03-17 16:13:39,694 INFO:radula: Upload Progress: 35.00% 14/40 2016-03-17 16:13:39,910 INFO:radula: Uploaded part 16 of 40 (100.00 MB) in 5.31s at 18.84 MBps 2016-03-17 16:13:39,913 INFO:radula: Upload Progress: 37.50% 15/40 2016-03-17 16:13:40,140 INFO:radula: Uploaded part 19 of 40 (100.00 MB) in 5.26s at 19.01 MBps 2016-03-17 16:13:40,144 INFO:radula: Upload Progress: 40.00% 16/40 2016-03-17 16:13:40,468 INFO:radula: Uploaded part 20 of 40 (100.00 MB) in 5.31s at 18.84 MBps 2016-03-17 16:13:40,472 INFO:radula: Upload Progress: 42.50% 17/40 2016-03-17 16:13:40,587 INFO:radula: Uploaded part 15 of 40 (100.00 MB) in 6.08s at 16.44 MBps 2016-03-17 16:13:40,588 INFO:radula: Upload Progress: 45.00% 18/40 2016-03-17 16:13:40,787 INFO:radula: Uploaded part 18 of 40 (100.00 MB) in 5.88s at 17.01 MBps 2016-03-17 16:13:40,787 INFO:radula: Upload Progress: 47.50% 19/40 2016-03-17 16:13:41,162 INFO:radula: Uploaded part 17 of 40 (100.00 MB) in 6.45s at 15.51 MBps 2016-03-17 16:13:41,162 INFO:radula: Upload Progress: 50.00% 20/40 2016-03-17 16:13:44,722 INFO:radula: Uploaded part 21 of 40 (100.00 MB) in 5.36s at 18.65 MBps 2016-03-17 16:13:44,724 INFO:radula: Upload Progress: 52.50% 21/40 2016-03-17 16:13:44,887 INFO:radula: Uploaded part 22 of 40 (100.00 MB) in 5.37s at 18.61 MBps 2016-03-17 16:13:44,889 INFO:radula: Upload Progress: 55.00% 22/40 2016-03-17 16:13:45,599 INFO:radula: Uploaded part 25 of 40 (100.00 MB) in 5.56s at 18.00 MBps 2016-03-17 16:13:45,601 INFO:radula: Upload Progress: 57.50% 23/40 2016-03-17 16:13:45,726 INFO:radula: Uploaded part 24 of 40 (100.00 MB) in 5.81s at 17.21 MBps 2016-03-17 16:13:45,728 INFO:radula: Upload Progress: 60.00% 24/40 2016-03-17 16:13:45,932 INFO:radula: Uploaded part 28 of 40 (100.00 MB) in 5.23s at 19.13 MBps 2016-03-17 16:13:45,933 INFO:radula: Upload Progress: 62.50% 25/40 2016-03-17 16:13:46,006 INFO:radula: Uploaded part 23 of 40 (100.00 MB) in 6.49s at 15.42 MBps 2016-03-17 16:13:46,013 INFO:radula: Upload Progress: 65.00% 26/40 2016-03-17 16:13:46,114 INFO:radula: Uploaded part 29 of 40 (100.00 MB) in 5.26s at 19.00 MBps 2016-03-17 16:13:46,117 INFO:radula: Upload Progress: 67.50% 27/40 2016-03-17 16:13:46,364 INFO:radula: Uploaded part 27 of 40 (100.00 MB) in 5.76s at 17.37 MBps 2016-03-17 16:13:46,368 INFO:radula: Upload Progress: 70.00% 28/40 2016-03-17 16:13:46,371 INFO:radula: Uploaded part 30 of 40 (100.00 MB) in 5.15s at 19.43 MBps 2016-03-17 16:13:46,378 INFO:radula: Upload Progress: 72.50% 29/40 2016-03-17 16:13:46,652 INFO:radula: Uploaded part 26 of 40 (100.00 MB) in 6.39s at 15.65 MBps 2016-03-17 16:13:46,661 INFO:radula: Upload Progress: 75.00% 30/40 2016-03-17 16:13:49,320 INFO:radula: Uploaded part 40 of 40 (72.32 MB) in 2.55s at 28.35 MBps 2016-03-17 16:13:49,322 INFO:radula: Upload Progress: 77.50% 31/40 2016-03-17 16:13:49,620 INFO:radula: Uploaded part 31 of 40 (100.00 MB) in 4.78s at 20.94 MBps 2016-03-17 16:13:49,622 INFO:radula: Upload Progress: 80.00% 32/40 2016-03-17 16:13:49,788 INFO:radula: Uploaded part 32 of 40 (100.00 MB) in 4.76s at 20.99 MBps 2016-03-17 16:13:49,789 INFO:radula: Upload Progress: 82.50% 33/40 2016-03-17 16:13:50,013 INFO:radula: Uploaded part 33 of 40 (100.00 MB) in 4.29s at 23.32 MBps 2016-03-17 16:13:50,015 INFO:radula: Upload Progress: 85.00% 34/40 2016-03-17 16:13:50,087 INFO:radula: Uploaded part 34 of 40 (100.00 MB) in 4.25s at 23.54 MBps 2016-03-17 16:13:50,088 INFO:radula: Upload Progress: 87.50% 35/40 2016-03-17 16:13:50,112 INFO:radula: Uploaded part 35 of 40 (100.00 MB) in 4.06s at 24.65 MBps 2016-03-17 16:13:50,114 INFO:radula: Upload Progress: 90.00% 36/40 2016-03-17 16:13:50,160 INFO:radula: Uploaded part 37 of 40 (100.00 MB) in 3.89s at 25.71 MBps 2016-03-17 16:13:50,162 INFO:radula: Upload Progress: 92.50% 37/40 2016-03-17 16:13:50,168 INFO:radula: Uploaded part 39 of 40 (100.00 MB) in 3.62s at 27.65 MBps 2016-03-17 16:13:50,169 INFO:radula: Upload Progress: 95.00% 38/40 2016-03-17 16:13:50,212 INFO:radula: Uploaded part 36 of 40 (100.00 MB) in 4.08s at 24.50 MBps 2016-03-17 16:13:50,213 INFO:radula: Upload Progress: 97.50% 39/40 2016-03-17 16:13:50,236 INFO:radula: Uploaded part 38 of 40 (100.00 MB) in 3.65s at 27.41 MBps 2016-03-17 16:13:50,237 INFO:radula: Upload Progress: 100.00% 40/40 2016-03-17 16:13:50,635 INFO:radula: Finished uploading 3.97 GB in 21.17s (187.62 MBps) 2016-03-17 16:13:50,636 INFO:radula: Download URL: URL_TO_RADOSGW/BUCKET/fich_4G.iso </pre>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/s3fs-fuse#100
No description provided.