Intro

The benchmarks were done using two test files (available here https://github.com/danielhrisca/asammdf/issues/14) (for mdf version 3 and 4) of around 170MB. The files contain 183 data groups and a total of 36424 channels.

asamdf 2.8.1 was compared against mdfreader 2.7.4 (latest versions from PyPI). mdfreader seems to be the most used Python package to handle MDF files, and it also supports both version 3 and 4 of the standard.

The three benchmark cathegories are file open, file save and extracting the data for all channels inside the file(36424 calls). For each cathegory two aspect were noted: elapsed time and peak RAM usage.

Dependencies

You will need the following packages to be able to run the benchmark script

  • psutil
  • mdfreader

Usage

Extract the test files from the archive, or provide a folder that contains the files “test.mdf” and “test.mf4”. Run the module bench.py ( see –help option for available options )

x64 Python results

Benchmark environment

  • 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)]
  • Windows-10-10.0.16299-SP0
  • Intel64 Family 6 Model 69 Stepping 1, GenuineIntel
  • 16GB installed RAM

Notations used in the results

  • full = asammdf MDF object created with memory=full (everything loaded into RAM)
  • low = asammdf MDF object created with memory=low (raw channel data not loaded into RAM, but metadata loaded to RAM)
  • minimum = asammdf MDF object created with memory=full (lowest possible RAM usage)
  • compress = mdfreader mdf object created with compression=blosc
  • noDataLoading = mdfreader mdf object read with noDataLoading=True

Files used for benchmark:

  • 183 groups
  • 36424 channels

Raw data

Open file Time [ms] RAM [MB]
asammdf 2.8.1 full mdfv3 1054 317
asammdf 2.8.1 low mdfv3 919 164
asammdf 2.8.1 minimum mdfv3 592 76
mdfreader 2.7.4 mdfv3 2545 426
mdfreader 2.7.4 compress mdfv3 4188 126
mdfreader 2.7.4 noDataLoading mdfv3 1015 173
asammdf 2.8.1 full mdfv4 2438 380
asammdf 2.8.1 low mdfv4 2311 215
asammdf 2.8.1 minimum mdfv4 1649 87
mdfreader 2.7.4 mdfv4 6176 438
mdfreader 2.7.4 compress mdfv4 7940 137
mdfreader 2.7.4 noDataLoading mdfv4 4013 180
Save file Time [ms] RAM [MB]
asammdf 2.8.1 full mdfv3 507 319
asammdf 2.8.1 low mdfv3 515 171
asammdf 2.8.1 minimum mdfv3 1263 84
mdfreader 2.7.4 mdfv3 7590 454
mdfreader 2.7.4 noDataLoading mdfv3 0* 0*
mdfreader 2.7.4 compress mdfv3 7236 423
asammdf 2.8.1 full mdfv4 599 385
asammdf 2.8.1 low mdfv4 703 227
asammdf 2.8.1 minimum mdfv4 3157 97
mdfreader 2.7.4 mdfv4 6764 457
mdfreader 2.7.4 noDataLoading mdfv4 8053 476
mdfreader 2.7.4 compress mdfv4 6677 416
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.8.1 full mdfv3 1016 323
asammdf 2.8.1 low mdfv3 5599 177
asammdf 2.8.1 minimum mdfv3 7105 91
mdfreader 2.7.4 mdfv3 102 426
mdfreader 2.7.4 nodata mdfv3 16651 208
mdfreader 2.7.4 compress mdfv3 515 126
asammdf 2.8.1 full mdfv4 1080 388
asammdf 2.8.1 low mdfv4 10658 225
asammdf 2.8.1 minimum mdfv4 13554 98
mdfreader 2.7.4 mdfv4 91 438
mdfreader 2.7.4 nodata mdfv4 26847 204
mdfreader 2.7.4 compress mdfv4 517 138
Convert file Time [ms] RAM [MB]
asammdf 2.8.1 full v3 to v4 4995 750
asammdf 2.8.1 low v3 to v4 5646 330
asammdf 2.8.1 minimum v3 to v4 6902 161
asammdf 2.8.1 full v4 to v3 5750 751
asammdf 2.8.1 low v4 to v3 6572 313
asammdf 2.8.1 minimum v4 to v3 10229 133
Merge files Time [ms] RAM [MB]
asammdf 2.8.1 full v3 12050 1311
asammdf 2.8.1 low v3 14122 454
asammdf 2.8.1 minimum v3 16537 227
mdfreader 2.7.4 v3 14710 974
mdfreader 2.7.4 compress v3 19571 982
asammdf 2.8.1 full v4 17569 1431
asammdf 2.8.1 low v4 19297 548
asammdf 2.8.1 minimum v4 25442 227
mdfreader 2.7.4 v4 22324 971
mdfreader 2.7.4 nodata v4 21581 1013
mdfreader 2.7.4 compress v4 26916 974

