DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Tan, Jianfeng" <jianfeng.tan@intel.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>,
	Victor Kaplansky <vkaplans@redhat.com>,
	"dev@dpdk.org" <dev@dpdk.org>,
	"yliu@fridaylinux.org" <yliu@fridaylinux.org>,
	"Bie, Tiwei" <tiwei.bie@intel.com>
Cc: "stable@dpdk.org" <stable@dpdk.org>,
	"jfreiman@redhat.com" <jfreiman@redhat.com>
Subject: Re: [dpdk-dev] [PATCH] vhost_user: protect active rings from async ring changes
Date: Fri, 8 Dec 2017 02:14:29 +0000	[thread overview]
Message-ID: <ED26CBA2FAD1BF48A8719AEF02201E3651379F80@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <00a522dc-2287-b3ed-7ca4-e666f6217c91@redhat.com>



> -----Original Message-----
> From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com]
> Sent: Thursday, December 7, 2017 6:02 PM
> To: Tan, Jianfeng; Victor Kaplansky; dev@dpdk.org; yliu@fridaylinux.org; Bie,
> Tiwei
> Cc: stable@dpdk.org; jfreiman@redhat.com
> Subject: Re: [PATCH] vhost_user: protect active rings from async ring
> changes
> 
> 
> 
> On 12/07/2017 10:33 AM, Tan, Jianfeng wrote:
> >
> >
> >> -----Original Message-----
> >> From: Victor Kaplansky [mailto:vkaplans@redhat.com]
> >> Sent: Wednesday, December 6, 2017 9:56 PM
> >> To: dev@dpdk.org; yliu@fridaylinux.org; Bie, Tiwei; Tan, Jianfeng;
> >> vkaplans@redhat.com
> >> Cc: stable@dpdk.org; jfreiman@redhat.com; Maxime Coquelin
> >> Subject: [PATCH] vhost_user: protect active rings from async ring changes
> >>
> >> When performing live migration or memory hot-plugging,
> >> the changes to the device and vrings made by message handler
> >> done independently from vring usage by PMD threads.
> >>
> >> This causes for example segfauls during live-migration
> >
> > segfauls ->segfaults?
> >
> >> with MQ enable, but in general virtually any request
> >> sent by qemu changing the state of device can cause
> >> problems.
> >>
> >> These patches fixes all above issues by adding a spinlock
> >> to every vring and requiring message handler to start operation
> >> only after ensuring that all PMD threads related to the divece
> >
> > Another typo: divece.
> >
> >> are out of critical section accessing the vring data.
> >>
> >> Each vring has its own lock in order to not create contention
> >> between PMD threads of different vrings and to prevent
> >> performance degradation by scaling queue pair number.
> >
> > Also wonder how much overhead it brings.
> >
> > Instead of locking each vring, can we just, waiting a while (10us for example)
> after call destroy_device() callback so that every PMD thread has enough
> time to skip out the criterial area?
> 
> No, because we are not destroying the device when it is needed.
> Actually, once destroy_device() is called, it is likely that the
> application has taken care the ring aren't being processed anymore
> before returning from the callback (This is at least the case with Vhost
> PMD).

OK, I did not put it right way as there are multiple cases above: migration and memory hot plug. Let me try again:

Whenever a vhost thread handles a message affecting PMD threads, (like SET_MEM_TABLE, GET_VRING_BASE, etc) we can remove the dev flag - VIRTIO_DEV_RUNNING, and wait for a while so that PMD threads skip out of those criterial area. After message handling, reset the flag - VIRTIO_DEV_RUNNING.

I suppose it can work, basing on an assumption that PMD threads work in polling mode and can skip criterial area quickly and inevitably.

> 
> The reason we need the lock is to protect PMD threads from the handling
> of some vhost-user protocol requests.
> For example SET_MEM_TABLE in the case of memory hotplug, or
> SET_LOG_BASE
> in case of multiqueue, which is sent for every queue pair and results in
> unmapping/remapping the logging area.

Yes, I understand how it fails.

Thanks,
Jianfeng

> 
> Maxime

  reply	other threads:[~2017-12-08  2:14 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-06 13:55 Victor Kaplansky
2017-12-06 14:11 ` Yuanhan Liu
2017-12-07  9:33 ` Tan, Jianfeng
2017-12-07 10:02   ` Maxime Coquelin
2017-12-08  2:14     ` Tan, Jianfeng [this message]
2017-12-08  8:35       ` Maxime Coquelin
2017-12-08  8:51         ` Tan, Jianfeng
2017-12-08 10:11           ` Maxime Coquelin
2017-12-12  5:25             ` Tan, Jianfeng
2017-12-12  8:41               ` 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=ED26CBA2FAD1BF48A8719AEF02201E3651379F80@SHSMSX103.ccr.corp.intel.com \
    --to=jianfeng.tan@intel.com \
    --cc=dev@dpdk.org \
    --cc=jfreiman@redhat.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=stable@dpdk.org \
    --cc=tiwei.bie@intel.com \
    --cc=vkaplans@redhat.com \
    --cc=yliu@fridaylinux.org \
    /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).