DPDK patches and discussions
 help / color / mirror / Atom feed
From: Maxime Coquelin <maxime.coquelin@redhat.com>
To: "Daniel P. Berrange" <berrange@redhat.com>,
	"dev@openvswitch.org" <dev@openvswitch.org>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	Michal Privoznik <mprivozn@redhat.com>,
	Kevin Traynor <ktraynor@redhat.com>,
	Ciara Loftus <ciara.loftus@intel.com>,
	mark.b.kavanagh@intel.com, Flavio Leitner <fleitner@redhat.com>,
	Yuanhan Liu <yuanhan.liu@linux.intel.com>,
	Daniele Di Proietto <diproiettod@vmware.com>,
	"dev@dpdk.org" <dev@dpdk.org>,
	"libvir-list@redhat.com" <libvir-list@redhat.com>
Subject: Re: [dpdk-dev] [libvirt] [RFC] Vhost-user backends cross-version migration support
Date: Fri, 3 Feb 2017 12:36:41 +0100	[thread overview]
Message-ID: <41847c4b-e7ec-6e42-8265-2efeb1e2c0b8@redhat.com> (raw)
In-Reply-To: <20170203101126.GE10350@redhat.com>



On 02/03/2017 11:11 AM, Daniel P. Berrange wrote:
> On Fri, Feb 03, 2017 at 10:41:12AM +0100, Maxime Coquelin wrote:
>>
>>
>> On 02/03/2017 10:27 AM, Daniel P. Berrange wrote:
>>> On Thu, Feb 02, 2017 at 08:27:18PM +0200, Michael S. Tsirkin wrote:
>>>> On Thu, Feb 02, 2017 at 06:21:55PM +0000, Daniel P. Berrange wrote:
>>>>> On Thu, Feb 02, 2017 at 07:31:49PM +0200, Michael S. Tsirkin wrote:
>>>>>> On Thu, Feb 02, 2017 at 05:29:08PM +0000, Daniel P. Berrange wrote:
>>>>>>> On Thu, Feb 02, 2017 at 07:20:35PM +0200, Michael S. Tsirkin wrote:
>>>>>>>> On Thu, Feb 02, 2017 at 05:10:28PM +0000, Daniel P. Berrange wrote:
>>>>>>>>> On Thu, Feb 02, 2017 at 06:21:55PM +0200, Michael S. Tsirkin wrote:
>>>>>>>>>> On Thu, Feb 02, 2017 at 03:06:21PM +0000, Daniel P. Berrange wrote:
>>>>>>>>>>> On Thu, Feb 02, 2017 at 03:14:01PM +0100, Maxime Coquelin wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On 02/01/2017 12:41 PM, Daniel P. Berrange wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> It depends where / how in OVS it needs to be set. The only stuff libvirt
>>>>>>>>>>>>> does with OVS is to run 'add-port' and 'del-port' commands via the ovs
>>>>>>>>>>>>> cli tool. We pass through arguments from the port profile stored in the
>>>>>>>>>>>>> XML config.
>>>>>>>>>>>>>
>>>>>>>>>>>>>   <interface type='bridge'>
>>>>>>>>>>>>>     <source bridge='ovsbr'/>
>>>>>>>>>>>>>     <virtualport type='openvswitch'>
>>>>>>>>>>>>>       <parameters profileid='menial' interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
>>>>>>>>>>>>>     </virtualport>
>>>>>>>>>>>>>   </interface>
>>>>>>>>>>>>>
>>>>>>>>>>>>> eg those things in <parameters/> get passed as cli args to the 'add-port'
>>>>>>>>>>>>> command. Soo if add-port needs this new version string, then we'd need
>>>>>>>>>>>>> to add the version to the openvswitch virtualport XML.
>>>>>>>>>>>>>
>>>>>>>>>>>>> If the version is provided to OVS in a different command, then it would
>>>>>>>>>>>>> probably be outside scope of libvirt.
>>>>>>>>>>>>
>>>>>>>>>>>> I think it would make sense to be a parameter of the add-port command.
>>>>>>>>>>>> But it would be for vhost-user related add-port command, I didn't find
>>>>>>>>>>>> where/if this is managed in libvirt XML.
>>>>>>>>>>>
>>>>>>>>>>> For vhost-user, libvirt does not have any interaction with OVS at
>>>>>>>>>>> all. If the thing that's using the vhost-user UNIX socket, in turn
>>>>>>>>>>> connects to OVS, that's outside scope of libvirt. IOW, for vhost-user
>>>>>>>>>>> OVS it seems like that job is for Nova / os-vif to solve.
>>>>>>>>>>
>>>>>>>>>> I don't think they currently understand the issues involved in
>>>>>>>>>> cross-version migration though.  This is a complex subject and easy to
>>>>>>>>>> get wrong.  It would be significantly better to figure it out at libvirt
>>>>>>>>>> level since it already deals with cross-version migration issues.
>>>>>>>>>
>>>>>>>>> Libvirt considers vhost-user to be a blackbox though - it just exposes
>>>>>>>>> a UNIX socket, and whatever is on the other end is completely opaque.
>>>>>>>>> The fact that the other end might plumb the data stream into openvswitch
>>>>>>>>> is not something libvirt should know, as we don't want to end up having
>>>>>>>>> to add custom code to libvirt for every different vhost-user server
>>>>>>>>> impl.
>>>>>>>>>
>>>>>>>>> IOW, if the version str can be passed to QEMU, and then onto vhost-user
>>>>>>>>> backend in QEMU, then libvirt can be involved. If the version str has
>>>>>>>>> to be given to openvswitch that's not for libvirt to deall with.
>>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>> Daniel
>>>>>>>>
>>>>>>>> It's not just about passing it to QEMU. The following is needed:
>>>>>>>> - need to query version when creating VM/device
>>>>>>>> - need to query supported versions when migrating VM
>>>>>>>
>>>>>>> Those are both things that nova can do, since it knows what the vhost-user
>>>>>>> device in question is connected to, and so can query the versions, and check
>>>>>>> versions before triggering migration with libvirt
>>>>>>
>>>>>> It can, but then it will need to query libvirt or source for the version
>>>>>> string since it's in the XML.
>>>>>
>>>>> No, it wouldn't be in the XML at all. Nova on the source queries what
>>>>> vhostuser version it has and what the target host has, and can prevent
>>>>> the migration if they're incompatible.
>>>>
>>>> This is not sufficient. Exactly the same as qemu machine type,
>>>> this must be preserved from time of install and moved
>>>> wherever VM goes.
>>>
>>> Nova has the ability todo that.
>>>
>>>>> I dont think libvirt has to be
>>>>> involved at all for this, as all the info can be obtained by nova/os-vif
>>>>> from the vhostuser impl it has configured.
>>>>
>>>> Given we are already confused at libvirt level, I find it
>>>> highly unlikely upper levels will do the right thing.
>>>
>>> The only confusion is about what must consume the data. I mistakenly
>>> thought it was being proposed that the qemu vhostuser backend was
>>> being given a version string. Now it seems the version info must be
>>> set against the 3rd party component that vhostuser connects to, and
>>> that is outside scope of libvirt. That is entirely managed by Nova
>>> today, so Nova is the right thing to manage this versioning info.
>>
>> This is my understanding, with as example using Nova:
>> 1. Before starting the VM, Nova queries source host's OVS and all
>>    possible destination hosts' OVS to retrieve supported versions
>> 2. Nova chooses the first common version supported by all hosts
>> 3. Nova create the dpdkvhostuser interfaces in OVS with passing the
>>    selected version as parameter
>>
>> That should be enough, right? Or maybe I miss something?
>
> It isn't realistic to check all possible destination hosts when first
> starting QEMU, not least becasue they may not yet exist. New hardware
> may be deployed *after* QEMU is first started.
>
> When starting the VM, it should just default to using whatever the
> latest version is on the host in question.
>
> There can be an optional host configuration parameter that admins can
> set to force use of an older version.
>
> This is how Nova deals with machine type - it defaults to latest, but
> you can set hw_machine_type in nova.conf to force an older version if
> you need migration compatibility between hosts with varying versions.

