All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: Yan Zhao <yan.y.zhao@intel.com>,
	intel-gvt-dev@lists.freedesktop.org, cjia@nvidia.com,
	kvm@vger.kernel.org, aik@ozlabs.ru, Zhengxiao.zx@alibaba-inc.com,
	shuangtai.tst@alibaba-inc.com, qemu-devel@nongnu.org,
	kwankhede@nvidia.com, eauger@redhat.com, yi.l.liu@intel.com,
	eskultet@redhat.com, ziye.yang@intel.com, mlevitsk@redhat.com,
	pasic@linux.ibm.com, libvir-list@redhat.com,
	arei.gonglei@huawei.com, felipe@nutanix.com, Ken.Xue@amd.com,
	kevin.tian@intel.com, dgilbert@redhat.com,
	zhenyuw@linux.intel.com, changpeng.liu@intel.com,
	cohuck@redhat.com, linux-kernel@vger.kernel.org,
	zhi.a.wang@intel.com, jonathan.davies@nutanix.com,
	shaopeng.he@intel.com
Subject: Re: [Qemu-devel] [PATCH 1/2] vfio/mdev: add version field as mandatory attribute for mdev device
Date: Tue, 23 Apr 2019 14:44:00 +0100	[thread overview]
Message-ID: <20190423134400.GL6022@redhat.com> (raw)
In-Reply-To: <20190423063540.7ec83c31@x1.home>

On Tue, Apr 23, 2019 at 06:35:40AM -0600, Alex Williamson wrote:
> On Tue, 23 Apr 2019 11:39:39 +0100
> Daniel P. Berrangé <berrange@redhat.com> wrote:
> 
> > On Fri, Apr 19, 2019 at 04:35:04AM -0400, Yan Zhao wrote:
> > > +* version
> > > +
> > > +  This attribute is rw. It is used to check whether two devices are compatible
> > > +  for live migration. If this attribute is missing, then the corresponding mdev
> > > +  device is regarded as not supporting live migration.
> > > +
> > > +  It consists of two parts: common part and vendor proprietary part.
> > > +  common part: 32 bit. lower 16 bits is vendor id and higher 16 bits identifies
> > > +               device type. e.g., for pci device, it is
> > > +               "pci vendor id" | (VFIO_DEVICE_FLAGS_PCI << 16).
> > > +  vendor proprietary part: this part is varied in length. vendor driver can
> > > +               specify any string to identify a device.
> > > +
> > > +  When reading this attribute, it should show device version string of the device
> > > +  of type <type-id>. If a device does not support live migration, it should
> > > +  return errno.
> > > +  When writing a string to this attribute, it returns errno for incompatibility
> > > +  or returns written string length in compatibility case. If a device does not
> > > +  support live migration, it always returns errno.
> > > +
> > > +  for example.
> > > +  # cat \
> > > + /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_2/version
> > > +  00028086-193b-i915-GVTg_V5_2
> > > +
> > > +  #echo 00028086-193b-i915-GVTg_V5_2 > \
> > > + /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_4/version
> > > + -bash: echo: write error: Invalid argument
> > > +  
> > 
> > IIUC this path is against the physical device. IOW, the mgmt app would have
> > to first write to the "version" file to choose a version, and then write to
> > the "create" file to actually create an virtual device. This has the obvious
> > concurrency problem if multiple devices are being created at the same time
> > and distinct versions for each device are required. There would need to be
> > a locking scheme defined to ensure safety.
> 
> "Create a device of a given version" is not an intended feature of this
> interface aiui.  Writing the version attribute only indicates
> migration compatibility with a binary result.
>  
> > Wouldn't it be better if we can pass the desired version when we write to
> > the "create" file, so that we avoid any concurrent usage problems. "version"
> > could be just a read-only file with a *list* of supported versions.
> > 
> > eg
> > 
> >   $ cat /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_4/version
> >   5.0
> >   5.1
> >   5.2
> > 
> >   $ echo "83b8f4f2-509f-382f-3c1e-e6bfe0fa1001;version=5.2" >
> >       /sys/devices/virtual/mtty/mtty/mdev_supported_types/mtty-2/create
> 
> This is reminiscent of the proposed aggregation support, but again,
> this sort of feature is not intended here.  It's no expected that any
> vendor driver would support creating device types of different
> versions, but they may support migration from different versions.

