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.6.4 was compared against mdfreader 0.2.6 (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.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.6.4 mdfv3 781 364
asammdf 2.6.4 nodata mdfv3 570 187
mdfreader 0.2.6 mdfv3 2675 545
mdfreader 0.2.6 compress mdfv3 3791 268
mdfreader 0.2.6 compress bcolz 6 mdfv3 3910 1040
mdfreader 0.2.6 noDataLoading mdfv3 1436 199
asammdf 2.6.4 mdfv4 1921 435
asammdf 2.6.4 nodata mdfv4 1476 244
mdfreader 0.2.6 mdfv4 5520 1307
mdfreader 0.2.6 compress mdfv4 6529 1024
mdfreader 0.2.6 compress bcolz 6 mdfv4 6757 1746
mdfreader 0.2.6 noDataLoading mdfv4 3948 943
Save file Time [ms] RAM [MB]
asammdf 2.6.4 mdfv3 375 365
asammdf 2.6.4 nodata mdfv3 360 194
mdfreader 0.2.6 mdfv3 7983 578
mdfreader 0.2.6 compress mdfv3 7966 543
mdfreader 0.2.6 compress bcolz 6 mdfv3 7566 1041
asammdf 2.6.4 mdfv4 493 440
asammdf 2.6.4 nodata mdfv4 444 256
mdfreader 0.2.6 mdfv4 6015 1329
mdfreader 0.2.6 compress mdfv4 6105 1288
mdfreader 0.2.6 compress bcolz6 mdfv4 5875 1763
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.6.4 mdfv3 636 370
asammdf 2.6.4 nodata mdfv3 8535 200
mdfreader 0.2.6 mdfv3 59 545
mdfreader 0.2.6 compress mdfv3 605 270
mdfreader 0.2.6 compress bcolz 6 mdfv3 255 1042
asammdf 2.6.4 mdfv4 675 443
asammdf 2.6.4 nodata mdfv4 16774 254
mdfreader 0.2.6 mdfv4 61 1308
mdfreader 0.2.6 compress mdfv4 598 1030
mdfreader 0.2.6 compress bcolz 6 mdfv4 276 1753
Convert file Time [ms] RAM [MB]
asammdf 2.6.4 v3 to v4 3420 823
asammdf 2.6.4 v3 to v4 nodata 18877 572
asammdf 2.6.4 v4 to v3 4009 832
asammdf 2.6.4 v4 to v3 nodata 28683 718
Merge files Time [ms] RAM [MB]
asammdf 2.6.4 v3 8251 1448
asammdf 2.6.4 v3 nodata 27406 535
asammdf 2.6.4 v4 12183 1537
asammdf 2.6.4 v4 nodata 48747 602

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.6.4 mdfv3 926 286
asammdf 2.6.4 nodata mdfv3 615 118
mdfreader 0.2.6 mdfv3 3345 458
mdfreader 0.2.6 compress mdfv3 4520 185
mdfreader 0.2.6 compress bcolz 6 mdfv3 4635 941
mdfreader 0.2.6 noDataLoading mdfv3 1867 120
asammdf 2.6.4 mdfv4 2250 330
asammdf 2.6.4 nodata mdfv4 1706 150
mdfreader 0.2.6 mdfv4 6413 869
mdfreader 0.2.6 compress mdfv4 7368 586
mdfreader 0.2.6 compress bcolz 6 mdfv4 7733 1294
mdfreader 0.2.6 noDataLoading mdfv4 4474 523
Save file Time [ms] RAM [MB]
asammdf 2.6.4 mdfv3 407 290
asammdf 2.6.4 nodata mdfv3 447 126
mdfreader 0.2.6 mdfv3 8865 481
mdfreader 0.2.6 compress mdfv3 8919 451
mdfreader 0.2.6 compress bcolz 6 mdfv3 8548 941
asammdf 2.6.4 mdfv4 578 334
asammdf 2.6.4 nodata mdfv4 617 159
mdfreader 0.2.6 mdfv4 6758 891
mdfreader 0.2.6 compress mdfv4 6999 852
mdfreader 0.2.6 compress bcolz6 mdfv4 6639 1312
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.6.4 mdfv3 818 291
asammdf 2.6.4 nodata mdfv3 18416 128
mdfreader 0.2.6 mdfv3 77 458
mdfreader 0.2.6 compress mdfv3 665 188
mdfreader 0.2.6 compress bcolz 6 mdfv3 291 943
asammdf 2.6.4 mdfv4 860 335
asammdf 2.6.4 nodata mdfv4 25362 157
mdfreader 0.2.6 mdfv4 162 794
mdfreader 0.2.6 compress mdfv4 710 593
mdfreader 0.2.6 compress bcolz 6 mdfv4 336 1301
Convert file Time [ms] RAM [MB]
asammdf 2.6.4 v3 to v4 4389 680
asammdf 2.6.4 v3 to v4 nodata 26231 472
asammdf 2.6.4 v4 to v3 4586 681
asammdf 2.6.4 v4 to v3 nodata 34042 622
Merge files Time [ms] RAM [MB]
asammdf 2.6.4 v3 10262 1243
asammdf 2.6.4 v3 nodata 48898 352
asammdf 2.6.4 v4 14443 1281
asammdf 2.6.4 v4 nodata 67092 377