On Monday 03 August 2009 01:09:38 pm Izik Eidus wrote: > Brian Jackson wrote: > > If someone wanted to play around with ksm in qemu-kvm-0.x.x would it be > > as simple as adding the below additions to kvm_setup_guest_memory in > > kvm-all.c > > qemu-kvm-0.x.x doesnt tell me much, but if it is the function that > register the memory than yes... > > (I just remember that qemu used to have something called phys_ram_base, > in that case it would be just making madvise on phys_ram_base with the > same of phys_ram_size....) Sorry, I'm using qemu-kvm-0.10.6 This is what qemu_ram_alloc looks like: /* XXX: better than nothing */ ram_addr_t qemu_ram_alloc(ram_addr_t size) { ram_addr_t addr; if ((phys_ram_alloc_offset + size) > phys_ram_size) { fprintf(stderr, "Not enough memory (requested_size = %" PRIu64 ", max memory = %" PRIu64 ")\n", (uint64_t)size, (uint64_t)phys_ram_size); abort(); } addr = phys_ram_alloc_offset; phys_ram_alloc_offset = TARGET_PAGE_ALIGN(phys_ram_alloc_offset + size); if (kvm_enabled()) kvm_setup_guest_memory(phys_ram_base + addr, size); return addr; } And this is what my new kvm_setup_guest_memory looks like: void kvm_setup_guest_memory(void *start, size_t size) { if (!kvm_has_sync_mmu()) { #ifdef MADV_DONTFORK int ret = madvise(start, size, MADV_DONTFORK); if (ret) { perror("madvice"); exit(1); } #else fprintf(stderr, "Need MADV_DONTFORK in absence of synchronous KVM MMU\n"); exit(1); #endif } #ifdef MADV_MERGEABLE madvise(start, size, MADV_MERGEABLE); #endif } Look okay? > > > (and adding the necessary kernel changes of course)? > > > > On Tuesday 28 July 2009 11:39:59 am Izik Eidus wrote: > >> This patch is not for inclusion just rfc. > >> > >> Thanks. > >> > >> > >> From 1297b86aa257100b3d819df9f9f0932bf4f7f49d Mon Sep 17 00:00:00 2001 > >> From: Izik Eidus <ieidus@xxxxxxxxxx> > >> Date: Tue, 28 Jul 2009 19:14:26 +0300 > >> Subject: [PATCH] kvm userspace: ksm support > >> > >> rfc for ksm support to kvm userpsace. > >> > >> thanks > >> > >> Signed-off-by: Izik Eidus <ieidus@xxxxxxxxxx> > >> --- > >> exec.c | 3 +++ > >> 1 files changed, 3 insertions(+), 0 deletions(-) > >> > >> diff --git a/exec.c b/exec.c > >> index f6d9ec9..375cc18 100644 > >> --- a/exec.c > >> +++ b/exec.c > >> @@ -2595,6 +2595,9 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size) > >> new_block->host = file_ram_alloc(size, mem_path); > >> if (!new_block->host) { > >> new_block->host = qemu_vmalloc(size); > >> +#ifdef MADV_MERGEABLE > >> + madvise(new_block->host, size, MADV_MERGEABLE); > >> +#endif > >> } > >> new_block->offset = last_ram_offset; > >> new_block->length = size; > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html