Skip to contentSkip to conversation

KVM Shared memory ivshmem enquiry

DISCUSSION Neville Clark 2 participants 4 messages Mar 18, 2010 – Mar 19, 2010 KVM

lore
Share & tools
lore
#0 lore raw

Cam and others,

I have been trying to enable Shared memory in KVM but I am not clear on the correct procedures and requirements, I am new to KVM, kernel building, git so am on very step learning curve.

I have an application that requires shared memory between host and guest. I have been using Vmware workstation 6.0.5, but all later versions do not support shared memory, and WS 6 is no longer available.

I think I have managed to build and install the guest's kvm_ivshmem module, from http://www.gitorious.org/nahanni/
I used cd kernem_modules;make;sudo make install;sudo modprobe kvm_ivshmem. Every thing seems to have worked.

On the host side I am very confused as to what is required. I have created git repository using
git clone git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git

I have been able to patch, build and install, but the result does NOT run.
I have checked out the qemu-kvm-0.11.0 and built and installed but then I get a version miss-match. (this was unpatched as the patch does not work on this version).

The host is Ubuntu 9.10 64 bit, with ubuntu's KVM installed.

Can I simply somehow build and install ivshmem module, or do I need to rebuild the kernel? eg get kvm.git and build and install new kernel. Is there another KVM binary that I can use, instead of Ubuntu's?

Is the ivshmem patch likely to be accepted anytime soon?

Thanks Nev

#1 lore raw

Hi Neville,

Quoted 15 lines · Neville Clark

Cam and others,

I have been trying to enable Shared memory in KVM but I am not clear on the correct procedures and requirements, I am new to KVM, kernel building, git so am on very step learning curve.

I have an application that requires shared memory between host and guest. I have been using Vmware workstation 6.0.5, but all later versions do not support shared memory, and WS 6 is no longer available.

I think I have managed to build and install the guest's kvm_ivshmem module, from http://www.gitorious.org/nahanni/
I used cd kernem_modules;make;sudo make install;sudo modprobe kvm_ivshmem. Every thing seems to have worked.

Quoted 6 lines

On the host side I am very confused as to what is required. I have created git repository using
git clone git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git

I have been able to patch, build and install, but the result does NOT run.

Can you expand on how it doesn't run? I would suggest using the master branch and patching it with my patches. As well as patching, you need to run with something like

-ivshmem 128,myshm

to actually create the shared memory device.

Quoted 3 lines

I have checked out the qemu-kvm-0.11.0 and built and installed but then I get a version miss-match. (this was unpatched as the patch does not work on this version).

shared memory requires a patched qemu-kvm at this point.

Quoted 5 lines

The host is Ubuntu 9.10 64 bit, with ubuntu's KVM installed.

Can I simply somehow build and install ivshmem module, or do I need to rebuild the kernel? eg get kvm.git and build and install new kernel.

You can just build the module.

Quoted 1 line

Is there another KVM binary that I can use, instead of Ubuntu's?

You can't use a distro binary as they don't support shared memory.

Quoted 2 lines

Is the ivshmem patch likely to be accepted anytime soon?

I hope so :) I'm currently working on some suggested changes from the Qemu/KVM developers.

Thanks,
Cam

#2 lore raw

Hi Cam,

Quoted 8 lines · Cam Macdonell

Can you expand on how it doesn't run? I would suggest using the master branch and patching it with my patches. As well as patching, you need to run with something like

-ivshmem 128,myshm

to actually create the shared memory device.

Just to be clear, I think I have successfully loaded the required module into the guest, and it is only on the host that I am having trouble.

I am currently using virt-manager and distro KVM to get something up. I am much happier with a GUI then command-line.

I had hoped that I would be able to patch or load a module into this Ubuntu's KVM. Installing KVM from Ubuntu does NOT seems to change the running Linux kernel 'uname -a' after install of KVM is "Linux dingo3 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 04:38:19 UTC 2010 x86_64 GNU/Linux"

What I have tried to do is build and install qemu-kvm from the git tree *without* patches. And then run an already configured guest using virt-manager. The result is that using the HEAD, after about 30 secs I get a pop-up with
"Error starting domain: monitor socket did not show up.: Connection refused"
with details of:
"Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/engine.py", line 493, in
run_domain
vm.startup()
File "/usr/share/virt-manager/virtManager/domain.py", line 558, in
startup
self.vm.create()
File "/usr/lib/python2.6/dist-packages/libvirt.py", line 293, in
create

    if ret == -1: raise libvirtError ('virDomainCreate() failed',

dom=self)
libvirtError: monitor socket did not show up.: Connection refused"

