splitjob performance tests


Quick links to results for different compression programs:
Graphs with results
gzip with 50 MB block size on machines with few cores
Different compression programs with 10 MB block size on machines with many cores

Description of the tests

The input data file linux-3.15.6.tar (the Linux kernel source) with the size 571576320 bytes (546 MB) is being compressed in parallel by splitting up the file in blocks of 50 MB for a possibility of up to 11 simultaneous jobs or 10 MB for a possibility of up to 55 simultaneous jobs.

Each command is run 3 times and the best time of these 3 times is used in the result. The file is read from a cached local file system and output is sent to /dev/null so the time measured should only be the time needed for compression. The times was measured with the time command from the bash shell. In real life usage you might have to use some program like bfr to get best compression performance and avoid waiting for input or output.

The block sizes 50 MB and 10 MB are only chosen to make it possible to run enough parallel jobs on this file. Depending on the compression method a small block size might affect the resulting compressed size as described in this test with different block sizes and different compression programs.

Graphs with all data

gzip with 50 MB block size on machines with few cores

Below are tables with all data and comments.

Different compression programs with 10 MB block size on machines with many cores

Below are tables with all data and comments. Logarithmic scales have been used to make it easier to see were the performance graphs for 5 networked machines crosses the performance graph of a single machine.

gzip with 50 MB block size on machines with few cores

With gzip and 50 MB block size the resulting compressed data becomes 121485376 bytes (115 MB) compared to 121474801 bytes (115 MB) for gzip without splitjob.

VIA Nano U3300 @1200MHz (single core)

CommandjobstimesecondsComment
gzip < linux-3.15.6.tar > /dev/nullNA1m17.595s77.595Compression without splitjob
splitjob -b 50M -j 1 gzip < linux-3.15.6.tar > /dev/null11m20.783s80.783Splitjob adds a slight overhead but gives no speedup on a single core machine.
splitjob -b 50M -j 2 gzip < linux-3.15.6.tar > /dev/null21m23.084s83.084
splitjob -b 50M -j 3 gzip < linux-3.15.6.tar > /dev/null31m37.089s97.089
splitjob -b 50M -j 4 gzip < linux-3.15.6.tar > /dev/null41m32.139s92.139

Intel Pentium Dual CPU T3200 @2.00 GHz (dual core, no hyperthreading)

CommandjobstimesecondsComment
gzip < linux-3.15.6.tar > /dev/nullNA0m35.625s35.625Compression without splitjob
splitjob -b 50M -j 1 gzip < linux-3.15.6.tar > /dev/null10m37.623s37.623Splitjob adds a slight overhead.
splitjob -b 50M -j 2 gzip < linux-3.15.6.tar > /dev/null20m21.751s21.751An extra core is useful.
splitjob -b 50M -j 3 gzip < linux-3.15.6.tar > /dev/null30m20.092s20.092Not much point in adding more jobs than cores.
splitjob -b 50M -j 4 gzip < linux-3.15.6.tar > /dev/null40m20.793s20.793
splitjob -b 50M -j 5 gzip < linux-3.15.6.tar > /dev/null50m21.054s21.054
splitjob -b 50M -j 6 gzip < linux-3.15.6.tar > /dev/null60m20.691s20.691
splitjob -b 50M -j 7 gzip < linux-3.15.6.tar > /dev/null70m20.801s20.801
splitjob -b 50M -j 8 gzip < linux-3.15.6.tar > /dev/null80m20.778s20.778
splitjob -b 50M -j 9 gzip < linux-3.15.6.tar > /dev/null90m20.857s20.857
splitjob -b 50M -j 10 gzip < linux-3.15.6.tar > /dev/null100m21.666s21.666

Intel Core i3 4130 @3.40 GHz (dual core + hyperthreading)

