mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
21a83ae27a
We didn't have explicit microbenchmark coverage for loading revlog indexes. That seems like a useful thing to have, so let's add it. We currently measure the low-level nodemap APIs. There is room to hook in at the actual revlog layer. This could be done as a follow-up. The hackiest thing about this patch is specifying revlog paths. Other commands have arguments that allow resolution of changelog, manifest, and filelog. I needed to hook in at a lower level of the revlog API than what the existing helper functions to resolve revlogs allowed. I was too lazy to write some new APIs. This could be done as a follow-up easily enough. Example output for `hg perfrevlogindex 00changelog.i` on my Firefox repo (404418 revisions): ! revlog constructor ! wall 0.003106 comb 0.000000 user 0.000000 sys 0.000000 (best of 912) ! read ! wall 0.003077 comb 0.000000 user 0.000000 sys 0.000000 (best of 924) ! create index object ! wall 0.000000 comb 0.000000 user 0.000000 sys 0.000000 (best of 1803994) ! retrieve index entry for rev 0 ! wall 0.000193 comb 0.000000 user 0.000000 sys 0.000000 (best of 14037) ! look up missing node ! wall 0.003313 comb 0.000000 user 0.000000 sys 0.000000 (best of 865) ! look up node at rev 0 ! wall 0.003295 comb 0.010000 user 0.010000 sys 0.000000 (best of 858) ! look up node at 1/4 len ! wall 0.002598 comb 0.010000 user 0.010000 sys 0.000000 (best of 1103) ! look up node at 1/2 len ! wall 0.001909 comb 0.000000 user 0.000000 sys 0.000000 (best of 1507) ! look up node at 3/4 len ! wall 0.001213 comb 0.000000 user 0.000000 sys 0.000000 (best of 2275) ! look up node at tip ! wall 0.000453 comb 0.000000 user 0.000000 sys 0.000000 (best of 5697) ! look up all nodes (forward) ! wall 0.094615 comb 0.100000 user 0.100000 sys 0.000000 (best of 100) ! look up all nodes (reverse) ! wall 0.045889 comb 0.050000 user 0.050000 sys 0.000000 (best of 100) ! retrieve all index entries (forward) ! wall 0.078398 comb 0.080000 user 0.060000 sys 0.020000 (best of 100) ! retrieve all index entries (reverse) ! wall 0.079376 comb 0.080000 user 0.070000 sys 0.010000 (best of 100)
173 lines
4.8 KiB
Perl
173 lines
4.8 KiB
Perl
#require test-repo
|
|
|
|
Set vars:
|
|
|
|
$ . "$TESTDIR/helpers-testrepo.sh"
|
|
$ CONTRIBDIR="$TESTDIR/../contrib"
|
|
|
|
Prepare repo:
|
|
|
|
$ hg init
|
|
|
|
$ echo this is file a > a
|
|
$ hg add a
|
|
$ hg commit -m first
|
|
|
|
$ echo adding to file a >> a
|
|
$ hg commit -m second
|
|
|
|
$ echo adding more to file a >> a
|
|
$ hg commit -m third
|
|
|
|
$ hg up -r 0
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
$ echo merge-this >> a
|
|
$ hg commit -m merge-able
|
|
created new head
|
|
|
|
$ hg up -r 2
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
perfstatus
|
|
|
|
$ cat >> $HGRCPATH << EOF
|
|
> [extensions]
|
|
> perfstatusext=$CONTRIBDIR/perf.py
|
|
> [perf]
|
|
> presleep=0
|
|
> stub=on
|
|
> parentscount=1
|
|
> EOF
|
|
$ hg help perfstatusext
|
|
perfstatusext extension - helper extension to measure performance
|
|
|
|
list of commands:
|
|
|
|
perfaddremove
|
|
(no help text available)
|
|
perfancestors
|
|
(no help text available)
|
|
perfancestorset
|
|
(no help text available)
|
|
perfannotate (no help text available)
|
|
perfbdiff benchmark a bdiff between revisions
|
|
perfbranchmap
|
|
benchmark the update of a branchmap
|
|
perfcca (no help text available)
|
|
perfchangegroupchangelog
|
|
Benchmark producing a changelog group for a changegroup.
|
|
perfchangeset
|
|
(no help text available)
|
|
perfctxfiles (no help text available)
|
|
perfdiffwd Profile diff of working directory changes
|
|
perfdirfoldmap
|
|
(no help text available)
|
|
perfdirs (no help text available)
|
|
perfdirstate (no help text available)
|
|
perfdirstatedirs
|
|
(no help text available)
|
|
perfdirstatefoldmap
|
|
(no help text available)
|
|
perfdirstatewrite
|
|
(no help text available)
|
|
perffncacheencode
|
|
(no help text available)
|
|
perffncacheload
|
|
(no help text available)
|
|
perffncachewrite
|
|
(no help text available)
|
|
perfheads (no help text available)
|
|
perfindex (no help text available)
|
|
perfloadmarkers
|
|
benchmark the time to parse the on-disk markers for a repo
|
|
perflog (no help text available)
|
|
perflookup (no help text available)
|
|
perflrucachedict
|
|
(no help text available)
|
|
perfmanifest (no help text available)
|
|
perfmergecalculate
|
|
(no help text available)
|
|
perfmoonwalk benchmark walking the changelog backwards
|
|
perfnodelookup
|
|
(no help text available)
|
|
perfparents (no help text available)
|
|
perfpathcopies
|
|
(no help text available)
|
|
perfphases benchmark phasesets computation
|
|
perfrawfiles (no help text available)
|
|
perfrevlogchunks
|
|
Benchmark operations on revlog chunks.
|
|
perfrevlogindex
|
|
Benchmark operations against a revlog index.
|
|
perfrevlogrevision
|
|
Benchmark obtaining a revlog revision.
|
|
perfrevlogrevisions
|
|
Benchmark reading a series of revisions from a revlog.
|
|
perfrevrange (no help text available)
|
|
perfrevset benchmark the execution time of a revset
|
|
perfstartup (no help text available)
|
|
perfstatus (no help text available)
|
|
perftags (no help text available)
|
|
perftemplating
|
|
(no help text available)
|
|
perfvolatilesets
|
|
benchmark the computation of various volatile set
|
|
perfwalk (no help text available)
|
|
perfwrite microbenchmark ui.write
|
|
|
|
(use 'hg help -v perfstatusext' to show built-in aliases and global options)
|
|
$ hg perfaddremove
|
|
$ hg perfancestors
|
|
$ hg perfancestorset 2
|
|
$ hg perfannotate a
|
|
$ hg perfbdiff -c 1
|
|
$ hg perfbdiff --alldata 1
|
|
$ hg perfbranchmap
|
|
$ hg perfcca
|
|
$ hg perfchangegroupchangelog
|
|
$ hg perfchangeset 2
|
|
$ hg perfctxfiles 2
|
|
$ hg perfdiffwd
|
|
$ hg perfdirfoldmap
|
|
$ hg perfdirs
|
|
$ hg perfdirstate
|
|
$ hg perfdirstatedirs
|
|
$ hg perfdirstatefoldmap
|
|
$ hg perfdirstatewrite
|
|
$ hg perffncacheencode
|
|
$ hg perffncacheload
|
|
$ hg perffncachewrite
|
|
$ hg perfheads
|
|
$ hg perfindex
|
|
$ hg perfloadmarkers
|
|
$ hg perflog
|
|
$ hg perflookup 2
|
|
$ hg perflrucache
|
|
$ hg perfmanifest 2
|
|
$ hg perfmergecalculate -r 3
|
|
$ hg perfmoonwalk
|
|
$ hg perfnodelookup 2
|
|
$ hg perfpathcopies 1 2
|
|
$ hg perfrawfiles 2
|
|
$ hg perfrevlogindex -c
|
|
$ hg perfrevlogrevisions .hg/store/data/a.i
|
|
$ hg perfrevlogrevision -m 0
|
|
$ hg perfrevlogchunks -c
|
|
$ hg perfrevrange
|
|
$ hg perfrevset 'all()'
|
|
$ hg perfstartup
|
|
$ hg perfstatus
|
|
$ hg perftags
|
|
$ hg perftemplating
|
|
$ hg perfvolatilesets
|
|
$ hg perfwalk
|
|
$ hg perfparents
|
|
|
|
Check perf.py for historical portability
|
|
|
|
$ cd "$TESTDIR/.."
|
|
|
|
$ (hg files -r 1.2 glob:mercurial/*.c glob:mercurial/*.py;
|
|
> hg files -r tip glob:mercurial/*.c glob:mercurial/*.py) |
|
|
> "$TESTDIR"/check-perf-code.py contrib/perf.py
|