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.5 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.5 mdfv3 779 364
asammdf 2.6.5 nodata mdfv3 551 187
mdfreader 0.2.6 mdfv3 2672 545
mdfreader 0.2.6 compress mdfv3 3844 267
mdfreader 0.2.6 compress bcolz 6 mdfv3 3886 1040
mdfreader 0.2.6 noDataLoading mdfv3 1400 198
asammdf 2.6.5 mdfv4 1883 435
asammdf 2.6.5 nodata mdfv4 1457 244
mdfreader 0.2.6 mdfv4 5371 1307
mdfreader 0.2.6 compress mdfv4 6470 1023
mdfreader 0.2.6 compress bcolz 6 mdfv4 6894 1746
mdfreader 0.2.6 noDataLoading mdfv4 4078 943
Save file Time [ms] RAM [MB]
asammdf 2.6.5 mdfv3 356 366
asammdf 2.6.5 nodata mdfv3 398 195
mdfreader 0.2.6 mdfv3 10164 577
mdfreader 0.2.6 compress mdfv3 12341 542
mdfreader 0.2.6 compress bcolz 6 mdfv3 11427 958
asammdf 2.6.5 mdfv4 805 440
asammdf 2.6.5 nodata mdfv4 522 255
mdfreader 0.2.6 mdfv4 7256 1328
mdfreader 0.2.6 compress mdfv4 7010 1288
mdfreader 0.2.6 compress bcolz6 mdfv4 6688 1763
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.6.5 mdfv3 657 370
asammdf 2.6.5 nodata mdfv3 9647 200
mdfreader 0.2.6 mdfv3 67 544
mdfreader 0.2.6 compress mdfv3 698 270
mdfreader 0.2.6 compress bcolz 6 mdfv3 267 1042
asammdf 2.6.5 mdfv4 736 443
asammdf 2.6.5 nodata mdfv4 13552 254
mdfreader 0.2.6 mdfv4 64 1307
mdfreader 0.2.6 compress mdfv4 631 1031
mdfreader 0.2.6 compress bcolz 6 mdfv4 304 1753
Convert file Time [ms] RAM [MB]
asammdf 2.6.5 v3 to v4 3675 823
asammdf 2.6.5 v3 to v4 nodata 4607 379
asammdf 2.6.5 v4 to v3 4442 831
asammdf 2.6.5 v4 to v3 nodata 5105 366
Merge files Time [ms] RAM [MB]
asammdf 2.6.5 v3 8605 1449
asammdf 2.6.5 v3 nodata 11089 544
asammdf 2.6.5 v4 13469 1536
asammdf 2.6.5 v4 nodata 15565 600

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.5 mdfv3 916 286
asammdf 2.6.5 nodata mdfv3 623 118
mdfreader 0.2.6 mdfv3 3373 458
mdfreader 0.2.6 compress mdfv3 4526 184
mdfreader 0.2.6 compress bcolz 6 mdfv3 4518 940
mdfreader 0.2.6 noDataLoading mdfv3 1833 120
asammdf 2.6.5 mdfv4 2214 330
asammdf 2.6.5 nodata mdfv4 1695 150
mdfreader 0.2.6 mdfv4 6348 870
mdfreader 0.2.6 compress mdfv4 7262 586
mdfreader 0.2.6 compress bcolz 6 mdfv4 7552 1294
mdfreader 0.2.6 noDataLoading mdfv4 4797 522
Save file Time [ms] RAM [MB]
asammdf 2.6.5 mdfv3 462 290
asammdf 2.6.5 nodata mdfv3 521 125
mdfreader 0.2.6 mdfv3 9175 481
mdfreader 0.2.6 compress mdfv3 9727 452
mdfreader 0.2.6 compress bcolz 6 mdfv3 9284 940
asammdf 2.6.5 mdfv4 657 334
asammdf 2.6.5 nodata mdfv4 710 159
mdfreader 0.2.6 mdfv4 6706 891
mdfreader 0.2.6 compress mdfv4 7030 851
mdfreader 0.2.6 compress bcolz6 mdfv4 6693 1311
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.6.5 mdfv3 791 291
asammdf 2.6.5 nodata mdfv3 18430 128
mdfreader 0.2.6 mdfv3 78 457
mdfreader 0.2.6 compress mdfv3 738 187
mdfreader 0.2.6 compress bcolz 6 mdfv3 299 941
asammdf 2.6.5 mdfv4 863 334
asammdf 2.6.5 nodata mdfv4 20637 157
mdfreader 0.2.6 mdfv4 77 869
mdfreader 0.2.6 compress mdfv4 653 593
mdfreader 0.2.6 compress bcolz 6 mdfv4 313 1301
Convert file Time [ms] RAM [MB]
asammdf 2.6.5 v3 to v4 3843 680
asammdf 2.6.5 v3 to v4 nodata 4656 242
asammdf 2.6.5 v4 to v3 4261 681
asammdf 2.6.5 v4 to v3 nodata 5231 225
Merge files Time [ms] RAM [MB]
asammdf 2.6.5 v3 10058 1248
asammdf 2.6.5 v3 nodata 11174 363
asammdf 2.6.5 v4 14232 1282
asammdf 2.6.5 v4 nodata 14629 380