Bug 3144 - Performance of "hg status" on a single file is bad with largefiles extension enabled
Summary: Performance of "hg status" on a single file is bad with largefiles extension ...
Status: RESOLVED FIXED
Alias: None
Product: Mercurial
Classification: Unclassified
Component: Mercurial (show other bugs)
Version: unspecified
Hardware: All All
: normal bug
Assignee: Na'Tosha Bard
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-12-09 08:15 UTC by Na'Tosha Bard
Modified: 2011-12-15 15:00 UTC (History)
2 users (show)

See Also:
Python Version: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Na'Tosha Bard 2011-12-09 08:15 UTC
I am working on a fix for this issue, but I wanted to document it here.

On a large repository with largefiles enabled, the time to run "hg status"
on a single file on my machine (specifying a single file on the
command-line) is:

real	0m0.636s
user	0m0.512s
sys	0m0.120s

Without the largefiles extension enabled, it is:

real	0m0.215s
user	0m0.180s
sys	0m0.032s

This may not seem like much, but it actually makes quite a difference for
GUI tools (IDE plugins, etc) that need to be able to frequently get the
status of a handful of files (say when expanding the directory structure in
a UI).

This is caused because we are still running through a lot of
largefiles-specific status code, even when file(s) have been specified on
the command-line and are not largefiles at all.

A patch will be supplied to fix the issue shortly.
Comment 1 Na'Tosha Bard 2011-12-09 09:06 UTC
A patch for this issue has been submitted to the Mercurial development
mailing list:

http://www.selenic.com/pipermail/mercurial-devel/2011-December/036206.html

===

The following information about the patch was included in the commit message:

This fixes a performance issue with 'hg status' when files are specified on
the command-line.  Previously, a large amount of largefiles code was
executed, even if files were specified on the command-line and those files
were not largefiles.  This patch fixes the problem by first checking if
non-largefiles were specified on the command-line and, just letting the
normal status function handle the case if they were.

On a brand new machine, the execution time for 'hg status filename' on a
repository with largefiles was:

real	0m0.636s
user	0m0.512s
sys	0m0.120s

versus the following (the same repository, with largefiles disabled):

real	0m0.215s
user	0m0.180s
sys	0m0.032s

After this patch, the performance of 'hg status filename' on the same
repository, with largefiles enabled is:

real	0m0.228s
user	0m0.189s
sys	0m0.036s

This performance boost is also true when patterns (rather than specific
files) are specified on the command-line.
Comment 2 HG Bot 2011-12-15 15:00 UTC
Fixed by http://selenic.com/repo/hg/rev/93c77d5b9752
Na'Tosha Bard <natosha@unity3d.com>
largefiles: optimize status when files are specified (issue3144)

(please test the fix)
Comment 3 Bugzilla 2012-05-12 09:26 UTC

--- Bug imported by bugzilla@serpentine.com 2012-05-12 09:26 EDT  ---

This bug was previously known as _bug_ 3144 at http://mercurial.selenic.com/bts/issue3144