Hmm, that's a subtle distinction I wasn't seeing the patch series.
IIUC from what you're saying, a device can be created with version
"C", but for an incoming migration it can (potentially) accept
serialized state matching any of versions "A", "B" or "C".

That is sufficient if migration is being used as a host upgrade
tool, to move from OS release N to N + 1.

It wouldn't cover the case where you need to support backwards
migration too. eg if you have a mixture of hosts with release
N and N + 1 and want to make sure that VMs can always move
betweeen any host.  That would require that you can create
mdevs with the lowest common denominator version, not solely
the most recent.

In QEMU this is done by mgmt applications picking a versioned
machine type for QEMU that is older than most recent.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

WARNING: multiple messages have this Message-ID (diff)
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: cjia@nvidia.com, kvm@vger.kernel.org, aik@ozlabs.ru,
	Zhengxiao.zx@alibaba-inc.com, shuangtai.tst@alibaba-inc.com,
	qemu-devel@nongnu.org, kwankhede@nvidia.com, eauger@redhat.com,
	yi.l.liu@intel.com, eskultet@redhat.com, ziye.yang@intel.com,
	mlevitsk@redhat.com, pasic@linux.ibm.com, libvir-list@redhat.com,
	arei.gonglei@huawei.com, felipe@nutanix.com, Ken.Xue@amd.com,
	kevin.tian@intel.com, Yan Zhao <yan.y.zhao@intel.com>,
	dgilbert@redhat.com, zhenyuw@linux.intel.com,
	intel-gvt-dev@lists.freedesktop.org, changpeng.liu@intel.com,
	cohuck@redhat.com, linux-kernel@vger.kernel.org,
	zhi.a.wang@intel.com, jonathan.davies@nutanix.com,
	shaopeng.he@intel.com
Subject: Re: [Qemu-devel] [PATCH 1/2] vfio/mdev: add version field as mandatory attribute for mdev device
Date: Tue, 23 Apr 2019 14:44:00 +0100	[thread overview]
Message-ID: <20190423134400.GL6022@redhat.com> (raw)
Message-ID: <20190423134400.JgNWwXyL8l1LvfYOxW11S3KAzlZg9n47Ab5mHNvYDv8@z> (raw)
In-Reply-To: <20190423063540.7ec83c31@x1.home>

On Tue, Apr 23, 2019 at 06:35:40AM -0600, Alex Williamson wrote:
> On Tue, 23 Apr 2019 11:39:39 +0100
> Daniel P. Berrangé <berrange@redhat.com> wrote:
> 
> > On Fri, Apr 19, 2019 at 04:35:04AM -0400, Yan Zhao wrote:
> > > +* version
> > > +
> > > +  This attribute is rw. It is used to check whether two devices are compatible
> > > +  for live migration. If this attribute is missing, then the corresponding mdev
> > > +  device is regarded as not supporting live migration.
> > > +
> > > +  It consists of two parts: common part and vendor proprietary part.
> > > +  common part: 32 bit. lower 16 bits is vendor id and higher 16 bits identifies
> > > +               device type. e.g., for pci device, it is
> > > +               "pci vendor id" | (VFIO_DEVICE_FLAGS_PCI << 16).
> > > +  vendor proprietary part: this part is varied in length. vendor driver can
> > > +               specify any string to identify a device.
> > > +
> > > +  When reading this attribute, it should show device version string of the device
> > > +  of type <type-id>. If a device does not support live migration, it should
> > > +  return errno.
> > > +  When writing a string to this attribute, it returns errno for incompatibility
> > > +  or returns written string length in compatibility case. If a device does not
> > > +  support live migration, it always returns errno.
> > > +
> > > +  for example.
> > > +  # cat \
> > > + /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_2/version
> > > +  00028086-193b-i915-GVTg_V5_2
> > > +
> > > +  #echo 00028086-193b-i915-GVTg_V5_2 > \
> > > + /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_4/version
> > > + -bash: echo: write error: Invalid argument
> > > +  
> > 
> > IIUC this path is against the physical device. IOW, the mgmt app would have
> > to first write to the "version" file to choose a version, and then write to
> > the "create" file to actually create an virtual device. This has the obvious
> > concurrency problem if multiple devices are being created at the same time
> > and distinct versions for each device are required. There would need to be
> > a locking scheme defined to ensure safety.
> 
> "Create a device of a given version" is not an intended feature of this
> interface aiui.  Writing the version attribute only indicates
> migration compatibility with a binary result.
>  
> > Wouldn't it be better if we can pass the desired version when we write to
> > the "create" file, so that we avoid any concurrent usage problems. "version"
> > could be just a read-only file with a *list* of supported versions.
> > 
> > eg
> > 
> >   $ cat /sys/bus/pci/devices/0000\:00\:02.0/mdev_supported_types/i915-GVTg_V5_4/version
> >   5.0
> >   5.1
> >   5.2
> > 
> >   $ echo "83b8f4f2-509f-382f-3c1e-e6bfe0fa1001;version=5.2" >
> >       /sys/devices/virtual/mtty/mtty/mdev_supported_types/mtty-2/create
> 
> This is reminiscent of the proposed aggregation support, but again,
> this sort of feature is not intended here.  It's no expected that any
> vendor driver would support creating device types of different
> versions, but they may support migration from different versions.

