Dear all,
I am interested in a scenario where I want to host two guest OSes above a bare-metal hypervisor on an ARM mobile platform. The total available memory platform is 4GB where I want to expose exclusively 2 GB of continuous RAM to each guest OS. Could you please guide me through my two below concerns:
1- in case I change the FDT (device tree) of each guest OS to reflect exclusively 2 GB of continuous memory, can I be assured that the kernel of the guest OS will only access these 2 GB, and further it is not even aware of the existence of the other 2 GB of the memory on the platform?
2- I prefer that each guest OS manage directly its memory without the intervention of the host hypervisor (in other words the guest physical address reflect the actual hypervisor physical address), in such scenario can I resort to a XenARM-like hypervisor and just disable the second stage translation in the Xen hypervisor code? Would that work or is there actually a better way to do it? Please share your experience
Best wishes.
The overheads of the extra translation are very small, the second stage will be cached and the whole translation will be cached after the first access. What you are talking about is a very difficult thing to do which is the reason the hardware was put in. To ensure the guest OSs do not access other areas you'd need to make any translation tables inaccessible to the guest OS and interpret any access in the hypervisor. As opposed to that the TLB does not even have to be flushed when switching between guest OS's as the VMID can be used to identify each OS.