x86 Python results

Benchmark environment

  • 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)]
  • Windows-10-10.0.16299-SP0
  • Intel64 Family 6 Model 69 Stepping 1, GenuineIntel
  • 16GB installed RAM

Notations used in the results

  • full = asammdf MDF object created with memory=full (everything loaded into RAM)
  • low = asammdf MDF object created with memory=low (raw channel data not loaded into RAM, but metadata loaded to RAM)
  • minimum = asammdf MDF object created with memory=full (lowest possible RAM usage)
  • compress = mdfreader mdf object created with compression=blosc
  • noDataLoading = mdfreader mdf object read with noDataLoading=True

Files used for benchmark:

  • 183 groups
  • 36424 channels

Raw data

Open file Time [ms] RAM [MB]
asammdf 2.8.1 full mdfv3 1207 260
asammdf 2.8.1 low mdfv3 1065 107
asammdf 2.8.1 minimum mdfv3 746 52
mdfreader 2.7.4 mdfv3 3061 392
mdfreader 2.7.4 noDataLoading mdfv3 1154 106
asammdf 2.8.1 full mdfv4 2811 298
asammdf 2.8.1 low mdfv4 2708 134
asammdf 2.8.1 minimum mdfv4 2081 58
mdfreader 2.7.4 mdfv4 7293 397
mdfreader 2.7.4 noDataLoading mdfv4 4557 109
Save file Time [ms] RAM [MB]
asammdf 2.8.1 full mdfv3 564 264
asammdf 2.8.1 low mdfv3 628 115
asammdf 2.8.1 minimum mdfv3 1780 58
mdfreader 2.7.4 mdfv3 9021 412
mdfreader 2.7.4 noDataLoading mdfv3 0* 0*
asammdf 2.8.1 full mdfv4 798 303
asammdf 2.8.1 low mdfv4 916 143
asammdf 2.8.1 minimum mdfv4 3992 67
mdfreader 2.7.4 mdfv4 8069 417
mdfreader 2.7.4 noDataLoading mdfv4 9646 434
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.8.1 full mdfv3 1226 265
asammdf 2.8.1 low mdfv3 17517 117
asammdf 2.8.1 minimum mdfv3 19145 63
mdfreader 2.7.4 mdfv3 120 392
mdfreader 2.7.4 nodata mdfv3 30561 130
asammdf 2.8.1 full mdfv4 1234 304
asammdf 2.8.1 low mdfv4 20214 141
asammdf 2.8.1 minimum mdfv4 23583 65
mdfreader 2.7.4 mdfv4 115 397
mdfreader 2.7.4 nodata mdfv4 38428 123
Convert file Time [ms] RAM [MB]
asammdf 2.8.1 full v3 to v4 5507 638
asammdf 2.8.1 low v3 to v4 6345 215
asammdf 2.8.1 minimum v3 to v4 8098 118
asammdf 2.8.1 full v4 to v3 6761 635
asammdf 2.8.1 low v4 to v3 7732 194
asammdf 2.8.1 minimum v4 to v3 12232 94
Merge files Time [ms] RAM [MB]
asammdf 2.8.1 full v3 14283 1166
asammdf 2.8.1 low v3 15639 320
asammdf 2.8.1 minimum v3 18547 181
mdfreader 2.7.4 v3 16451 929
mdfreader 2.7.4 nodata v3 0* 0*
asammdf 2.8.1 full v4 20925 1223
asammdf 2.8.1 low v4 22659 352
asammdf 2.8.1 minimum v4 29923 166
mdfreader 2.7.4 v4 25032 919
mdfreader 2.7.4 nodata v4 24316 948
  • mdfreader got a MemoryError