Hmm, that's a subtle distinction I wasn't seeing the patch series.
IIUC from what you're saying, a device can be created with version
"C", but for an incoming migration it can (potentially) accept
serialized state matching any of versions "A", "B" or "C".

That is sufficient if migration is being used as a host upgrade
tool, to move from OS release N to N + 1.

It wouldn't cover the case where you need to support backwards
migration too. eg if you have a mixture of hosts with release
N and N + 1 and want to make sure that VMs can always move
betweeen any host.  That would require that you can create
mdevs with the lowest common denominator version, not solely
the most recent.

In QEMU this is done by mgmt applications picking a versioned
machine type for QEMU that is older than most recent.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|


  reply	other threads:[~2019-04-23 13:44 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-19  8:32 [PATCH 0/2] introduction of version attribute for VFIO live migration Yan Zhao
2019-04-19  8:32 ` [Qemu-devel] " Yan Zhao
2019-04-19  8:32 ` Yan Zhao
2019-04-19  8:35 ` [PATCH 1/2] vfio/mdev: add version field as mandatory attribute for mdev device Yan Zhao
2019-04-19  8:35   ` [Qemu-devel] " Yan Zhao
2019-04-19  8:35   ` Yan Zhao
2019-04-22 14:39   ` Alex Williamson
2019-04-22 14:39     ` [Qemu-devel] " Alex Williamson
2019-04-22 14:39     ` Alex Williamson
2019-04-23  1:01     ` Yan Zhao
2019-04-23  1:01       ` [Qemu-devel] " Yan Zhao
2019-04-23  1:21       ` Alex Williamson
2019-04-23  1:21         ` [Qemu-devel] " Alex Williamson
2019-04-23  5:41         ` Yan Zhao
2019-04-23  5:41           ` [Qemu-devel] " Yan Zhao
2019-04-23  9:45           ` Cornelia Huck
2019-04-23  9:45             ` [Qemu-devel] " Cornelia Huck
2019-04-23  9:45             ` Cornelia Huck
2019-04-23 10:24           ` Daniel P. Berrangé
2019-04-23 10:24             ` Daniel P. Berrangé
2019-04-23 10:24             ` Daniel P. Berrangé
2019-04-24  3:33             ` Yan Zhao
2019-04-24  3:33               ` Yan Zhao
2019-04-24  3:33               ` Yan Zhao
2019-04-23 15:02           ` Alex Williamson
2019-04-23 15:02             ` [Qemu-devel] " Alex Williamson
2019-04-24  3:39             ` Yan Zhao
2019-04-24 14:14               ` Alex Williamson
2019-04-24 14:14                 ` [Qemu-devel] " Alex Williamson
2019-04-26  1:44                 ` Yan Zhao
2019-04-26  1:44                   ` [Qemu-devel] " Yan Zhao
2019-04-23  9:59   ` Cornelia Huck
2019-04-23  9:59     ` [Qemu-devel] " Cornelia Huck
2019-04-23  9:59     ` Cornelia Huck
2019-04-24  3:10     ` Yan Zhao
2019-04-24  3:10       ` [Qemu-devel] " Yan Zhao
2019-04-24  7:56       ` Cornelia Huck
2019-04-24  7:56         ` [Qemu-devel] " Cornelia Huck
2019-04-24  8:15         ` Yan Zhao
2019-04-24  8:15           ` [Qemu-devel] " Yan Zhao
2019-04-30 15:29           ` Cornelia Huck
2019-04-30 15:29             ` [Qemu-devel] " Cornelia Huck
2019-05-07  5:39             ` Yan Zhao
2019-05-07  5:39               ` [Qemu-devel] " Yan Zhao
2019-05-07  8:51               ` Cornelia Huck
2019-05-07  8:51                 ` [Qemu-devel] " Cornelia Huck
2019-04-23 10:39   ` Daniel P. Berrangé
2019-04-23 10:39     ` Daniel P. Berrangé
2019-04-23 12:35     ` Alex Williamson
2019-04-23 12:35       ` Alex Williamson
2019-04-23 13:44       ` Daniel P. Berrangé [this message]
2019-04-23 13:44         ` Daniel P. Berrangé
2019-04-23 14:48         ` Alex Williamson
2019-04-23 14:48           ` Alex Williamson
2019-04-23 14:57           ` Daniel P. Berrangé
2019-04-23 14:57             ` Daniel P. Berrangé
2019-04-24  4:13     ` Neo Jia
2019-04-24  4:13       ` Neo Jia
2019-04-24  4:13       ` Neo Jia
2019-04-24  9:10     ` Christophe de Dinechin
2019-04-24  9:10       ` Christophe de Dinechin
2019-04-26  2:01       ` Yan Zhao
2019-04-26  2:01         ` Yan Zhao
2019-04-19  8:35 ` [PATCH 2/2] drm/i915/gvt: export mdev device version to sysfs for Intel vGPU Yan Zhao
2019-04-19  8:35   ` [Qemu-devel] " Yan Zhao
2019-04-19  8:35   ` Yan Zhao
2019-04-22  8:37   ` Zhenyu Wang
2019-04-22  8:37     ` [Qemu-devel] " Zhenyu Wang
2019-04-22  8:37     ` Zhenyu Wang
2019-04-23  0:33     ` Yan Zhao
2019-04-23 11:39   ` Cornelia Huck
2019-04-23 11:39     ` [Qemu-devel] " Cornelia Huck
2019-04-23 11:39     ` Cornelia Huck
2019-04-24  2:33     ` Yan Zhao
2019-04-24  2:33       ` [Qemu-devel] " Yan Zhao

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=20190423134400.GL6022@redhat.com \
    --to=berrange@redhat.com \
    --cc=Ken.Xue@amd.com \
    --cc=Zhengxiao.zx@alibaba-inc.com \
    --cc=aik@ozlabs.ru \
    --cc=alex.williamson@redhat.com \
    --cc=arei.gonglei@huawei.com \
    --cc=changpeng.liu@intel.com \
    --cc=cjia@nvidia.com \
    --cc=cohuck@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eauger@redhat.com \
    --cc=eskultet@redhat.com \
    --cc=felipe@nutanix.com \
    --cc=intel-gvt-dev@lists.freedesktop.org \
    --cc=jonathan.davies@nutanix.com \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwankhede@nvidia.com \
    --cc=libvir-list@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlevitsk@redhat.com \
    --cc=pasic@linux.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=shaopeng.he@intel.com \
    --cc=shuangtai.tst@alibaba-inc.com \
    --cc=yan.y.zhao@intel.com \
    --cc=yi.l.liu@intel.com \
    --cc=zhenyuw@linux.intel.com \
    --cc=zhi.a.wang@intel.com \
    --cc=ziye.yang@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.