diff --git a/src/vmm/src/builder.rs b/src/vmm/src/builder.rs
index 3ef36140..0a2b432e 100644
--- a/src/vmm/src/builder.rs
+++ b/src/vmm/src/builder.rs
@@ -8,6 +8,7 @@ use std::convert::TryFrom;
 use std::fmt::Debug;
 use std::io::{self, Seek, SeekFrom};
 use std::sync::{Arc, Mutex};
+use std::time::{SystemTime, UNIX_EPOCH};
 
 use event_manager::{MutEventSubscriber, SubscriberOps};
 use libc::EFD_NONBLOCK;
@@ -213,6 +214,10 @@ fn create_vmm_and_vcpus(
         pio_device_manager,
     };
 
+    let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
+    let secs = now.as_secs();
+    let nanos = now.subsec_nanos();
+    println!("VM Created {}.{:09}", secs, nanos);
     Ok((vmm, vcpus))
 }
 
@@ -232,16 +237,31 @@ pub fn build_microvm_for_boot(
     // Timestamp for measuring microVM boot duration.
     let request_ts = TimestampUs::default();
 
+    let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
+    let secs = now.as_secs();
+    let nanos = now.subsec_nanos();
+    println!("VM Request {}.{:09}", secs, nanos);
+
     let boot_config = vm_resources
         .boot_source_builder()
         .ok_or(MissingKernelConfig)?;
 
     let track_dirty_pages = vm_resources.track_dirty_pages();
-    let guest_memory =
-        GuestMemoryMmap::memfd_backed(vm_resources.vm_config.mem_size_mib, track_dirty_pages, vm_resources.backed_by_hugepages())
-            .map_err(StartMicrovmError::GuestMemory)?;
+    let guest_memory = GuestMemoryMmap::memfd_backed(
+        vm_resources.vm_config.mem_size_mib,
+        track_dirty_pages,
+        vm_resources.backed_by_hugepages(),
+    )
+    .map_err(StartMicrovmError::GuestMemory)?;
+
+    let pre_load = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
     let entry_addr = load_kernel(boot_config, &guest_memory)?;
     let initrd = load_initrd_from_config(boot_config, &guest_memory)?;
+
+    let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
+    let secs = (now - pre_load).as_secs();
+    let nanos = (now - pre_load).subsec_nanos();
+    println!("VM load_kernel+load_initrd {}.{:09}", secs, nanos);
     // Clone the command-line so that a failed boot doesn't pollute the original.
     #[allow(unused_mut)]
     let mut boot_cmdline = boot_config.cmdline.clone();
diff --git a/src/vmm/src/devices/pseudo/boot_timer.rs b/src/vmm/src/devices/pseudo/boot_timer.rs
index ba16e923..aca2f1b3 100644
--- a/src/vmm/src/devices/pseudo/boot_timer.rs
+++ b/src/vmm/src/devices/pseudo/boot_timer.rs
@@ -1,6 +1,7 @@
 // Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 // SPDX-License-Identifier: Apache-2.0
 
+use std::time::{SystemTime, UNIX_EPOCH};
 use utils::time::TimestampUs;
 
 use crate::logger::info;
@@ -22,6 +23,10 @@ impl BootTimer {
 
         if data[0] == MAGIC_VALUE_SIGNAL_GUEST_BOOT_COMPLETE {
             let now_tm_us = TimestampUs::default();
+            let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
+            let secs = now.as_secs();
+            let nanos = now.subsec_nanos();
+            println!("VM Booted {}.{:09}", secs, nanos);
 
             let boot_time_us = now_tm_us.time_us - self.start_ts.time_us;
             let boot_time_cpu_us = now_tm_us.cputime_us - self.start_ts.cputime_us;