after switching version qemu-kvm-0.11.0 and repeating above I get immediate (no 30 sec delay) pop-up
"Error starting domain: internal error cannot parse QEMU version number in 'QEMU PC emulator version 0.11.0 (kvm-devel), Copyright (c) 2003-2008 Fabrice Bellard'"
with details of:
"Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/engine.py", line 493, in
run_domain
vm.startup()
File "/usr/share/virt-manager/virtManager/domain.py", line 558, in
startup
self.vm.create()
File "/usr/lib/python2.6/dist-packages/libvirt.py", line 293, in
create

    if ret == -1: raise libvirtError ('virDomainCreate() failed',

dom=self)
libvirtError: internal error cannot parse QEMU version number in 'QEMU PC emulator version 0.11.0 (kvm-devel), Copyright (c) 2003-2008 Fabrice Bellard'"

Primary questions are:
What is the simplest starting point to use your patches?
Is there a module for the HOST that can be loaded into a running KVM? Do I need to build and install the Linux kernel from the KVM git tree?

Quoted 8 lines
Quoted 4 lines

I have checked out the qemu-kvm-0.11.0 and built and installed but then I get a version miss-match. (this was unpatched as the patch does not work on this version).

shared memory requires a patched qemu-kvm at this point.

Quoted 1 line
Quoted 6 lines
Quoted 4 lines

The host is Ubuntu 9.10 64 bit, with ubuntu's KVM installed.

Can I simply somehow build and install ivshmem module, or do I need to rebuild the kernel? eg get kvm.git and build and install new kernel.

You can just build the module.

Does this apply to both the guest and the host, or just the guest. If this applies to host, where can I find the module?

Quoted 5 lines
Quoted 2 lines

Is there another KVM binary that I can use, instead of Ubuntu's?

You can't use a distro binary as they don't support shared memory.

#3 lore raw
Quoted 11 lines · Neville Clark

Hi Cam,

Quoted 7 lines · Cam Macdonell

Can you expand on how it doesn't run?  I would suggest using the master branch and patching it with my patches.  As well as patching, you need to run with something like

-ivshmem 128,myshm

Quoted 7 lines
Quoted 1 line

to actually create the shared memory device.

Just to be clear, I think I have successfully loaded the required module into the guest, and it is only on the host that I am having trouble.

I am currently using virt-manager and distro KVM to get something up. I am much happier with a GUI then command-line.

using shared memory requires a special command-line argument '-ivshmem' that libvirt (the library/API that virt-manager uses to control VMs) does not know about. So you will need to use the command-line at this point.

Quoted 3 lines

I had hoped that I would be able to patch or load a module into this Ubuntu's KVM.

You need to compile your own version of the qemu-kvm executable.

Quoted 16 lines

Installing KVM from Ubuntu does NOT seems to change the running Linux kernel 'uname -a' after install of KVM is "Linux dingo3 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 04:38:19 UTC 2010 x86_64 GNU/Linux"

What I have tried to do is build and install qemu-kvm from the git tree *without* patches. And then run an already configured guest using virt-manager. The result is that using the HEAD, after about 30 secs I get a pop-up with
"Error starting domain: monitor socket did not show up.: Connection refused"
with details of:
"Traceback (most recent call last):
 File "/usr/share/virt-manager/virtManager/engine.py", line 493, in run_domain
   vm.startup()

Quoted 8 lines

 File "/usr/share/virt-manager/virtManager/domain.py", line 558, in startup
   self.vm.create()
 File "/usr/lib/python2.6/dist-packages/libvirt.py", line 293, in create
   if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: monitor socket did not show up.: Connection refused"

That appears to be a different error related to libvirt trying to connect to the Qemu monitor which is a control interface for Qemu/KVM.
This has nothing to do with shared memory.

Quoted 23 lines

after switching version qemu-kvm-0.11.0 and repeating above I get immediate (no 30 sec delay) pop-up
"Error starting domain: internal error cannot parse QEMU version number in 'QEMU PC emulator version 0.11.0 (kvm-devel), Copyright (c) 2003-2008 Fabrice Bellard'"
with details of:
"Traceback (most recent call last):
 File "/usr/share/virt-manager/virtManager/engine.py", line 493, in run_domain
   vm.startup()
 File "/usr/share/virt-manager/virtManager/domain.py", line 558, in startup
   self.vm.create()
 File "/usr/lib/python2.6/dist-packages/libvirt.py", line 293, in create
   if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: internal error cannot parse QEMU version number in 'QEMU PC emulator version 0.11.0 (kvm-devel), Copyright (c) 2003-2008 Fabrice Bellard'"

Quoted 2 lines

Primary questions are:
What is the simplest starting point to use your patches?

Fetch the qemu-kvm git repo here:

git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git

compile and run a guest VM by command-line. Once you have that, apply the qemu-kvm patch and try recompiling/running.

Quoted 1 line

Is there a module for the HOST that can be loaded into a running KVM?

Shared memory requires no modification to the host kernel at all. But you need to modify the Qemu/KVM executable that runs on the host.

Quoted 1 line

Do I need to build and install the Linux kernel from the KVM git tree?

No, you don't need to compile a whole kernel, you can build the kernel module separately. I have a makefile to do this in the git repo you downloaded from gitorious. But leave that for now and let's focus on compiling qemu/kvm with the patches, then we'll move on to the guest kernel.

Cam