Hello all, I have been using gem5 for about 2 years now, and have run into a problem that I cannot seem to surmount, though I have located the root cause. I have been using workload automation to mount a local folder from host into my gem5 fs simulation, allowing me to modify and cross compile applications on the host and then run them easily in gem5. To do this, I followed the instructions on http://gem5.org/WA-gem5#Using_gem5_with_Workload_Automation, and run the command
mount -t 9p -n gem5 /mnt -oaname=/home/wsimon/temp,version=9p2000.L,uname=root,access=user To mount 9p filesystem within gem5. This has worked very well up until recently updating the the newest version of gem5. Now, while mounting still works in the O3 CPU, I get a simulation timout in the Minor CPU: Exiting @ tick 18446744073709551615 because simulate() limit reached diod: caught SIGTERM: shutting down info: Trying to kill diod with SIGKILL as SIGTERM failed I tracked down the cause of this error to git commit 59e3585a84ef172eba57c9936680c0248f9a97db<https://github.com/gem5/gem5/commit/59e3585a84ef172eba57c9936680c0248f9a97db#diff-e43d16de0f4ee528cd758d7ae8513ed8>, in which Prefetching for stores is added to the ARM ISA (I am using aarch64 ISA), specifically the 4 lines in src/arch/arm/isa/insts/ldr64.isa. LoadImm64("prfm", "PRFM64_IMM", 8, flavor="mprefetch").emit() LoadReg64("prfm", "PRFM64_REG", 8, flavor="mprefetch").emit() LoadLit64("prfm", "PRFM64_LIT", 8, literal=True, flavor="mprefetch").emit() LoadImm64("prfum", "PRFUM64_IMM", 8, flavor="mprefetch").emit() The "mprefetch" flavor modifies the memFlags in the following way (also in src/arch/arm/isa/insts/ldr64.isa): if self.flavor == "dprefetch": self.memFlags.append("Request::PREFETCH") self.instFlags = ['IsDataPrefetch'] elif self.flavor == "iprefetch": self.memFlags.append("Request::PREFETCH") self.instFlags = ['IsInstPrefetch'] elif self.flavor == "mprefetch": self.memFlags.append("((((dest>>3)&3)==2)? \ (Request::PF_EXCLUSIVE):(Request::PREFETCH))") self.instFlags = ['IsDataPrefetch'] if self.micro: self.instFlags.append("IsMicroop") If I modify the emit commands above to emit with the flavor "dprefetch", as was previously the case, I have no problems, so the timeout error must arise from a memory request being tagged as PF_EXCLUSIVE instead of PREFETCH. If I understand correctly, the PF_EXCLUSIVE tag requests that a memory location be prefetched and marked as exclusive, to allow storing. I'm not sure why this would cause a hang in the code. Can anyone shed further light on the possible cause of this? Sincerely, William
_______________________________________________ gem5-users mailing list [email protected] http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
