Version 0 of filesystem benchmarking

Updated 2003-12-20 21:14:05

Some aspects of Tcl's filesystem (glob, file, pwd, cd primarily) became a bit slower with the vfs layer that was introducedin Tcl 8.4.0. This has gradually been addressed with later Tcl 8.4.x releases and also with Tcl 8.5.x. The current timings are as follows:

000 VERSIONS
1:8.5a0 2:8.4.5 3:8.3.5
    001 FILE exec interp                              13185   14290   15333
    002 FILE exec interp: pkg require                 55423   73324   31033
    003 FILE exec interp: pkg require+                88259  102743   47400
    004 FILE exec interp: pkg require+auto_path       70363   90178   44067
    005 FILE exists tmpfile (obj)                        20      21     100
    006 FILE exists ~                                    19      13       0
    007 FILE exists! absolute tmpfile (obj)              19      18       0
    008 FILE exists! absolute tmpfile (str)             184     360       0
    009 FILE exists! relative tmpfile (obj)              17      31     100
    010 FILE exists! relative tmpfile (str)             330     493       0
    011 FILE exists! tmpfile (obj)                       21      21       0
    012 FILE exists! tmpfile (str)                      289     435       0
    013 FILE glob  tmpdir (30 entries) / -dir          7495    5210    5200
    014 FILE glob  tmpdir (30 entries) / cd            5720    6001    5210
    015 FILE glob  tmpdir (subset of 30 entries)       2519    5073    4910
    016 FILE glob / all subcommands                   77893   68271  108560
    017 FILE glob / atime                              7698    8148   14120
    018 FILE glob / attributes                        49962   52209   47170
    019 FILE glob / dirname                            5710    5877    5310
    020 FILE glob / executable                         9542    7640    6210
    021 FILE glob / exists                             7237    7525    6110
    022 FILE glob / extension                          5330    5237    5100
    023 FILE glob / isdirectory                        7713    8021   12620
    024 FILE glob / isfile                             7728    8159   12620
    025 FILE glob / mtime                              7746    8007   12620
    026 FILE glob / owned                              7719    7931   12620
    027 FILE glob / readable                          11827    7658    6210
    028 FILE glob / rootname                           5341    5358    5100
    029 FILE glob / size                               7661    7997   12620
    030 FILE glob / tail                               5428    5518    5210
    031 FILE glob / writable                          11699    7608    6310
    032 FILE glob deep dirs (30 entries+)             59103   58396   49970
    033 FILE glob deep dirs (subset of 30 entries+)   36834   57647   48970
    034 FILE glob dirs (30 entries)                    4948    5108   12920
    035 FILE recurse / -dir                          107553  113229  140300
    036 FILE recurse / cd                            132796  180153  137800
    037 FILE recurse+stat / -dir                     138304  153763  247060
    038 FILE recurse+stat / cd                       164742  237494  239650
    038 BENCHMARKS                                  1:8.5a0 2:8.4.5 3:8.3.5

(This is for a slightly modified version of file.bench, and a slightly modified version of Tcl 8.5a0 which is undergoing performance testing, where the above timings are on WinXP).

If you have particular pieces of code using file, glob which are slower in Tcl 8.4/8.5, please add them to this page so that they can be added to the benchmark suite.

Note: reading from and writing to files is a totally separate topic channel i/o which is nothing to do with the vfs changes made to Tcl 8.4.0, and is therefore irrelevant to this particular benchmarking exercise on this page.