[Libvirt-cim] [PATCH 1/3] make force use qemu configurable

Wenchao Xia xiawenc at linux.vnet.ibm.com
Fri Apr 26 03:24:14 UTC 2013


于 2013-4-26 0:42, John Ferlan 写道:
> On 04/23/2013 05:30 AM, cngesaint at outlook.com wrote:
>> From: Wenchao Xia <xiawenc at linux.vnet.ibm.com>
>>
>> Since in nested KVM, libvirt-cim doesn't handle it well now, add
>> this option to make it run well with qemu wchi help development
>> and test.
>
> I think your commit message more simply stated is:
>
> Allow libvirt-cim to be supported within a nested KVM environment in
> order to more easily develop and test various configurations
>
> What happens if someone sets this in a non nested environment?  I would
> think you'd want to test if the 'nested' property is set...
>
Hi, John
   The commit message is not clear, actually this patch provide a way to
manually disable KVM and fall back to qemu(without usage of hardware
acceleration module, kvm.ko), Since using KVM have some problem in
libvirt-cim in nested KVM env(which is a test env, most issues happens
in the xml gen in libvirt-cim and parsing in libvirt).
   In non nested environment, it is same, kvm acceleration is disabled.

>>
>> Signed-off-by: Xu Wang <cngesaint at outlook.com>
>> ---
>>   libvirt-cim.conf                          |    8 ++++++++
>>   libxkutil/misc_util.c                     |    8 ++++++++
>>   libxkutil/misc_util.h                     |    1 +
>>   src/Virt_VirtualSystemManagementService.c |    7 +++++++
>>   4 files changed, 24 insertions(+), 0 deletions(-)
>>
>> diff --git a/libvirt-cim.conf b/libvirt-cim.conf
>> index 37d7b0f..3244ee3 100644
>> --- a/libvirt-cim.conf
>> +++ b/libvirt-cim.conf
>> @@ -30,3 +30,11 @@
>>   #  Default value: NULL, that is not set.
>>   #
>>   # migrate_ssh_temp_key = "/root/vm_migrate_tmp_id_rsa";
>> +
>> +# force_use_qemu (bool)
>> +#  Since in nested KVM, libvirt-cim doesn't handler it well now, so add this
>> +#  option to make it run well with qemu which help development and test.
>> +#  Possible values: {true,false}
>> +#  Default value: false
>> +#
>> +# force_use_qemu = false;
>
>
> I suggest using the comments from above here too...
>
>
>> diff --git a/libxkutil/misc_util.c b/libxkutil/misc_util.c
>> index 00eb4b1..4c0b0a1 100644
>> --- a/libxkutil/misc_util.c
>> +++ b/libxkutil/misc_util.c
>> @@ -227,6 +227,14 @@ static int is_read_only(void)
>>           return prop.value_bool;
>>   }
>>
>> +bool get_force_use_qemu(void)
>> +{
>> +        static LibvirtcimConfigProperty prop = {
>> +                                       "force_use_qemu", CONFIG_BOOL, {0}, 0};
>> +        libvirt_cim_config_get(&prop);
>> +        return prop.value_bool;
>> +}
>> +
>>   const char *get_mig_ssh_tmp_key(void)
>>   {
>>           static LibvirtcimConfigProperty prop = {
>> diff --git a/libxkutil/misc_util.h b/libxkutil/misc_util.h
>> index 0f52290..9e6b419 100644
>> --- a/libxkutil/misc_util.h
>> +++ b/libxkutil/misc_util.h
>> @@ -154,6 +154,7 @@ int virt_set_status(const CMPIBroker *broker,
>>
>>   /* get libvirt-cim config */
>>   const char *get_mig_ssh_tmp_key(void);
>> +bool get_force_use_qemu(void);
>>
>>   /*
>>    * Local Variables:
>> diff --git a/src/Virt_VirtualSystemManagementService.c b/src/Virt_VirtualSystemManagementService.c
>> index cbb646d..4e93ef0 100644
>> --- a/src/Virt_VirtualSystemManagementService.c
>> +++ b/src/Virt_VirtualSystemManagementService.c
>> @@ -394,6 +394,13 @@ static bool system_has_kvm(const char *pfx)
>>           virConnectPtr conn;
>>           char *caps = NULL;
>>           bool kvm = false;
>> +        bool force_use_qemu = get_force_use_qemu();
>> +
>> +        /* hack for nested KVM */
>> +        if (force_use_qemu) {
>> +                CU_DEBUG("Enter force use qemu mode!");
>> +                return false;
>> +        }
>
> The above check is being done on the "local" system right?  While the
> following check is being done on the "BROKER" system, right?  Which may
   They both happen on local system.

> not be the same as the "local" system?  So where should the check of
> whether the system in which is executing libvirt-cim code be really
> made?  IOW, are you sure this is the right place to check? What's the
> differentiation in libvirt-cim between QEMU & KVM being made for? Being
> "new" I thought they were the same.
>
> I'm not even convinced the routine is doing the right thing, but perhaps
> I just don't have enough history.  I see a virsh capabilities on my
> system returns some kvm defs and some qemu defs, so a blind strstr is
> returning true...
>
> The prime differentiator is that the calling routine will set
> domain->type to QEMU now rather than KVM and I'm not sure I understand
> how by using that setting  we'll be able support nested KVM.
   Support nested KVM will need more efforts, I think you have found the
right place, there are some issues in following path, what I saw
is libvirt rejected some xml generated. To avoid the troubles, so
disable it first, to test libvirt-cim for qemu, for that most part
are the same with KVM case,

>
>
> John
>>
>>           conn = connect_by_classname(_BROKER, pfx, &s);
>>           if ((conn == NULL) || (s.rc != CMPI_RC_OK)) {
>>
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim
>


-- 
Best Regards

Wenchao Xia




More information about the Libvirt-cim mailing list