This is an archive of the discontinued Mercurial Phabricator instance.

status: prefer relative paths in Rust code
ClosedPublic

Authored by SimonSapin on Feb 14 2022, 1:00 PM.

Details

Summary

… when the repository root is under the current directory,
so the kernel needs to traverse fewer directory in every call
to read_dir or symlink_metadata.

Better yet would be to use libc functions like openat and fstatat
to remove such repeated traversals entirely, but the standard library
does not provide APIs based on those.
Maybe with a crate like https://crates.io/crates/openat instead?

Benchmarks of rhg status show that this patch is neutral in some configurations,
and makes the command up to ~20% faster in others.
Below is semi-arbitrary subset of results. The four numeric columns are:
time (in seconds) with this changeset’s parent, time with this changeset,
time difference (negative is better), time ratio (less than 1 is better).

mercurial-dirstate-v1 | default-plain-clean.no-iu.pbr            | 0.0061 -> 0.0059: -0.0002 (0.97)
mercurial-dirstate-v2 | default-plain-clean.no-iu.pbr            | 0.0029 -> 0.0028: -0.0001 (0.97)
mozilla-dirstate-v1   | default-plain-clean.no-iu.pbr            | 0.2110 -> 0.2102: -0.0007 (1.00)
mozilla-dirstate-v2   | default-copies-clean.ignored.pbr         | 0.0489 -> 0.0401: -0.0088 (0.82)
mozilla-dirstate-v2   | default-copies-clean.no-iu.pbr           | 0.0479 -> 0.0393: -0.0085 (0.82)
mozilla-dirstate-v2   | default-copies-large.all.pbr             | 0.1262 -> 0.1210: -0.0051 (0.96)
mozilla-dirstate-v2   | default-copies-small.ignored-unknown.pbr | 0.1262 -> 0.1200: -0.0062 (0.95)
mozilla-dirstate-v2   | default-copies-small.ignored.pbr         | 0.0536 -> 0.0417: -0.0119 (0.78)
mozilla-dirstate-v2   | default-copies-small.no-iu.pbr           | 0.0482 -> 0.0393: -0.0089 (0.81)
mozilla-dirstate-v2   | default-plain-clean.ignored.pbr          | 0.0518 -> 0.0402: -0.0116 (0.78)
mozilla-dirstate-v2   | default-plain-clean.no-iu.pbr            | 0.0481 -> 0.0392: -0.0088 (0.82)
mozilla-dirstate-v2   | default-plain-large.all.pbr              | 0.1271 -> 0.1218: -0.0052 (0.96)
mozilla-dirstate-v2   | default-plain-small.ignored-unknown.pbr  | 0.1225 -> 0.1202: -0.0022 (0.98)
mozilla-dirstate-v2   | default-plain-small.ignored.pbr          | 0.0510 -> 0.0418: -0.0092 (0.82)
mozilla-dirstate-v2   | default-plain-small.no-iu.pbr            | 0.0480 -> 0.0394: -0.0086 (0.82)
netbeans-dirstate-v1  | default-plain-clean.no-iu.pbr            | 0.1442 -> 0.1422: -0.0020 (0.99)
netbeans-dirstate-v2  | default-plain-clean.no-iu.pbr            | 0.0325 -> 0.0282: -0.0043 (0.87)

Diff Detail

Repository
rHG Mercurial
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

SimonSapin created this revision.Feb 14 2022, 1:00 PM
Alphare accepted this revision.Feb 15 2022, 4:37 AM
This revision is now accepted and ready to land.Feb 15 2022, 4:37 AM
This revision was automatically updated to reflect the committed changes.