[RFC/RFT PATCH 0/3] arm64: KVM: work around incoherency with uncached guest mappings
STALE4228d
From: catalin.marinas@arm.com (Catalin Marinas)
Date: 2015-03-04 14:29:44
Also in:
kvm, kvmarm
On Wed, Mar 04, 2015 at 03:12:12PM +0100, Andrew Jones wrote:
On Wed, Mar 04, 2015 at 01:43:02PM +0100, Ard Biesheuvel wrote:quoted
On 4 March 2015 at 13:29, Catalin Marinas [off-list ref] wrote:quoted
On Wed, Mar 04, 2015 at 12:50:57PM +0100, Ard Biesheuvel wrote:quoted
I think we have established that the performance hit is not the problem but the correctness is.I haven't looked at the performance figures but has anyone assessed the hit caused by doing cache maintenance in Qemu vs cacheable guest accesses (and no maintenance)?I'm working on a PoC of a QEMU/KVM cache maintenance approach now. Hopefully I'll send it out this evening. Tomorrow at the latest. Getting numbers of that approach vs. a guest's use of cached memory for devices would take a decent amount of additional work, so won't be part of that post.
OK.
I'm actually not sure we should care about the numbers for a guest using normal mem attributes for device memory - other than out of curiosity. For correctness this issue really needs to be solved 100% host-side. We can't rely on a guest to do different/weird things, just because it's a guest. Ideally guests don't even know that they're guests. (Even if we describe the memory as cache-able to the guest, I don't think we can rely on the guest believing us.)
I disagree it is 100% a host-side issue. It is a host-side issue _if_ the host tells the guest that the (virtual) device is non-coherent (or, more precisely, it does not explicitly tell the guest that the device is coherent). If the guest thinks the (virtual) device is non-coherent because of information passed by the host, I fully agree that the host needs to manage the cache coherency. However, the host could also pass a "dma-coherent" property in the DT given to the guest and avoid any form of cache maintenance. If the guest does not honour such coherency property, it's a guest problem and it needs fixing in the guest. This isn't any different from a real physical device behaviour. (there are counter arguments for the latter as well like emulating old platforms that never had coherency but from a performance/production perspective, I strongly recommend that guests are passed the "dma-coherent" property for such virtual devices) -- Catalin