Skip to content
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

Repair: remove one of the bottlenecks #162

Merged
merged 2 commits into from
May 2, 2023
Merged

Repair: remove one of the bottlenecks #162

merged 2 commits into from
May 2, 2023

Conversation

commial
Copy link
Contributor

@commial commial commented Apr 28, 2023

Partially fix #157

This PR:

  • add a performance test to measure the repair time
  • clarify how the convert_to_archive main loop works
  • avoid calling the read API for each byte, as this must be equivalent to call it with bigger buffer

In addition to the included tests, the resulting code has been checked to be working on quite large files (~100MB).

As a result:

group post-fix pre-fix
failsafe_multiple_layers_repair/Layers(0x0)/4194304 1.00 73.1±2.18ms 54.7 MB/sec 1.76 128.4±1.35ms 31.2 MB/sec
failsafe_multiple_layers_repair/Layers(COMPRESS)/4194304 1.00 5.1±0.13s 796.3 KB/sec 1.52 7.8±0.09s 523.3 KB/sec
failsafe_multiple_layers_repair/Layers(ENCRYPT | COMPRESS)/4194304 1.00 6.2±0.47s 663.8 KB/sec 1.45 8.9±0.37s 458.3 KB/sec
failsafe_multiple_layers_repair/Layers(ENCRYPT)/4194304 1.00 106.6±6.92ms 37.5 MB/sec 5.68 605.4±130.34ms 6.6 MB/sec

As a bottleneck remains in how the CompressionLayerFailSafeReader, the modes which benefit the most from the fix are the EMPTY and ENCRYPT layer.

@commial commial added the enhancement New feature or request label Apr 28, 2023
@github-actions
Copy link

Benchmark for c38bd80