CommandjobstimesecondsComment
gzip < linux-3.15.6.tar > /dev/nullNA0m18.631s18.631Compression without splitjob
splitjob -b 50M -j 1 gzip < linux-3.15.6.tar > /dev/null10m19.147s19.147Splitjob adds a slight overhead.
splitjob -b 50M -j 2 gzip < linux-3.15.6.tar > /dev/null20m11.525s11.525An extra core is useful.
splitjob -b 50M -j 3 gzip < linux-3.15.6.tar > /dev/null30m8.677s8.677Hyperthreading is not as good as real cores, but at least it is to some use.
splitjob -b 50M -j 4 gzip < linux-3.15.6.tar > /dev/null40m7.298s7.298
splitjob -b 50M -j 5 gzip < linux-3.15.6.tar > /dev/null50m7.304s7.304Not much point in adding more jobs than cores.
splitjob -b 50M -j 6 gzip < linux-3.15.6.tar > /dev/null60m6.956s6.956
splitjob -b 50M -j 7 gzip < linux-3.15.6.tar > /dev/null70m6.982s6.982
splitjob -b 50M -j 8 gzip < linux-3.15.6.tar > /dev/null80m6.699s6.699
splitjob -b 50M -j 9 gzip < linux-3.15.6.tar > /dev/null90m7.002s7.002
splitjob -b 50M -j 10 gzip < linux-3.15.6.tar > /dev/null100m7.034s7.034

gzip with 10 MB block size on machines with many cores

With gzip and 10 MB block size the resulting compressed data becomes 121521501 bytes (115 MB) compared to 121474801 bytes (115 MB) for gzip without splitjob.

dual Xeon X5492 @3.40GHz (8 cores total, no hyperthreading)

CommandjobstimesecondsComment
gzip < linux-3.15.6.tar > /dev/nullNA0m20.733s20.733Compression without splitjob
splitjob -b 10M -j 1 gzip < linux-3.15.6.tar > /dev/null10m21.642s21.642Splitjob adds a slight overhead.
splitjob -b 10M -j 2 gzip < linux-3.15.6.tar > /dev/null20m11.061s11.061Extra cores are useful.
splitjob -b 10M -j 3 gzip < linux-3.15.6.tar > /dev/null30m7.688s7.688
splitjob -b 10M -j 4 gzip < linux-3.15.6.tar > /dev/null40m5.823s5.823
splitjob -b 10M -j 5 gzip < linux-3.15.6.tar > /dev/null50m4.985s4.985
splitjob -b 10M -j 6 gzip < linux-3.15.6.tar > /dev/null60m4.321s4.321
splitjob -b 10M -j 7 gzip < linux-3.15.6.tar > /dev/null70m3.689s3.689
splitjob -b 10M -j 8 gzip < linux-3.15.6.tar > /dev/null80m3.387s3.387
splitjob -b 10M -j 9 gzip < linux-3.15.6.tar > /dev/null90m3.250s3.250Not much point in adding more jobs than cores.
splitjob -b 10M -j 10 gzip < linux-3.15.6.tar > /dev/null100m3.212s3.212
splitjob -b 10M -j 11 gzip < linux-3.15.6.tar > /dev/null110m3.156s3.156
splitjob -b 10M -j 12 gzip < linux-3.15.6.tar > /dev/null120m3.190s3.190

5 machines with dual Xeon X5492 @3.40GHz (40 cores total, no hyperthreading)

In this test gzip is used on localhost as well as 4 other machines (h2, h3, h4 and h5). The other machines will be accessed with ssh, when more than 1 command is given to splitjob the commands are called in round robin order.
CommandjobstimesecondsComment
gzip < linux-3.15.6.tar > /dev/nullNA0m20.733s20.733Compression without splitjob
splitjob -b 10M -j 1 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null10m30.380s30.380Splitjob adds a slight overhead and those ssh logins adds even more overhead.
splitjob -b 10M -j 2 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null20m15.452s15.452Extra cores are useful, but the 1 Gb/s network gives a bottleneck. 80% of the data is compressed on remote machines, that is 0.8*571576320=436 MB. 436 MB / 4.3 s is 100 MB/s which is about what you would expect being capable of sending out to remote machines on a 1 Gb/s network.

With gzip we got better performance by not using any remote machines. For this particular case, we would probably get the best performance with a command like:

splitjob -b 10M -j 12 gzip gzip "ssh -x h2 gzip"
The above command would place 8 jobs on localhost and 4 jobs on a remote machine and would probably take about 2.2 seconds. However, I did not realize that the network was the bottleneck while I still was at the test machines so I haven't run this test.
splitjob -b 10M -j 3 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null30m10.696s10.696
splitjob -b 10M -j 4 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null40m8.068s8.068
splitjob -b 10M -j 5 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null50m7.075s7.075
splitjob -b 10M -j 6 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null60m6.050s6.050
splitjob -b 10M -j 7 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null70m5.258s5.258
splitjob -b 10M -j 8 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null80m4.853s4.853
splitjob -b 10M -j 9 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null90m4.550s4.550
splitjob -b 10M -j 10 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null100m4.503s4.503
splitjob -b 10M -j 11 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null110m4.307s4.307
splitjob -b 10M -j 12 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null120m4.282s4.282
splitjob -b 10M -j 13 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null130m4.233s4.233
splitjob -b 10M -j 14 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null140m4.237s4.237
splitjob -b 10M -j 15 gzip "ssh -x h2 gzip" "ssh -x h3 gzip" "ssh -x h4 gzip" "ssh -x h5 gzip" < linux-3.15.6.tar > /dev/null150m4.248s4.248

bzip2 with 10 MB block size on machines with many cores

With bzip2 and 10 MB block size the resulting compressed data becomes 95272415 bytes (90 MB) compared to 95116256 bytes (90 MB) for bzip2 without splitjob.

dual Xeon X5492 @3.40GHz (8 cores total, no hyperthreading)

CommandjobstimesecondsComment
bzip2 < linux-3.15.6.tar > /dev/nullNA0m58.884s58.884Compression without splitjob
splitjob -b 10M -j 1 bzip2 < linux-3.15.6.tar > /dev/null11m0.379s60.379Splitjob adds a slight overhead.
splitjob -b 10M -j 2 bzip2 < linux-3.15.6.tar > /dev/null20m30.932s30.932Extra cores are useful.
splitjob -b 10M -j 3 bzip2 < linux-3.15.6.tar > /dev/null30m21.707s21.707
splitjob -b 10M -j 4 bzip2 < linux-3.15.6.tar > /dev/null40m16.028s16.028
splitjob -b 10M -j 5 bzip2 < linux-3.15.6.tar > /dev/null50m14.289s14.289
splitjob -b 10M -j 6 bzip2 < linux-3.15.6.tar > /dev/null60m12.816s12.816
splitjob -b 10M -j 7 bzip2 < linux-3.15.6.tar > /dev/null70m11.798s11.798
splitjob -b 10M -j 8 bzip2 < linux-3.15.6.tar > /dev/null80m10.013s10.013
splitjob -b 10M -j 9 bzip2 < linux-3.15.6.tar > /dev/null90m9.994s9.994Not much point in adding more jobs than cores.
splitjob -b 10M -j 10 bzip2 < linux-3.15.6.tar > /dev/null100m9.840s9.840
splitjob -b 10M -j 11 bzip2 < linux-3.15.6.tar > /dev/null110m9.632s9.632
splitjob -b 10M -j 12 bzip2 < linux-3.15.6.tar > /dev/null120m9.817s9.817

5 machines with dual Xeon X5492 @3.40GHz (40 cores total, no hyperthreading)

In this test bzip2 is used on localhost as well as 4 other machines (h2, h3, h4 and h5).
CommandjobstimesecondsComment
bzip2 < linux-3.15.6.tar > /dev/nullNA0m58.884s58.884Compression without splitjob
splitjob -b 10M -j 1 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null11m9.524s69.524Splitjob adds a slight overhead and those ssh logins adds even more overhead.
splitjob -b 10M -j 2 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null20m35.654s35.654Extra cores (both local and remote) are useful. Performance scales rather linear with number of jobs.
splitjob -b 10M -j 3 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null30m24.710s24.710
splitjob -b 10M -j 4 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null40m18.427s18.427
splitjob -b 10M -j 5 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null50m15.400s15.400
splitjob -b 10M -j 6 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null60m12.817s12.817
splitjob -b 10M -j 7 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null70m12.025s12.025
splitjob -b 10M -j 8 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null80m10.100s10.100
splitjob -b 10M -j 9 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null90m9.193s9.193
splitjob -b 10M -j 10 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null100m8.597s8.597
splitjob -b 10M -j 11 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null110m7.616s7.616
splitjob -b 10M -j 12 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null120m7.517s7.517With 546 MB to compress in blocks of 10 MB each we have 55 blocks to compress. 54 blocks are 10 MB, the last block is 6 MB.