Ok, I see.
I thought it could be automated somehow if a list of available host
is already present.

> At time of migration, Nova need to request the version of the target
> host. If this version is not compatible with what the VM is currently
> using, then Nova should *not* start the migration, it should raise
> an error such that the scheduler retries and picks a different target
> host

Thanks for the clarification.

Maxime

  reply	other threads:[~2017-02-03 11:36 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-01  8:35 [dpdk-dev] " Maxime Coquelin
2017-02-01  9:14 ` [dpdk-dev] [libvirt] " Michal Privoznik
2017-02-01  9:43   ` Daniel P. Berrange
2017-02-01 11:33     ` Maxime Coquelin
2017-02-01 11:41       ` Daniel P. Berrange
2017-02-01 22:32         ` Michael S. Tsirkin
2017-02-02 14:14         ` Maxime Coquelin
2017-02-02 15:06           ` Daniel P. Berrange
2017-02-02 16:21             ` Michael S. Tsirkin
2017-02-02 17:10               ` Daniel P. Berrange
2017-02-02 17:20                 ` Michael S. Tsirkin
2017-02-02 17:29                   ` Daniel P. Berrange
2017-02-02 17:31                     ` Michael S. Tsirkin
2017-02-02 18:21                       ` Daniel P. Berrange
2017-02-02 18:27                         ` Michael S. Tsirkin
2017-02-03  9:27                           ` Daniel P. Berrange
2017-02-03  9:41                             ` Maxime Coquelin
2017-02-03 10:11                               ` Daniel P. Berrange
2017-02-03 11:36                                 ` Maxime Coquelin [this message]
2017-02-02 16:47             ` Laine Stump
2017-02-02 17:09               ` Michael S. Tsirkin
2017-02-02 17:13                 ` Daniel P. Berrange
2017-02-02 17:16                 ` Maxime Coquelin
2017-02-03  9:12                   ` Michal Privoznik
2017-02-03 17:40                     ` Laine Stump
2017-02-03 14:11 ` [dpdk-dev] " Maxime Coquelin
2017-02-03 15:34   ` Michael S. Tsirkin
2017-02-03 15:54     ` Daniel P. Berrange
2017-02-03 16:10       ` Michael S. Tsirkin
2017-02-03 17:22     ` Maxime Coquelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=41847c4b-e7ec-6e42-8265-2efeb1e2c0b8@redhat.com \
    --to=maxime.coquelin@redhat.com \
    --cc=berrange@redhat.com \
    --cc=ciara.loftus@intel.com \
    --cc=dev@dpdk.org \
    --cc=dev@openvswitch.org \
    --cc=diproiettod@vmware.com \
    --cc=fleitner@redhat.com \
    --cc=ktraynor@redhat.com \
    --cc=libvir-list@redhat.com \
    --cc=mark.b.kavanagh@intel.com \
    --cc=mprivozn@redhat.com \
    --cc=mst@redhat.com \
    --cc=yuanhan.liu@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).