Click to view benchmark
Test Base PR %
chunk_size_decompress_mutilfiles_random/Layers(0x0)/1024 916.0±70.26ns 870.4±82.34ns -4.98%
chunk_size_decompress_mutilfiles_random/Layers(0x0)/1048576 111.3±8.66µs 99.4±5.55µs -10.69%
chunk_size_decompress_mutilfiles_random/Layers(0x0)/16777216 1781.7±27.48µs 1419.7±20.45µs -20.32%
chunk_size_decompress_mutilfiles_random/Layers(0x0)/65536 7.8±0.53µs 7.1±0.69µs -8.97%
chunk_size_decompress_mutilfiles_random/Layers(COMPRESS)/1024 855.9±470.13µs 741.4±406.66µs -13.38%
chunk_size_decompress_mutilfiles_random/Layers(COMPRESS)/1048576 45.5±0.03ms 48.7±0.11ms +7.03%
chunk_size_decompress_mutilfiles_random/Layers(COMPRESS)/16777216 241.8±0.33ms 259.0±0.47ms +7.11%
chunk_size_decompress_mutilfiles_random/Layers(COMPRESS)/65536 9.8±5.64ms 10.5±5.99ms +7.14%
chunk_size_decompress_mutilfiles_random/Layers(ENCRYPT | COMPRESS)/1024 1087.9±596.93µs 1187.2±671.74µs +9.13%
chunk_size_decompress_mutilfiles_random/Layers(ENCRYPT | COMPRESS)/1048576 48.5±2.45ms 49.7±0.06ms +2.47%
chunk_size_decompress_mutilfiles_random/Layers(ENCRYPT | COMPRESS)/16777216 515.8±0.31ms 534.4±0.39ms +3.61%
chunk_size_decompress_mutilfiles_random/Layers(ENCRYPT | COMPRESS)/65536 8.0±0.01ms 8.3±0.01ms +3.75%
chunk_size_decompress_mutilfiles_random/Layers(ENCRYPT)/1024 1837.7±799.95µs 1837.3±798.57µs -0.02%
chunk_size_decompress_mutilfiles_random/Layers(ENCRYPT)/1048576 24.2±0.01ms 24.2±0.01ms 0.00%
chunk_size_decompress_mutilfiles_random/Layers(ENCRYPT)/16777216 354.0±0.11ms 353.7±0.09ms -0.08%
chunk_size_decompress_mutilfiles_random/Layers(ENCRYPT)/65536 4.0±0.16ms 4.0±0.16ms 0.00%
failsafe_multiple_layers_repair/Layers(0x0)/4194304 79.3±0.83ms N/A N/A
failsafe_multiple_layers_repair/Layers(COMPRESS)/4194304 6.0±0.00s N/A N/A
failsafe_multiple_layers_repair/Layers(ENCRYPT | COMPRESS)/4194304 6.3±0.01s N/A N/A
failsafe_multiple_layers_repair/Layers(ENCRYPT)/4194304 112.0±0.64ms N/A N/A
reader_multiple_layers_multiple_block_size/Layers(0x0)/1024 197.4±24.17ns 184.3±16.58ns -6.64%
reader_multiple_layers_multiple_block_size/Layers(0x0)/1048576 102.3±9.67µs 104.6±6.68µs +2.25%
reader_multiple_layers_multiple_block_size/Layers(0x0)/16777216 1943.6±107.46µs 1823.6±54.41µs -6.17%
reader_multiple_layers_multiple_block_size/Layers(0x0)/65536 6.3±0.78µs 6.5±0.69µs +3.17%
reader_multiple_layers_multiple_block_size/Layers(COMPRESS)/1024 1968.4±2325.67ns 2.0±2.47µs +1.61%
reader_multiple_layers_multiple_block_size/Layers(COMPRESS)/1048576 111.1±5.44µs 122.9±5.74µs +10.62%
reader_multiple_layers_multiple_block_size/Layers(COMPRESS)/16777216 180.6±0.20ms 197.1±0.42ms +9.14%
reader_multiple_layers_multiple_block_size/Layers(COMPRESS)/65536 139.9±166.02µs 151.2±180.08µs +8.08%
reader_multiple_layers_multiple_block_size/Layers(ENCRYPT | COMPRESS)/1024 27.4±5.49µs 28.2±5.69µs +2.92%
reader_multiple_layers_multiple_block_size/Layers(ENCRYPT | COMPRESS)/1048576 29.7±0.04ms 30.8±0.02ms +3.70%
reader_multiple_layers_multiple_block_size/Layers(ENCRYPT | COMPRESS)/16777216 509.5±0.25ms 528.7±0.35ms +3.77%
reader_multiple_layers_multiple_block_size/Layers(ENCRYPT | COMPRESS)/65536 1737.3±296.40µs 1803.5±310.74µs +3.81%
reader_multiple_layers_multiple_block_size/Layers(ENCRYPT)/1024 20.3±1.68µs 20.3±1.69µs 0.00%
reader_multiple_layers_multiple_block_size/Layers(ENCRYPT)/1048576 21.4±0.02ms 21.4±0.01ms 0.00%
reader_multiple_layers_multiple_block_size/Layers(ENCRYPT)/16777216 351.2±0.10ms 351.0±0.05ms -0.06%
reader_multiple_layers_multiple_block_size/Layers(ENCRYPT)/65536 1300.3±102.79µs 1300.4±103.01µs +0.01%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(0x0)/1024 745.4±40.73ns 717.6±33.40ns -3.73%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(0x0)/1048576 116.7±10.00µs 94.5±3.55µs -19.02%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(0x0)/16777216 1806.1±137.64µs 1415.6±14.71µs -21.62%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(0x0)/65536 8.2±0.77µs 6.8±0.33µs -17.07%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(COMPRESS)/1024 16.9±0.15µs 18.1±0.14µs +7.10%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(COMPRESS)/1048576 14.9±0.09ms 16.1±0.04ms +8.05%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(COMPRESS)/16777216 239.7±0.95ms 258.8±0.31ms +7.97%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(COMPRESS)/65536 936.5±5.91µs 1011.0±5.46µs +7.96%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(ENCRYPT | COMPRESS)/1024 35.0±0.15µs 36.3±0.14µs +3.71%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(ENCRYPT | COMPRESS)/1048576 31.7±0.02ms 32.8±0.03ms +3.47%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(ENCRYPT | COMPRESS)/16777216 515.6±0.28ms 535.5±3.50ms +3.86%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(ENCRYPT | COMPRESS)/65536 1994.9±18.21µs 2.1±0.02ms +5.27%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(ENCRYPT)/1024 24.5±0.34µs 24.5±0.27µs 0.00%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(ENCRYPT)/1048576 22.2±0.02ms 22.1±0.01ms -0.45%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(ENCRYPT)/16777216 354.0±0.10ms 353.7±0.11ms -0.08%
reader_multiple_layers_multiple_block_size_multifiles_linear/Layers(ENCRYPT)/65536 1389.7±3.78µs 1385.3±0.39µs -0.32%
writer_multiple_layers_multiple_block_size/Layers(0x0)/1024 10.1±0.08µs 10.0±0.19µs -0.99%
writer_multiple_layers_multiple_block_size/Layers(0x0)/1048576 10.0±0.30ms 9.8±0.28ms -2.00%
writer_multiple_layers_multiple_block_size/Layers(0x0)/16777216 160.4±0.54ms 158.2±0.61ms -1.37%
writer_multiple_layers_multiple_block_size/Layers(0x0)/65536 623.9±18.56µs 610.3±19.28µs -2.18%
writer_multiple_layers_multiple_block_size/Layers(COMPRESS)/1024 16.6±0.46µs 16.0±0.41µs -3.61%
writer_multiple_layers_multiple_block_size/Layers(COMPRESS)/1048576 22.8±0.54ms 21.9±0.50ms -3.95%
writer_multiple_layers_multiple_block_size/Layers(COMPRESS)/16777216 658.3±2.46ms 622.8±1.35ms -5.39%
writer_multiple_layers_multiple_block_size/Layers(COMPRESS)/65536 1028.9±18.15µs 984.9±16.18µs -4.28%
writer_multiple_layers_multiple_block_size/Layers(ENCRYPT | COMPRESS)/1024 16.5±0.26µs 16.0±0.50µs -3.03%
writer_multiple_layers_multiple_block_size/Layers(ENCRYPT | COMPRESS)/1048576 27.2±2.67ms 26.5±2.72ms -2.57%
writer_multiple_layers_multiple_block_size/Layers(ENCRYPT | COMPRESS)/16777216 927.6±1.75ms 893.7±1.98ms -3.65%
writer_multiple_layers_multiple_block_size/Layers(ENCRYPT | COMPRESS)/65536 1050.9±23.67µs 1004.7±20.61µs -4.40%
writer_multiple_layers_multiple_block_size/Layers(ENCRYPT)/1024 33.3±0.09µs 33.2±0.26µs -0.30%
writer_multiple_layers_multiple_block_size/Layers(ENCRYPT)/1048576 32.2±0.12ms 32.2±0.08ms 0.00%
writer_multiple_layers_multiple_block_size/Layers(ENCRYPT)/16777216 515.8±1.12ms 513.5±0.99ms -0.45%
writer_multiple_layers_multiple_block_size/Layers(ENCRYPT)/65536 2.0±0.01ms 1998.1±5.66µs -0.10%

@ANSSI-FR ANSSI-FR deleted a comment from github-actions bot Apr 28, 2023
@commial commial merged commit 4e6b1ee into master May 2, 2023
23 checks passed
@commial commial deleted the optimist-repair branch May 2, 2023 08:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Speed-up repair with an optimist approach
1 participant