15.4.3. gem5 9P
Is possible on aarch64 as shown at: https://gem5-review.googlesource.com/c/public/gem5/+/22831, and it is just a matter of exposing to X86 for those that want it.
Enable it by passing the --vio-9p
option on the fs.py gem5 command line:
./run --arch aarch64 --emulator gem5 -- --vio-9p
Then on the guest:
mkdir -p /mnt/9p/gem5 mount -t 9p -o trans=virtio,version=9p2000.L,aname=/path/to/linux-kernel-module-cheat/out/run/gem5/aarch64/0/m5out/9p/share gem5 /mnt/9p/gem5 echo asdf > /mnt/9p/gem5/qwer
Yes, you have to pass the full path to the directory on the host. Yes, this is horrible.
The shared directory is:
out/run/gem5/aarch64/0/m5out/9p/share
so we can observe the file the guest wrote from the host with:
out/run/gem5/aarch64/0/m5out/9p/share/qwer
and vice versa:
echo zxvc > out/run/gem5/aarch64/0/m5out/9p/share/qwer
is now visible from the guest:
cat /mnt/9p/gem5/qwer
Checkpoint restore with an open mount will likely fail because gem5 uses an ugly external executable to implement diod. The protocol is not very complex, and QEMU implements it in-tree, which is what gem5 should do as well at some point.
Also checkpoint without --vio-9p
and restore with --vio-9p
did not work either, the mount fails.
However, this did work, on guest:
unmount /mnt/9p/gem5 m5 checkpoint
then restore with the detalied CPU of interest e.g.
./run --arch aarch64 --emulator gem5 -- --vio-9p --cpu-type DerivO3CPU --caches
Tested on gem5 b2847f43c91e27f43bd4ac08abd528efcf00f2fd, LKMC 52a5fdd7c1d6eadc5900fc76e128995d4849aada.