With 12 and more parallel jobs we start seeing quantification effects on the performance. The blocks will be compressed in parallel with 12 jobs like 12+12+12+12+7 and with 13 jobs like 13+13+13+13+3. Compressing the last 3 blocks might take as long time as compressing the last 7 blocks in parallel. However even though all blocks have the same size the time to compress each block might depend upon the contents in the block.

splitjob -b 10M -j 13 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null130m6.967s6.967
splitjob -b 10M -j 14 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null140m6.339s6.339
splitjob -b 10M -j 15 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null150m6.219s6.219
splitjob -b 10M -j 16 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null160m5.688s5.688
splitjob -b 10M -j 17 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null170m5.545s5.545
splitjob -b 10M -j 18 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null180m5.419s5.419
splitjob -b 10M -j 19 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null190m5.406s5.406
splitjob -b 10M -j 20 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null200m5.391s5.391
splitjob -b 10M -j 21 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null210m5.327s5.327
splitjob -b 10M -j 22 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null220m5.363s5.363
splitjob -b 10M -j 23 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null230m4.833s4.833
splitjob -b 10M -j 24 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null240m4.844s4.844
splitjob -b 10M -j 25 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null250m4.865s4.865
splitjob -b 10M -j 26 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null260m4.907s4.907
splitjob -b 10M -j 27 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null270m4.831s4.831
splitjob -b 10M -j 28 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null280m4.903s4.903
splitjob -b 10M -j 29 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null290m4.808s4.808
splitjob -b 10M -j 30 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null300m4.753s4.753
splitjob -b 10M -j 31 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null310m4.693s4.693
splitjob -b 10M -j 32 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null320m4.747s4.747
splitjob -b 10M -j 54 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null540m4.580s4.580
splitjob -b 10M -j 55 bzip2 "ssh -x h2 bzip2" "ssh -x h3 bzip2" "ssh -x h4 bzip2" "ssh -x h5 bzip2" < linux-3.15.6.tar > /dev/null550m4.573s4.573This is as close as we get to about 4.3 seconds which was the network bottleneck we found with gzip. However, 55 jobs on only 40 cores will not get 100% CPU each so 4.6 seconds is still rather good.

xz with 10 MB block size on machines with many cores

With xz and 10 MB block size the resulting compressed data becomes 84431992 bytes (80 MB) compared to 82223868 bytes (78 MB) for xz without splitjob.

dual Xeon X5492 @3.40GHz (8 cores total, no hyperthreading)

CommandjobstimesecondsComment
xz < linux-3.15.6.tar > /dev/nullNA4m51.192s291.192Compression without splitjob
splitjob -b 10M -j 1 xz < linux-3.15.6.tar > /dev/null14m26.274s266.274Splitjob now gives a negative overhead. This might seem good, but the explanation is that the small 10 MB blocks are not enough for best xz compression, this also shows in the resulting compressed size which increases about 3%.
splitjob -b 10M -j 2 xz < linux-3.15.6.tar > /dev/null22m13.392s133.392Extra cores are useful.
splitjob -b 10M -j 3 xz < linux-3.15.6.tar > /dev/null31m30.535s90.535
splitjob -b 10M -j 4 xz < linux-3.15.6.tar > /dev/null41m9.514s69.514
splitjob -b 10M -j 5 xz < linux-3.15.6.tar > /dev/null51m0.400s60.400
splitjob -b 10M -j 6 xz < linux-3.15.6.tar > /dev/null60m51.910s51.910
splitjob -b 10M -j 7 xz < linux-3.15.6.tar > /dev/null70m47.072s47.072
splitjob -b 10M -j 8 xz < linux-3.15.6.tar > /dev/null80m41.383s41.383
splitjob -b 10M -j 9 xz < linux-3.15.6.tar > /dev/null90m41.562s41.562Not much point in adding more jobs than cores.
splitjob -b 10M -j 10 xz < linux-3.15.6.tar > /dev/null100m43.046s43.046

