From 6bec8e2285e6e504baea019628fbf99f40a4900b Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sun, 13 Dec 2020 23:53:16 +0100 Subject: [PATCH] Use memmap2 in deserialize_from_file --- Cargo.lock | 10 ++++++++++ lib/engine/Cargo.toml | 1 + lib/engine/src/engine.rs | 6 ++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b8d5542992c..a0bd26d1942 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1186,6 +1186,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "memmap2" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.6.1" @@ -2612,6 +2621,7 @@ dependencies = [ "backtrace", "bincode", "lazy_static", + "memmap2", "more-asserts", "rustc-demangle", "serde", diff --git a/lib/engine/Cargo.toml b/lib/engine/Cargo.toml index efa4c8f900d..72aa3350f3d 100644 --- a/lib/engine/Cargo.toml +++ b/lib/engine/Cargo.toml @@ -18,6 +18,7 @@ target-lexicon = { version = "0.11", default-features = false } # flexbuffers = { path = "../../../flatbuffers/rust/flexbuffers", version = "0.1.0" } backtrace = "0.3" rustc-demangle = "0.1" +memmap2 = "0.1.0" more-asserts = "0.2" thiserror = "1.0" serde = { version = "1.0", features = ["derive", "rc"] } diff --git a/lib/engine/src/engine.rs b/lib/engine/src/engine.rs index 2828bfc52a3..8cfceb3a83f 100644 --- a/lib/engine/src/engine.rs +++ b/lib/engine/src/engine.rs @@ -2,6 +2,7 @@ use crate::tunables::Tunables; use crate::{Artifact, DeserializeError}; +use memmap2::Mmap; use std::path::Path; use std::sync::atomic::{AtomicUsize, Ordering::SeqCst}; use std::sync::Arc; @@ -51,8 +52,9 @@ pub trait Engine { &self, file_ref: &Path, ) -> Result, DeserializeError> { - let bytes = std::fs::read(file_ref)?; - self.deserialize(&bytes) + let file = std::fs::File::open(file_ref)?; + let mmap = Mmap::map(&file)?; + self.deserialize(&mmap) } /// A unique identifier for this object.