mirror of
				https://github.com/ARM-software/devlib.git
				synced 2025-11-04 07:51:21 +00:00 
			
		
		
		
	gem5: Unmount the VirtIO device at the end of the run
We explicitly unmount the VirtIO device (used to transfer files into the simulated system) at the end of a run (when the connection is closed) in order to make checkpointing the simulated system easier. gem5 supports checkpointing the state of the simulation when it is terminated, and future simulations are able to resume from this snapshot. However, for the checkpoint to work correctly, we need to make sure that there is no shared state between the simulated system and the host. This mandates that we disconnect the VirtIO device prior to taking a checkpoint.
This commit is contained in:
		
				
					committed by
					
						
						setrofim
					
				
			
			
				
	
			
			
			
						parent
						
							008f96673f
						
					
				
				
					commit
					9e45d65c94
				
			@@ -536,6 +536,10 @@ class Gem5Connection(TelnetConnection):
 | 
				
			|||||||
        """
 | 
					        """
 | 
				
			||||||
        gem5_logger.info("Gracefully terminating the gem5 simulation.")
 | 
					        gem5_logger.info("Gracefully terminating the gem5 simulation.")
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
 | 
					            # Unmount the virtio device BEFORE we kill the
 | 
				
			||||||
 | 
					            # simulation. This is done to simplify checkpointing at
 | 
				
			||||||
 | 
					            # the end of a simulation!
 | 
				
			||||||
 | 
					            self._unmount_virtio()
 | 
				
			||||||
            self._gem5_util("exit")
 | 
					            self._gem5_util("exit")
 | 
				
			||||||
            self.gem5simulation.wait()
 | 
					            self.gem5simulation.wait()
 | 
				
			||||||
        except EOF:
 | 
					        except EOF:
 | 
				
			||||||
@@ -793,6 +797,15 @@ class Gem5Connection(TelnetConnection):
 | 
				
			|||||||
        mount_command = "mount -t 9p -o trans=virtio,version=9p2000.L,aname={} gem5 {}".format(self.gem5_interact_dir, self.gem5_input_dir)
 | 
					        mount_command = "mount -t 9p -o trans=virtio,version=9p2000.L,aname={} gem5 {}".format(self.gem5_interact_dir, self.gem5_input_dir)
 | 
				
			||||||
        self._gem5_shell(mount_command, as_root=True)
 | 
					        self._gem5_shell(mount_command, as_root=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _unmount_virtio(self):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Unmount the VirtIO device in the simulated system.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        gem5_logger.info("Unmounting VirtIO device in simulated system")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        unmount_command = "umount {}".format(self.gem5_input_dir)
 | 
				
			||||||
 | 
					        self._gem5_shell(unmount_command, as_root=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _move_to_temp_dir(self, source):
 | 
					    def _move_to_temp_dir(self, source):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Move a file to the temporary directory on the host for copying to the
 | 
					        Move a file to the temporary directory on the host for copying to the
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user