hack_back_ckpt.rcS revision 7920
17920SBrad.Beckmann@amd.com#!/bin/sh 27920SBrad.Beckmann@amd.com 37920SBrad.Beckmann@amd.com# 47920SBrad.Beckmann@amd.com# This is a tricky script to understand. When run in M5, it creates 57920SBrad.Beckmann@amd.com# a checkpoint after Linux boot up, but before any benchmarks have 67920SBrad.Beckmann@amd.com# been run. By playing around with environment variables, we can 77920SBrad.Beckmann@amd.com# detect whether the checkpoint has been taken. 87920SBrad.Beckmann@amd.com# - If the checkpoint hasn't been taken, the script allows M5 to checkpoint the system, 97920SBrad.Beckmann@amd.com# re-read this script into a new tmp file, and re-run it. On the 107920SBrad.Beckmann@amd.com# second execution of this script (checkpoint has been taken), the 117920SBrad.Beckmann@amd.com# environment variable is already set, so the script will exit the 127920SBrad.Beckmann@amd.com# simulation 137920SBrad.Beckmann@amd.com# - When we restore the simulation from a checkpoint, we can 147920SBrad.Beckmann@amd.com# specify a new script for M5 to execute in the full-system simulation, 157920SBrad.Beckmann@amd.com# and it will be executed as if a checkpoint had just been taken. 167920SBrad.Beckmann@amd.com# 177920SBrad.Beckmann@amd.com# Author: 187920SBrad.Beckmann@amd.com# Joel Hestness, hestness@cs.utexas.edu 197920SBrad.Beckmann@amd.com# while at AMD Research and Advanced Development Lab 207920SBrad.Beckmann@amd.com# Date: 217920SBrad.Beckmann@amd.com# 10/5/2010 227920SBrad.Beckmann@amd.com# 237920SBrad.Beckmann@amd.com 247920SBrad.Beckmann@amd.com# Test if the RUNSCRIPT_VAR environment variable is already set 257920SBrad.Beckmann@amd.comif [ "${RUNSCRIPT_VAR+set}" != set ] 267920SBrad.Beckmann@amd.comthen 277920SBrad.Beckmann@amd.com # Signal our future self that it's safe to continue 287920SBrad.Beckmann@amd.com export RUNSCRIPT_VAR=1 297920SBrad.Beckmann@amd.comelse 307920SBrad.Beckmann@amd.com # We've already executed once, so we should exit 317920SBrad.Beckmann@amd.com /sbin/m5 exit 327920SBrad.Beckmann@amd.comfi 337920SBrad.Beckmann@amd.com 347920SBrad.Beckmann@amd.com# Checkpoint the first execution 357920SBrad.Beckmann@amd.comecho "Checkpointing simulation..." 367920SBrad.Beckmann@amd.com/sbin/m5 checkpoint 377920SBrad.Beckmann@amd.com 387920SBrad.Beckmann@amd.com# Test if we previously okayed ourselves to run this script 397920SBrad.Beckmann@amd.comif [ "$RUNSCRIPT_VAR" -eq 1 ] 407920SBrad.Beckmann@amd.comthen 417920SBrad.Beckmann@amd.com 427920SBrad.Beckmann@amd.com # Signal our future self not to recurse infinitely 437920SBrad.Beckmann@amd.com export RUNSCRIPT_VAR=2 447920SBrad.Beckmann@amd.com 457920SBrad.Beckmann@amd.com # Read the script for the checkpoint restored execution 467920SBrad.Beckmann@amd.com echo "Loading new script..." 477920SBrad.Beckmann@amd.com /sbin/m5 readfile > /tmp/runscript 487920SBrad.Beckmann@amd.com chmod 755 /tmp/runscript 497920SBrad.Beckmann@amd.com 507920SBrad.Beckmann@amd.com # Execute the new runscript 517920SBrad.Beckmann@amd.com if [ -s /tmp/runscript ] 527920SBrad.Beckmann@amd.com then 537920SBrad.Beckmann@amd.com exec /tmp/runscript 547920SBrad.Beckmann@amd.com else 557920SBrad.Beckmann@amd.com echo "Script not specified. Dropping into shell..." 567920SBrad.Beckmann@amd.com /bin/bash 577920SBrad.Beckmann@amd.com fi 587920SBrad.Beckmann@amd.com 597920SBrad.Beckmann@amd.comfi 607920SBrad.Beckmann@amd.com 617920SBrad.Beckmann@amd.comecho "Fell through script. Exiting..." 627920SBrad.Beckmann@amd.com/sbin/m5 exit 63