# HG changeset patch # User Arseniy Alekseyev # Date 1634214877 -3600 # Node ID 5e77bdc29d562ac9ded5776e5de1b324a4386793 # Parent 0cc69017d47f1344ff0408dc344293e39342bade rhg: do not try to open a nodemap for an inline index This saves an [open] system call per file, which is a small saving, but it showed up in the profile at large file counts (it accounted for 30ms out of 400ms needed for catting 10000 files, on a ZFS filesystem on Linux, so ~3us per syscall). Differential Revision: https://phab.mercurial-scm.org/D11659 diff -r 0cc69017d47f -r 5e77bdc29d56 rust/hg-core/src/revlog/index.rs --- a/rust/hg-core/src/revlog/index.rs Tue Oct 05 15:10:42 2021 +0100 +++ b/rust/hg-core/src/revlog/index.rs Thu Oct 14 13:34:37 2021 +0100 @@ -57,7 +57,7 @@ /// Value of the inline flag. pub fn is_inline(&self) -> bool { - is_inline(&self.bytes) + self.offsets.is_some() } /// Return a slice of bytes if `revlog` is inline. Panic if not. diff -r 0cc69017d47f -r 5e77bdc29d56 rust/hg-core/src/revlog/revlog.rs --- a/rust/hg-core/src/revlog/revlog.rs Tue Oct 05 15:10:42 2021 +0100 +++ b/rust/hg-core/src/revlog/revlog.rs Thu Oct 14 13:34:37 2021 +0100 @@ -99,14 +99,18 @@ Some(Box::new(data_mmap)) }; - let nodemap = NodeMapDocket::read_from_file(repo, index_path)?.map( - |(docket, data)| { - nodemap::NodeTree::load_bytes( - Box::new(data), - docket.data_length, - ) - }, - ); + let nodemap = if index.is_inline() { + None + } else { + NodeMapDocket::read_from_file(repo, index_path)?.map( + |(docket, data)| { + nodemap::NodeTree::load_bytes( + Box::new(data), + docket.data_length, + ) + }, + ) + }; Ok(Revlog { index,