[libvirt-users] Is there a way to disable libvirt qemu monitor while creating kvm vm using virsh?

Min Du min.du.email at gmail.com
Tue Nov 11 01:54:58 UTC 2014


Hi Kashyap,

Thanks for the reply. 

>> 
>> Now for some reason, I need to add “ -qmp tcp:127.0.0.1:1235” when
>> creating a KVM VM using libvirt.
> 
> You might need to elaborate how exactly you're doing this.

I wanted to add “-qmp tcp:127.0.0.1:1235” when creating VM because I was using a multi-level debugger which needs this option to get more information of the VM kernel debuginfo and the processes running inside the VM besides gdb attach.

> 
>> This command meaning in “qemu-kvm --help” is: -qmp dev        like
>> -monitor but opens in 'control' mode.
> 
> The above is used if you want to explicitly control a running QEMU
> instance via QMP, e.g. manually issue them QMP commands via telnet(1)
> for development/testing/debugging.

This is exactly what I need - for debugging. Is there a way to achieve this while still using the default monitor libvirt provides?

> 
>> I added command-line equivalent options into the xml file, like below
>> format:
>> 
>>  <qemu:commandline> <qemu:arg value="-s"/> <qemu:arg value="-qmp"/>
>>  <qemu:arg value="tcp:127.0.0.1:1235"/> </qemu:commandline>
> 
> In guests created in a regular fashion (e.g. virt-install,
> virt-manager), this is all handled by libvirt for you via its APIs.
> 
>> However when I create VM using this xml file, I got the error:
>> 
>> # virsh create instance-libvirt.xml error: Failed to create domain
>> from instance-libvirt.xml error: internal error process exited while
>> connecting to monitor: qemu-kvm: -qmp tcp:127.0.0.1:1235: Duplicate ID
>> 'monitor' for mon duplicate chardev: monitor
>> 
>> The VM I created, without “—qmp” option, has below options showing in
>> “ps aux | grep qemu-kvm”:
>> 
>> -chardev
>> socket,id=charmonitor,path=/var/lib/libvirt/qemu/vmifs_test.monitor,server,nowait
>> -mon chardev=charmonitor,id=monitor,mode=control
>> 
>> Looks like libvirt automatically adds the monitor options upon VM
>> creation.
> 
> As I understand it, libvirt uses its own APIs to handle interactions
> with QEMU monitor console, e.g. qemuMonitorOpen(), etc.
> 
> If you're fine delving into code, you might want to libvirt
> sources, specificially this directory: libvirt/src/qemu.

Messing up the source code is the last thing I want to do. I am using the default libvirt coming with CentOs6.5, last time I modified and installed the libvirt source code, I got seriously version-not-match problem.

> 
>> Is there a way to disable this and use “—qmp” instead when creating
>> VM?
> 
> I doubt libvirt developers will agree with this proposal. But if you're
> intending to try QEMU monitor console for testing, here's some old notes
> on different ways to access QEMU monitor via QMP:
> 
>    http://kashyapc.com/2013/03/31/multiple-ways-to-access-qemu-monitor-protocol-qmp/


I’ve read this and looks like you’re also using command line to create a KVM machine while enabling “—qmp” option. Is there a way to do this but still creating VM through libvirt?

Thank you very much for your time!


Best Regards,
Min

On Nov 9, 2014, at 11:34 AM, Kashyap Chamarthy <kchamart at redhat.com> wrote:

> On Fri, Nov 07, 2014 at 03:28:57PM -0700, Min Du wrote:
>> Hi,
>> 
>> Now for some reason, I need to add “ -qmp tcp:127.0.0.1:1235” when
>> creating a KVM VM using libvirt.
> 
> You might need to elaborate how exactly you're doing this.
> 
>> This command meaning in “qemu-kvm --help” is: -qmp dev        like
>> -monitor but opens in 'control' mode.
> 
> The above is used if you want to explicitly control a running QEMU
> instance via QMP, e.g. manually issue them QMP commands via telnet(1)
> for development/testing/debugging.
> 
>> I added command-line equivalent options into the xml file, like below
>> format:
>> 
>>  <qemu:commandline> <qemu:arg value="-s"/> <qemu:arg value="-qmp"/>
>>  <qemu:arg value="tcp:127.0.0.1:1235"/> </qemu:commandline>
> 
> In guests created in a regular fashion (e.g. virt-install,
> virt-manager), this is all handled by libvirt for you via its APIs.
> 
>> However when I create VM using this xml file, I got the error:
>> 
>> # virsh create instance-libvirt.xml error: Failed to create domain
>> from instance-libvirt.xml error: internal error process exited while
>> connecting to monitor: qemu-kvm: -qmp tcp:127.0.0.1:1235: Duplicate ID
>> 'monitor' for mon duplicate chardev: monitor
>> 
>> The VM I created, without “—qmp” option, has below options showing in
>> “ps aux | grep qemu-kvm”:
>> 
>> -chardev
>> socket,id=charmonitor,path=/var/lib/libvirt/qemu/vmifs_test.monitor,server,nowait
>> -mon chardev=charmonitor,id=monitor,mode=control
>> 
>> Looks like libvirt automatically adds the monitor options upon VM
>> creation.
> 
> As I understand it, libvirt uses its own APIs to handle interactions
> with QEMU monitor console, e.g. qemuMonitorOpen(), etc.
> 
> If you're fine delving into code, you might want to libvirt
> sources, specificially this directory: libvirt/src/qemu.
> 
>> Is there a way to disable this and use “—qmp” instead when creating
>> VM?
> 
> I doubt libvirt developers will agree with this proposal. But if you're
> intending to try QEMU monitor console for testing, here's some old notes
> on different ways to access QEMU monitor via QMP:
> 
>    http://kashyapc.com/2013/03/31/multiple-ways-to-access-qemu-monitor-protocol-qmp/
> 
> -- 
> /kashyap





More information about the libvirt-users mailing list