Skip to content

Optimize MD5 checksum calculation #10278

Description

@cyberduck

4d59c66 created the issue

Two suggestions to optimize checksum calculation while uploading to S3.

I frequently upload very large files (75-100GB) to S3 and the checksum calculation adds a significant delay in a time sensitive workflow. I was just uploading a 75GB file, and the checksum calculation took 10min before the actual upload started. Actual upload time is 32min, so that adds a 33% time penalty in uploading, which is significant and very unfortunate.

  • Compute the checksum during the upload, rather than a separate pre-calc pass. Yes, that reduces redundancy of the checksum because it becomes a single read, but errors are more likely during upload than local disk read.
  • The algorithm for reading the file for checksum calculation seems slow. My primary storage (RAID5) supports read bandwidth in excess of 400MB/s, yet during the calculation of the checksum the read speed never exceeds 120MB/s, so checksum calculation is limited by code not I/O bandwidth.

Activity

  1. cyberduck commented on Aug 24, 2018

    @cyberduck
    ContributorAuthor

    4e36ae0 commented

    Agreed, it would be great if there was a way to disable the checksum because it takes too long on >100GB files. I notice people complain about it e.g. https://community.rackspace.com/general/f/general-discussion-forum/1775/cyberduck-incredibly-slow

    PS: (looking through some code changes I see you already know this) but although the ETag calculation is not officially defined by Amazon, the resulting ETag is a completed multipart upload is an MD5 of each part's MD5 followed by "-" and the number of parts. This could be verified if you're paranoid, though I guess it would have to be recomputed if Cyberduck is restarted in the middle of a multipart upload.

  2. cyberduck commented on Oct 31, 2018

    @cyberduck
    ContributorAuthor

    @dkocher commented

    Replying to [comment:2 jamshid]:

    Agreed, it would be great if there was a way to disable the checksum because it takes too long on >100GB files. I notice people complain about it e.g. https://community.rackspace.com/general/f/general-discussion-forum/1775/cyberduck-incredibly-slow

    PS: (looking through some code changes I see you already know this) but although the ETag calculation is not officially defined by Amazon, the resulting ETag is a completed multipart upload is an MD5 of each part's MD5 followed by "-" and the number of parts. This could be verified if you're paranoid, though I guess it would have to be recomputed if Cyberduck is restarted in the middle of a multipart upload.
    We already do compute the returned concatenated MD5 hash for multipart uploads (see S3MultipartUploadService.

  3. cyberduck commented on Oct 31, 2018

    @cyberduck
    ContributorAuthor

    @dkocher commented

    See also #10215.

  4. cyberduck commented on Oct 31, 2018

    @cyberduck
    ContributorAuthor

    @dkocher commented

    We should possibly skip checksum calculation for multipart uploads as we additionally checksum parts verified on the server side.

  5. cyberduck commented on Oct 31, 2019

    @cyberduck
    ContributorAuthor

    @ylangisc commented

    In 0b68abc.

  6. cyberduck commented on Nov 22, 2019

    @cyberduck
    ContributorAuthor

    @dkocher commented

    Milestone renamed

  7. locked as resolved and limited conversation to collaborators on Nov 26, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

s3AWS S3 Protocol Implementation

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions