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.7.0 was compared against mdfreader 0.2.7 (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.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
  • Windows-10-10.0.14393-SP0
  • Intel64 Family 6 Model 94 Stepping 3, 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
  • compression bcolz 6 = mdfreader mdf object created with compression=6
  • 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.7.0 full mdfv3 737 339
asammdf 2.7.0 low mdfv3 648 187
asammdf 2.7.0 minimum mdfv3 395 98
mdfreader 0.2.7 mdfv3 2310 465
mdfreader 0.2.7 compress mdfv3 3565 200
mdfreader 0.2.7 compress bcolz 6 mdfv3 3706 1535
mdfreader 0.2.7 noDataLoading mdfv3 658 188
asammdf 2.7.0 full mdfv4 1840 403
asammdf 2.7.0 low mdfv4 1765 238
asammdf 2.7.0 minimum mdfv4 1261 110
mdfreader 0.2.7 mdfv4 4660 467
mdfreader 0.2.7 compress mdfv4 5813 181
mdfreader 0.2.7 compress bcolz 6 mdfv4 6113 1433
mdfreader 0.2.7 noDataLoading mdfv4 3226 211
Save file Time [ms] RAM [MB]
asammdf 2.7.0 full mdfv3 329 342
asammdf 2.7.0 low mdfv3 383 194
asammdf 2.7.0 minimum mdfv3 926 107
mdfreader 0.2.7 mdfv3 8053 482
mdfreader 0.2.7 noDataLoading mdfv3 8762 566
mdfreader 0.2.7 compress mdfv3 7975 451
mdfreader 0.2.7 compress bcolz 6 mdfv3 7875 1534
asammdf 2.7.0 full mdfv4 412 408
asammdf 2.7.0 low mdfv4 464 248
asammdf 2.7.0 minimum mdfv4 2003 118
mdfreader 0.2.7 mdfv4 7498 485
mdfreader 0.2.7 noDataLoading mdfv4 6767 595
mdfreader 0.2.7 compress mdfv4 7701 441
mdfreader 0.2.7 compress bcolz6 mdfv4 7517 1444
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.7.0 full mdfv3 635 346
asammdf 2.7.0 low mdfv3 3222 199
asammdf 2.7.0 minimum mdfv3 4347 113
mdfreader 0.2.7 mdfv3 58 464
mdfreader 0.2.7 nodata mdfv3 1117 403
mdfreader 0.2.7 compress mdfv3 599 199
mdfreader 0.2.7 compress bcolz 6 mdfv3 248 1534
asammdf 2.7.0 full mdfv4 687 410
asammdf 2.7.0 low mdfv4 6612 248
asammdf 2.7.0 minimum mdfv4 8661 122
mdfreader 0.2.7 mdfv4 56 467
mdfreader 0.2.7 nodata mdfv4 1506 444
mdfreader 0.2.7 compress mdfv4 598 187
mdfreader 0.2.7 compress bcolz 6 mdfv4 278 1439
Convert file Time [ms] RAM [MB]
asammdf 2.7.0 full v3 to v4 3505 498
asammdf 2.7.0 low v3 to v4 3697 352
asammdf 2.7.0 minimum v3 to v4 4426 267
asammdf 2.7.0 full v4 to v3 3788 497
asammdf 2.7.0 low v4 to v3 4225 334
asammdf 2.7.0 minimum v4 to v3 6625 210
Merge files Time [ms] RAM [MB]
asammdf 2.7.0 full v3 7828 1333
asammdf 2.7.0 low v3 9350 476
asammdf 2.7.0 minimum v3 11020 249
mdfreader 0.2.7 v3 11437 2963
asammdf 2.7.0 full v4 11869 1455
asammdf 2.7.0 low v4 12764 571
asammdf 2.7.0 minimum v4 16559 249
mdfreader 0.2.7 v4 16126 2966

x86 Python results

Benchmark environment

  • 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]
  • Windows-10-10.0.14393-SP0
  • Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
  • 16GB installed RAM

