-
Notifications
You must be signed in to change notification settings - Fork 223
-
Notifications
You must be signed in to change notification settings - Fork 223
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CopyObjectAsync is much slower than mc tool #372
Comments
@ngbrown Thanks for filing this issue. As far as |
The go client seems to do it quite a bit differently by getting the number of parts first: I did start a branch to use be able to use different minimum part sizes. It's not tune-able like I suggested, but it is a lot faster than the 5 MiB parts. I started off with 512 MiB parts for copying between servers, and 64 MiB for uploading. If you have a suggestion on which way to go, I can update my branch and start a pull request. |
@ngbrown, the reason mc is much faster than dotnet SDK here is because minimum part size used by mc is 128MiB vs the much lower 5MiB on dotnet SDK. We can make the part size configurable so that you can optionally bump up the minimum part size if your network can handle it. |
@ngbrown, we can set the part size in the case of |
Regarding setting the part size to I realize there's no progress reported in the .NET client right now, but @kannappanr, You mentioned using the existing constants, I would suggest adding two new constants, |
PR #530 has the fix to speed up PUT & COPY operations. |
In
CalculateMultiPartSize
, which is triggered if the source is over 5 GiB, it appears the copy is made to maximize the number of parts (which is 10,000), bounded by the minimum part size (5 MiB).minio-dotnet/Minio/Helper/utils.cs
Line 235 in b7e7adf
On the other hand, the
mc
command line copies with much fewer parts. It seems to optimize for a higher part size (500 MiB), or 100 times larger than the minimum part size.The speed difference is significant. A 7 GiB file copies between buckets on the commandline in 1 minute. With the .net client, I canceled after 25 minutes, and it was only 56% done.
Is there any way to tune this?
The text was updated successfully, but these errors were encountered: