NAF Benchmark Setup

Test machine

CPU: dual Xeon E5-2643v3 (3.4GHz, 6 cores) workstation. Hyperthreading is off. RAM: 128 GB DDR4-2133 ECC Registered. Storage: 4 x 2 TB SSD, in RAID 0. OS: Ubuntu 18.04.1 LTS.

Test setup

Only one compression or decompression task was running at each time. All compression tasks were complete first, then all decompression tasks were executed.

For compression, first the genome was loaded into disk cache (by running 'cat'). So all subsequent compression tasks used cached input file.

For decompression, for each compressed file, first an idle decompression run was performed and not timed. This idle run serves two purposes: 1. Load the compressed file(s) into disk cache. 2. The decompressed output is verified for identity with the original file (using md5sum).

For each compression or decompression task (combination of compressor and parametes), if the first run took under 30 seconds, the same run was repeated 10 times and smallest time was used. This allows to suppress measurement noise for fast runs, while still completing the slow runs in reasonable time.

Each compressor was used with the range of its available parameters. The best parameter was selected for each of the metrics used in comparison below.

Compressors used

FormatCompressorVersionOptionsLevels
fastacat8.22catnone
szsnzip1.0.4snzip -cnone
lz4lz41.6lz4 -c-1 to -9
gzgzip1.6gzip -c-1 to -9
bz2bzip21.0.6bzip2 -cz-1 to -9
brbrotli1.0.7brotli -c-q 0 to -q 11
zstdzstd1.3.8zstd -c-1 to --ultra -22
xzxz5.2.2xz -zkc-0 to -e9
zpaqzpaq17.15zpaq a-m1 to -m4
blastblast1,22.6.0+makeblastdb -dbtype nucl -title ''none
2bitfaToTwoBit1,3?faToTwoBit -longnone
mfcmfcompress11.01MFCompressC-1 to -3
dlimdeliminate11.3cdelim anone
nafennaf1.0.0ennaf-1 to -22

1 Operates via wrapper due to inability to pipe input or output or other deficiencies.

2 Wrapper stores mask separately.

3 Wrapper stores ambiguous IUPAC nucleotides separately.