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.6.3 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. 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.3 mdfv3 792 364
asammdf 2.6.3 nodata mdfv3 568 188
mdfreader 0.2.6 mdfv3 2693 545
mdfreader 0.2.6 compress mdfv3 3855 267
mdfreader 0.2.6 compress bcolz 6 mdfv3 3865 1040
mdfreader 0.2.6 noDataLoading mdfv3 1438 199
asammdf 2.6.3 mdfv4 1866 435
asammdf 2.6.3 nodata mdfv4 1480 244
mdfreader 0.2.6 mdfv4 5394 1307
mdfreader 0.2.6 compress mdfv4 6541 1023
mdfreader 0.2.6 compress bcolz 6 mdfv4 6670 1746
mdfreader 0.2.6 noDataLoading mdfv4 3940 944
Save file Time [ms] RAM [MB]
asammdf 2.6.3 mdfv3 346 365
asammdf 2.6.3 nodata mdfv3 374 194
mdfreader 0.2.6 mdfv3 7861 576
mdfreader 0.2.6 compress mdfv3 7935 543
mdfreader 0.2.6 compress bcolz 6 mdfv3 7563 1041
asammdf 2.6.3 mdfv4 475 441
asammdf 2.6.3 nodata mdfv4 443 256
mdfreader 0.2.6 mdfv4 5979 1329
mdfreader 0.2.6 compress mdfv4 6194 1287
mdfreader 0.2.6 compress bcolz6 mdfv4 5884 1763
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.6.3 mdfv3 590 370
asammdf 2.6.3 nodata mdfv3 8521 199
mdfreader 0.2.6 mdfv3 59 545
mdfreader 0.2.6 noDataLoading mdfv3 18000000 198
mdfreader 0.2.6 compress mdfv3 609 270
mdfreader 0.2.6 compress bcolz 6 mdfv3 252 1042
asammdf 2.6.3 mdfv4 627 443
asammdf 2.6.3 nodata mdfv4 16623 254
mdfreader 0.2.6 mdfv4 60 1307
mdfreader 0.2.6 noDataLoading mdfv4 18000000 943
mdfreader 0.2.6 compress mdfv4 591 1030
mdfreader 0.2.6 compress bcolz 6 mdfv4 277 1753
Convert file Time [ms] RAM [MB]
asammdf 2.6.3 v3 to v4 4674 833
asammdf 2.6.3 v3 to v4 nodata 20945 578
asammdf 2.6.3 v4 to v3 5057 835
asammdf 2.6.3 v4 to v3 nodata 30132 723
Merge files Time [ms] RAM [MB]
asammdf 2.6.3 v3 10545 1439
asammdf 2.6.3 v3 nodata 30476 526
asammdf 2.6.3 v4 13780 1524
asammdf 2.6.3 v4 nodata 51810 587

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.3 mdfv3 951 286
asammdf 2.6.3 nodata mdfv3 639 118
mdfreader 0.2.6 mdfv3 3490 458
mdfreader 0.2.6 compress mdfv3 4624 185
mdfreader 0.2.6 compress bcolz 6 mdfv3 4654 941
mdfreader 0.2.6 noDataLoading mdfv3 1884 120
asammdf 2.6.3 mdfv4 2251 330
asammdf 2.6.3 nodata mdfv4 1791 150
mdfreader 0.2.6 mdfv4 6447 869
mdfreader 0.2.6 compress mdfv4 7549 586
mdfreader 0.2.6 compress bcolz 6 mdfv4 7730 1294
mdfreader 0.2.6 noDataLoading mdfv4 4553 522
Save file Time [ms] RAM [MB]
asammdf 2.6.3 mdfv3 448 290
asammdf 2.6.3 nodata mdfv3 467 125
mdfreader 0.2.6 mdfv3 8992 481
mdfreader 0.2.6 compress mdfv3 9228 452
mdfreader 0.2.6 compress bcolz 6 mdfv3 8751 941
asammdf 2.6.3 mdfv4 630 334
asammdf 2.6.3 nodata mdfv4 628 159
mdfreader 0.2.6 mdfv4 6880 891
mdfreader 0.2.6 compress mdfv4 7101 852
mdfreader 0.2.6 compress bcolz6 mdfv4 6839 1311
Get all channels (36424 calls) Time [ms] RAM [MB]
asammdf 2.6.3 mdfv3 779 291
asammdf 2.6.3 nodata mdfv3 18127 128
mdfreader 0.2.6 mdfv3 80 458
mdfreader 0.2.6 noDataLoading mdfv3 18000000 118
mdfreader 0.2.6 compress mdfv3 684 187
mdfreader 0.2.6 compress bcolz 6 mdfv3 298 942
asammdf 2.6.3 mdfv4 801 335
asammdf 2.6.3 nodata mdfv4 25176 157
mdfreader 0.2.6 mdfv4 78 870
mdfreader 0.2.6 noDataLoading mdfv4 18000000 523
mdfreader 0.2.6 compress mdfv4 686 593
mdfreader 0.2.6 compress bcolz 6 mdfv4 319 1301
Convert file Time [ms] RAM [MB]
asammdf 2.6.3 v3 to v4 5884 682
asammdf 2.6.3 v3 to v4 nodata 27892 479
asammdf 2.6.3 v4 to v3 5836 680
asammdf 2.6.3 v4 to v3 nodata 35283 627
Merge files Time [ms] RAM [MB]
asammdf 2.6.3 v3 13305 1228
asammdf 2.6.3 v3 nodata 52775 346
asammdf 2.6.3 v4 16069 1267
asammdf 2.6.3 v4 nodata 70402 364