Notations used in the results

  • nodata = asammdf MDF object created with load_measured_data=False (raw channel data not loaded into RAM)
  • compression = mdfreader mdf object created with compression=blosc
  • compression bcolz 6 = mdfreader mdf object created with compression=6
  • 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.7.0 full mdfv3 892 279
asammdf 2.7.0 low mdfv3 794 126
asammdf 2.7.0 minimum mdfv3 523 71
mdfreader 0.2.7 mdfv3 2978 421
mdfreader 0.2.7 compress mdfv3 4625 152
mdfreader 0.2.7 compress bcolz 6 mdfv3 4308 1307
mdfreader 0.2.7 noDataLoading mdfv3 812 121
asammdf 2.7.0 full mdfv4 2296 318
asammdf 2.7.0 low mdfv4 2139 152
asammdf 2.7.0 minimum mdfv4 1599 77
mdfreader 0.2.7 mdfv4 5662 421
mdfreader 0.2.7 compress mdfv4 6847 137
mdfreader 0.2.7 compress bcolz 6 mdfv4 7033 1200
mdfreader 0.2.7 noDataLoading mdfv4 3759 134
Save file Time [ms] RAM [MB]
asammdf 2.7.0 full mdfv3 395 282
asammdf 2.7.0 low mdfv3 492 133
asammdf 2.7.0 minimum mdfv3 1197 78
mdfreader 0.2.7 mdfv3 9073 435
mdfreader 0.2.7 noDataLoading mdfv3 10121 464
mdfreader 0.2.7 compress mdfv3 9323 407
mdfreader 0.2.7 compress bcolz 6 mdfv3 9053 1307
asammdf 2.7.0 full mdfv4 550 322
asammdf 2.7.0 low mdfv4 639 162
asammdf 2.7.0 minimum mdfv4 2672 86
mdfreader 0.2.7 mdfv4 8705 440
mdfreader 0.2.7 noDataLoading mdfv4 7930 500
mdfreader 0.2.7 compress mdfv4 8836 401
mdfreader 0.2.7 compress bcolz6 mdfv4 8609 1214
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.7.0 full mdfv3 854 284
asammdf 2.7.0 low mdfv3 12495 136
asammdf 2.7.0 minimum mdfv3 13589 82
mdfreader 0.2.7 mdfv3 76 421
mdfreader 0.2.7 nodata mdfv3 1419 327
mdfreader 0.2.7 compress mdfv3 699 153
mdfreader 0.2.7 compress bcolz 6 mdfv3 294 1307
asammdf 2.7.0 full mdfv4 885 323
asammdf 2.7.0 low mdfv4 15095 160
asammdf 2.7.0 minimum mdfv4 18019 85
mdfreader 0.2.7 mdfv4 72 421
mdfreader 0.2.7 nodata mdfv4 1914 351
mdfreader 0.2.7 compress mdfv4 706 142
mdfreader 0.2.7 compress bcolz 6 mdfv4 314 1205
Convert file Time [ms] RAM [MB]
asammdf 2.7.0 full v3 to v4 3997 383
asammdf 2.7.0 low v3 to v4 4474 234
asammdf 2.7.0 minimum v3 to v4 5185 182
asammdf 2.7.0 full v4 to v3 4634 378
asammdf 2.7.0 low v4 to v3 5111 213
asammdf 2.7.0 minimum v4 to v3 7996 140
Merge files Time [ms] RAM [MB]
asammdf 2.7.0 full v3 10048 1184
asammdf 2.7.0 low v3 11128 339
asammdf 2.7.0 minimum v3 13078 201
mdfreader 0.2.7 v3 0* 0*
asammdf 2.7.0 full v4 14038 1241
asammdf 2.7.0 low v4 15429 371
asammdf 2.7.0 minimum v4 20086 185
mdfreader 0.2.7 v4 0* 0*
  • mdfreader got a MemoryError