5 machines with dual Xeon X5492 @3.40GHz (40 cores total, no hyperthreading)

In this test xz is used on localhost as well as 4 other machines (h2, h3, h4 and h5).
CommandjobstimesecondsComment
xz < linux-3.15.6.tar > /dev/nullNA4m51.192s291.192Compression without splitjob
splitjob -b 10M -j 1 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null14m37.567s277.567Splitjob removes more overhead than the ssh logins add.
splitjob -b 10M -j 2 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null22m19.368s139.368Extra cores (both local and remote) are useful. Performance scales rather linear with number of jobs.
splitjob -b 10M -j 3 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null31m34.599s94.599
splitjob -b 10M -j 4 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null41m12.415s72.415
splitjob -b 10M -j 5 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null50m59.060s59.060
splitjob -b 10M -j 6 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null60m49.108s49.108
splitjob -b 10M -j 7 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null70m43.845s43.845
splitjob -b 10M -j 8 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null80m38.889s38.889
splitjob -b 10M -j 9 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null90m33.951s33.951
splitjob -b 10M -j 10 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null100m33.564s33.564
splitjob -b 10M -j 11 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null110m28.768s28.768
splitjob -b 10M -j 12 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null120m28.548s28.548Again we are seeing the quantification effects we saw with bzip2 on multiple hosts.
splitjob -b 10M -j 13 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null130m27.728s27.728
splitjob -b 10M -j 14 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null140m23.509s23.509
splitjob -b 10M -j 15 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null150m23.237s23.237
splitjob -b 10M -j 16 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null160m22.780s22.780
splitjob -b 10M -j 17 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null170m22.399s22.399
splitjob -b 10M -j 18 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null180m18.701s18.701
splitjob -b 10M -j 19 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null190m18.612s18.612
splitjob -b 10M -j 20 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null200m18.555s18.555
splitjob -b 10M -j 21 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null210m18.591s18.591
splitjob -b 10M -j 22 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null220m18.774s18.774
splitjob -b 10M -j 23 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null230m18.849s18.849
splitjob -b 10M -j 24 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null240m18.328s18.328
splitjob -b 10M -j 25 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null250m17.873s17.873
splitjob -b 10M -j 26 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null260m17.394s17.394
splitjob -b 10M -j 27 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null270m14.524s14.524
splitjob -b 10M -j 28 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null280m14.330s14.330
splitjob -b 10M -j 29 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null290m14.023s14.023
splitjob -b 10M -j 30 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null300m13.904s13.904
splitjob -b 10M -j 31 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null310m14.049s14.049
splitjob -b 10M -j 32 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null320m14.298s14.298
splitjob -b 10M -j 33 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null330m14.261s14.261
splitjob -b 10M -j 34 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null340m13.936s13.936
splitjob -b 10M -j 35 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null350m13.915s13.915
splitjob -b 10M -j 36 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null360m13.831s13.831
splitjob -b 10M -j 37 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null370m13.859s13.859
splitjob -b 10M -j 38 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null380m13.741s13.741
splitjob -b 10M -j 39 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null390m13.902s13.902
splitjob -b 10M -j 40 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null400m13.749s13.749
splitjob -b 10M -j 41 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null410m13.769s13.769
splitjob -b 10M -j 42 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null420m14.064s14.064
splitjob -b 10M -j 52 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null520m14.272s14.272
splitjob -b 10M -j 53 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null530m13.461s13.461
splitjob -b 10M -j 54 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null540m10.794s10.794
splitjob -b 10M -j 55 xz "ssh -x h2 xz" "ssh -x h3 xz" "ssh -x h4 xz" "ssh -x h5 xz" < linux-3.15.6.tar > /dev/null550m10.772s10.772This is as good as it gets with xz and 40 cores, the network is no bottleneck. If we would have had 55 cores we might have gotten closer to 7.5 seconds as we got 14.5 seconds with 27 jobs. But 7.5*55/40 gets about 10.3 which is rather close to the 10.8 seconds we got.

Splitjob performance example comparison

With gzip without splitjob we could produce a compressed data size of 115 MB in about 20 seconds. With a network of equal machines xz with splitjob compressed the same data to 80 MB in about 10 seconds.

Back to splitjob main page