qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] the arm cache coherency cluster
@ 2015-03-06 18:49 Andrew Jones
  2015-03-06 18:52 ` [Qemu-devel] [RFC PATCH 0/6] flush/invalidate on entry/exit Andrew Jones
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Andrew Jones @ 2015-03-06 18:49 UTC (permalink / raw)
  To: kvmarm, qemu-devel, ard.biesheuvel, christoffer.dall,
	marc.zyngier, peter.maydell
  Cc: pbonzini, lersek, agraf, catalin.marinas

In reply to this message I'll send two series' one for KVM and
one for QEMU. The two series' are their respective component
complements, and attempt to implement cache coherency for arm
guests using emulated devices, where the emulator (qemu) uses
cached memory for the device memory, but the guest uses
uncached - as device memory is generally used. Right now I've
just focused on VGA vram.

This approach starts as the "add a new memslot flag" approach,
and then turns into the "make qemu do some cache maintenance"
approach with the final patch of each series (6/6). It stops
short of the "add syscalls..." approach. Below is a summary of
all the approaches discussed so far, to my knowledge.

"MAIR manipulating"
Posted[1] by Ard. Works. No performance degradation. Potential
issues with device assignment and the guest getting confused.

"add a new memslot flag"
This posting (not counting patches 6/6). Works. Huge performance
degradation.

"make qemu do some cache maintenance"
This posting (patches 6/6). We can only do so much in qemu
without syscalls. This series does what it can. Almost works,
probably could work, after playing 'find the missing flush'.
This approach still requires the new memslot flag, as userspace
can't invalidate the cache, only clean, or clean+invalidate.
No noticeable performance degradation.

"add syscalls to make qemu do all cache maintenance"
Variant 1: implement as kvm ioctls - to avoid trying to get
           syscalls into the general kernel
Variant 2: add real syscalls, or maybe just ARM private SWIs
           like __ARM_NR_cacheflush
This approach should work, and if we add an invalidate syscall,
then we shouldn't need any kvm changes at all, i.e. no need for
the memslot flag. I haven't experimented with this yet, but I'm
starting to like the idea of variant 2, with a private SWI, so
will try to pull something together soon for that.

"describe the problematic memory as cached to the guest"
Not an ideal solution for virt. Could maybe be workable as a
quirk for a specific device though.

re: $SUBJECT; Here 'cluster' is defined by the urban dictionary.

[1] http://thread.gmane.org/gmane.comp.emulators.kvm.arm.devel/34/

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2015-03-18 19:00 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-06 18:49 [Qemu-devel] the arm cache coherency cluster Andrew Jones
2015-03-06 18:52 ` [Qemu-devel] [RFC PATCH 0/6] flush/invalidate on entry/exit Andrew Jones
2015-03-06 18:52   ` [Qemu-devel] [RFC PATCH 1/6] kvm: promote KVM_MEMSLOT_INCOHERENT to uapi Andrew Jones
2015-03-06 18:52   ` [Qemu-devel] [RFC PATCH 2/6] KVM: Introduce incoherent cache maintenance API Andrew Jones
2015-03-06 18:52   ` [Qemu-devel] [RFC PATCH 3/6] KVM: ARM: change __coherent_cache_guest_page interface Andrew Jones
2015-03-06 18:52   ` [Qemu-devel] [RFC PATCH 4/6] KVM: ARM: extend __coherent_cache_guest_page Andrew Jones
2015-03-06 18:52   ` [Qemu-devel] [RFC PATCH 5/6] KVM: ARM: implement kvm_*_incoherent_memory_regions Andrew Jones
2015-03-06 18:52   ` [Qemu-devel] [RFC PATCH 6/6] KVM: ARM: no need for kvm_arch_flush_incoherent Andrew Jones
2015-03-06 18:53 ` [Qemu-devel] [RFC PATCH 0/6] support KVM_MEM_INCOHERENT Andrew Jones
2015-03-06 18:53   ` [Qemu-devel] [RFC PATCH 1/6] memory: add incoherent cache flag Andrew Jones
2015-03-06 18:53   ` [Qemu-devel] [RFC PATCH 2/6] HACK: linux header update Andrew Jones
2015-03-06 18:53   ` [Qemu-devel] [PATCH 3/6] kvm-all: put kvm_mem_flags to more work Andrew Jones
2015-03-06 18:53   ` [Qemu-devel] [RFC PATCH 4/6] kvm-all: set KVM_MEM_INCOHERENT Andrew Jones
2015-03-06 18:53   ` [Qemu-devel] [RFC PATCH 5/6] vga: flag vram as incoherent Andrew Jones
2015-03-06 18:53   ` [Qemu-devel] [RFC/WIP PATCH 6/6] memory: add clear_cache_to_poc Andrew Jones
2015-03-11 19:21     ` Andrew Jones
2015-03-18 19:00 ` [Qemu-devel] the arm cache coherency cluster Andrew Jones

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).