Intro

The benchmarks were done using two test files (for mdf version 3 and 4) of around 170MB. The files contain 183 data groups and a total of 36424 channels.

asamdf 2.0.0 was compared against mdfreader 0.2.5. 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

x64 Python results

The test environment used for 64 bit tests had:

  • Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
  • Windows-7-6.1.7601-SP1
  • Intel64 Family 6 Model 94 Stepping 3, GenuineIntel (i7-6820Q)
  • 16GB installed RAM

The notations used in the results have the following meaning:

  • nodata = MDF object created with load_measured_data=False (raw channel data no loaded into RAM)
  • compression = MDF object created with compression=True (raw channel data loaded into RAM and compressed)
  • noconvert = MDF object created with convertAfterRead=False

Raw data

Open file Time [ms] RAM [MB]
asammdf 2.0.0 mdfv3 721 352
asammdf 2.0.0 compression mdfv3 1008 275
asammdf 2.0.0 nodata mdfv3 641 199
mdfreader 0.2.5 mdfv3 2996 526
mdfreader 0.2.5 no convert mdfv3 2846 393
asammdf 2.0.0 mdfv4 1634 439
asammdf 2.0.0 compression mdfv4 1917 343
asammdf 2.0.0 nodata mdfv4 1594 274
mdfreader 0.2.5 mdfv4 31023 739
mdfreader 0.2.5 noconvert mdfv4 30693 609
Save file Time [ms] RAM [MB]
asammdf 2.0.0 mdfv3 472 353
asammdf 2.0.0 compression mdfv3 667 275
mdfreader 0.2.5 mdfv3 18910 2003
asammdf 2.0.0 mdfv4 686 447
asammdf 2.0.0 compression mdfv4 836 352
mdfreader 0.2.5 mdfv4 16631 2802
Get all channels Time [ms] RAM [MB]
asammdf 2.0.0 mdfv3 2492 362
asammdf 2.0.0 compression mdfv3 14474 285
asammdf 2.0.0 nodata mdfv3 9621 215
mdfreader 0.2.5 mdfv3 31 526
asammdf 2.0.0 mdfv4 2066 450
asammdf 2.0.0 compression mdfv4 16944 359
asammdf 2.0.0 nodata mdfv4 12364 292
mdfreader 0.2.5 mdfv4 39 739

Graphical results

_images/open.png
_images/open_ram_usage.png
_images/save.png
_images/save_ram_usage.png
_images/get_all_channels.png
_images/get_all_channels_ram_usage.png

x86 Python results

The test environment used for 32 bit tests had:

  • Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]
  • Windows-7-6.1.7601-SP1
  • Intel64 Family 6 Model 94 Stepping 3, GenuineIntel (i7-6820Q)
  • 16GB installed RAM

The notations used in the results have the following meaning:

  • nodata = MDF object created with load_measured_data=False (raw channel data no loaded into RAM)
  • compression = MDF object created with compression=True (raw channel data loaded into RAM and compressed)
  • noconvert = MDF object created with convertAfterRead=False

Raw data

Open file Time [ms] RAM [MB]
asammdf 2.0.0 mdfv3 851 283
asammdf 2.0.0 compression mdfv3 1149 190
asammdf 2.0.0 nodata mdfv3 765 129
mdfreader 0.2.5 mdfv3 3633 453
mdfreader 0.2.5 no convert mdfv3 3309 319
asammdf 2.0.0 mdfv4 1854 339
asammdf 2.0.0 compression mdfv4 2191 236
asammdf 2.0.0 nodata mdfv4 1772 173
mdfreader 0.2.5 mdfv4 42177 576
mdfreader 0.2.5 noconvert mdfv4 41799 447
Save file Time [ms] RAM [MB]
asammdf 2.0.0 mdfv3 564 286
asammdf 2.0.0 compression mdfv3 756 194
mdfreader 0.2.5 mdfv3 17499 1236
asammdf 2.0.0 mdfv4 906 347
asammdf 2.0.0 compression mdfv4 1112 244
mdfreader 0.2.5 mdfv4 15027 1698
Get all channels Time [ms] RAM [MB]
asammdf 2.0.0 mdfv3 3224 293
asammdf 2.0.0 compression mdfv3 25019 201
asammdf 2.0.0 nodata mdfv3 18824 144
mdfreader 0.2.5 mdfv3 35 454
asammdf 2.0.0 mdfv4 2513 349
asammdf 2.0.0 compression mdfv4 25140 250
asammdf 2.0.0 nodata mdfv4 19862 188
mdfreader 0.2.5 mdfv4 50 576