about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>2024-11-09 12:14:06 +0100
committerGitHub <noreply@github.com>2024-11-09 12:14:06 +0100
commite9ac6804473d7d2dabe7b87be2fd4ac7b80a5253 (patch)
tree2220be3150989177ace881aa38d6afe908680178
parentb5966e4e88b649997bce5948ced6730a4913e692 (diff)
parent8a0053e9e16586e060612db44578038d3edb107e (diff)
downloadrust-e9ac6804473d7d2dabe7b87be2fd4ac7b80a5253.tar.gz
rust-e9ac6804473d7d2dabe7b87be2fd4ac7b80a5253.zip
Merge pull request #1541 from rust-lang/perf_opts
Use a BufWriter in emit_module to reduce syscall overhead
-rw-r--r--src/driver/aot.rs8
-rw-r--r--src/lib.rs2
2 files changed, 9 insertions, 1 deletions
diff --git a/src/driver/aot.rs b/src/driver/aot.rs
index 419efa90600..8eab73ad5f9 100644
--- a/src/driver/aot.rs
+++ b/src/driver/aot.rs
@@ -2,6 +2,7 @@
 //! standalone executable.
 
 use std::fs::{self, File};
+use std::io::BufWriter;
 use std::path::{Path, PathBuf};
 use std::sync::Arc;
 use std::thread::JoinHandle;
@@ -397,14 +398,19 @@ fn emit_module(
     }
 
     let tmp_file = output_filenames.temp_path(OutputType::Object, Some(&name));
-    let mut file = match File::create(&tmp_file) {
+    let file = match File::create(&tmp_file) {
         Ok(file) => file,
         Err(err) => return Err(format!("error creating object file: {}", err)),
     };
 
+    let mut file = BufWriter::new(file);
     if let Err(err) = object.write_stream(&mut file) {
         return Err(format!("error writing object file: {}", err));
     }
+    let file = match file.into_inner() {
+        Ok(file) => file,
+        Err(err) => return Err(format!("error writing object file: {}", err)),
+    };
 
     prof.artifact_size("object_file", &*name, file.metadata().unwrap().len());
 
diff --git a/src/lib.rs b/src/lib.rs
index aba0c28f6b8..19a1de53d1d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -241,6 +241,8 @@ impl CodegenBackend for CraneliftCodegenBackend {
         sess: &Session,
         outputs: &OutputFilenames,
     ) -> (CodegenResults, FxIndexMap<WorkProductId, WorkProduct>) {
+        let _timer = sess.timer("finish_ongoing_codegen");
+
         ongoing_codegen.downcast::<driver::aot::OngoingCodegen>().unwrap().join(
             sess,
             outputs,