Blob Blame History Raw
ODP: [Bug-tar] GNU tar, star and BSD tar speed comparison +new script

Jan Psota
Thu, 25 Oct 2007 06:51:13 -0700

Latest TCP script at the bottom (3180 bytes).
4 tests: 64bit dual core Athlon tmpfs / disk (reiserfs) - 60MB/s,
        32bit Athlon tmpfs / disk (reiserfs) - 55MB/s
Both machines were idle -- used for testing only.
Tarball and extracted files were on different physical devices.
Test data: linux 2.6.22/3 kernel sources for memory operations,
for the other data average file size should bring enough info.

2 x [...] processor means 1 processor with 2 cores (2 entries in cpuinfo).
Archive format is set to pax (Joerg).
Let's end with it. I only wanted to send You a new version of TCP script :-).

--
Jan Psota

TCP, version 2007-10-25
Linux 2.6.22-suspend2-r2 / Gentoo Base System release 2.0.0_rc5
2012MB of memory, 2 x AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ 2211.348 
512 KB 4426.24 bmips
gcc (GCC) 4.2.2 (Gentoo 4.2.2 p1.0)
CFLAGS="-O2 -march=k8 -pipe"

bsdtar: bsdtar 2.3.4 - libarchive 2.3.4
gnutar: tar (GNU tar) 1.19
star:   star: star 1.5a85 (x86_64-unknown-linux-gnu)

best time of 5 repetitions,
        src=linux-2.6.23, 291M in 23867 files, avg 13KB/file,
        archive=/tmp/tcp.tar, extract to /tmp/tcptmp
program operation       real    user    system  %CPU         speed
bsdtar  create          0.764   0.232   0.532   99.96       370308 KB/s
gnutar  create          0.743   0.200   0.512   95.87       380775 KB/s
star    create          0.587   0.040   0.820   100.00      441247 KB/s

bsdtar  list            0.164   0.096   0.068   99.84      1579341 KB/s
gnutar  list            0.218   0.064   0.152   98.92      1188128 KB/s
star    list            0.359   0.044   0.240   79.09       721481 KB/s

bsdtar  extract         0.733   0.200   0.504   96.02       353358 KB/s
gnutar  extract         0.625   0.092   0.508   96.02       414419 KB/s
star    extract         0.875   0.096   0.980   100.00      296013 KB/s

bsdtar  compare         0.001   0.000   0.000   0.00     259012000 KB/s
gnutar  compare         0.719   0.288   0.400   95.66       360239 KB/s
star    compare         0.695   0.224   0.636   100.00      372679 KB/s

[...]
best time of 3 repetitions,
        src=/home, 3.2G in 7447 files, avg 554KB/file,
        archive=/var/tcp.tar, extract to /mnt/a/tcptmp
program operation       real    user    system  %CPU         speed
bsdtar  create          184.680 0.552   13.365  7.53         17958 KB/s
gnutar  create          159.240 0.256   12.417  7.95         20827 KB/s
star    create          181.779 0.140   14.789  8.21         18203 KB/s

bsdtar  list            0.053   0.032   0.016   91.41     62435471 KB/s
gnutar  list            56.535  0.136   3.764   6.89         58531 KB/s
star    list            56.652  0.080   5.236   9.38         58410 KB/s

bsdtar  extract         78.914  0.820   15.149  20.23        41932 KB/s
gnutar  extract         78.480  0.196   14.197  18.33        42164 KB/s
star    extract         79.439  0.132   12.973  16.49        41655 KB/s

bsdtar  compare         0.001   0.000   0.000   0.00    3309080000 KB/s
gnutar  compare         61.771  3.464   8.905   20.02        53570 KB/s
star    compare         57.561  1.728   9.897   20.19        57488 KB/s


Linux 2.6.22-suspend2-smp / Gentoo Base System release 2.0.0_rc5
504MB of memory, 1 x AMD Athlon(tm) Processor 1500.033 256 KB 3002.55 bmips
gcc (GCC) 4.2.2 (Gentoo 4.2.2 p1.0)
CFLAGS="-O2 -march=athlon-xp -mfpmath=sse -frename-registers -pipe"

bsdtar: bsdtar 2.3.4 - libarchive 2.3.4
gnutar: tar (GNU tar) 1.19
star:   star: star 1.5a85 (i686-pc-linux-gnu)

best time of 3 repetitions,
        src=/usr/src/linux-2.6.22-suspend2/drivers, 119M in 5900 files,
        avg 21KB/file, archive=/tmp/tcp.tar, extract to /tmp/tcptmp
program operation       real    user    system  %CPU         speed
bsdtar  create          1.329   0.192   1.132   99.63        89784 KB/s
gnutar  create          1.223   0.124   1.092   99.46        97566 KB/s
star    create          1.848   0.036   1.708   94.36        61372 KB/s

bsdtar  list            0.167   0.060   0.108   100.00      679137 KB/s
gnutar  list            0.161   0.040   0.124   100.00      704447 KB/s
star    list            0.859   0.044   0.716   88.51       132032 KB/s

bsdtar  extract         1.186   0.172   1.012   99.87        95629 KB/s
gnutar  extract         1.064   0.056   1.004   99.63       106593 KB/s
star    extract         1.920   0.088   1.724   94.40        59070 KB/s

bsdtar  compare         0.002   0.000   0.000   0.00      56708000 KB/s
gnutar  compare         0.925   0.232   0.692   99.90       122611 KB/s
star    compare         1.569   0.376   1.096   93.79        72285 KB/s

[...]
best time of 3 repetitions,
        src=/home/jasiu, 2.1G in 8416 files, avg 277KB/file,
        archive=/home/j2/tcp.tar, extract to /mnt/a/tar/tcptmp
program operation       real    user    system  %CPU         speed
bsdtar  create          182.171 1.692   29.130  16.91        11584 KB/s
gnutar  create          174.999 0.632   27.450  16.04        12059 KB/s
star    create          180.004 0.360   41.795  23.41        11677 KB/s

bsdtar  list            0.214   0.076   0.136   99.04      9822294 KB/s
gnutar  list            0.210   0.076   0.136   100.00    10009385 KB/s
star    list            43.462  0.148   18.109  42.00        48363 KB/s

bsdtar  extract         94.912  4.476   31.574  37.98        22146 KB/s
gnutar  extract         94.657  0.396   29.462  31.54        22206 KB/s
star    extract         100.814 0.400   39.906  39.98        20849 KB/s

bsdtar  compare         0.003   0.000   0.004   100.00   700657000 KB/s
gnutar  compare         80.174  3.932   20.365  30.30        26217 KB/s
star    compare         73.911  8.341   27.670  48.72        28439 KB/s

=============================================================

Note by Tim Kientzle:  The "bsdtar compare" results here are
invalid since bsdtar does not support that operation.
For the list numbers, note that libarchive automatically optimizes
list operations on uncompressed tar archives on disk by using lseek()
to skip over the bodies of entries.  GNU tar added an option to
provide the same feature.

The biggest problem with these tests is that they only
cover uncompressed archives stored on disk.  The results for
compressed archives and/or archives stored on tape are
likely quite different.