DPDK patches and discussions
 help / color / mirror / Atom feed
From: Matan Azrad <matan@mellanox.com>
To: Maxime Coquelin <maxime.coquelin@redhat.com>,
	"xiaolong.ye@intel.com" <xiaolong.ye@intel.com>,
	Shahaf Shuler <shahafs@mellanox.com>,
	"amorenoz@redhat.com" <amorenoz@redhat.com>,
	"xiao.w.wang@intel.com" <xiao.w.wang@intel.com>,
	Slava Ovsiienko <viacheslavo@mellanox.com>,
	"dev@dpdk.org" <dev@dpdk.org>
Cc: "jasowang@redhat.com" <jasowang@redhat.com>,
	"lulu@redhat.com" <lulu@redhat.com>
Subject: Re: [dpdk-dev] [PATCH 9/9] vhost: only use vDPA config workaround if needed
Date: Thu, 18 Jun 2020 06:39:11 +0000	[thread overview]
Message-ID: <AM0PR0502MB4019D2F0D06DB778986B13A6D29B0@AM0PR0502MB4019.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <7cdc8505-a667-81a3-b8ed-22dd34b958f7@redhat.com>

HI Maxime

From: Maxime Coquelin:
> On 6/17/20 1:04 PM, Matan Azrad wrote:
> 
> >>> Don’t you think that only enabled queues must be fully initialized
> >>> when
> >> their status is changed from disabled to enabled?
> >>> So, you can assume that disabled queues can stay "not fully initialized"...
> >>
> >> That may work but might not be following the Virtio spec as with 1.0
> >> we shouldn't process the rings before DRIVER_OK is set (but we cannot
> >> be sure we follow it anyway without SET_STATUS support).
> >>
> >> I propose to cook a patch doing the following:
> >> 1. virtio_is_ready() will only ensure the first queue pair is ready
> >> (i.e. enabled and configured). Meaning that app's new_device callback
> >> and vDPA drivers dev_conf callback will be called with only the first
> >> queue pair configured and enabled.
> >>
> >> 2. Before handling a new vhost-user request, it saves the ready
> >> status for every queue pair.
> >>
> >> 3. Same handling of the requests, except that we won't notify the
> >> vdpa driver and the application of vring state changes in the
> >> VHOST_USER_SET_VRING_ENABLE handler.
> >>
> >> 4. Once the Vhost-user request is handled, it compares the new ready
> >> status foe every queues with the old one and send queue state event
> >> changes accordingly.
> >
> > Looks very nice to me.
> 
> Cool!
> 
> > More points:
> > By this method some queues may be configured by the set_vring_state
> operation so the next calls are expected to be called for each queue by the
> driver from the set_vring_state callback :
> > 1. rte_vhost_enable_guest_notification
> > 	This one takes datapath lock so we need to be sure that datapath
> lock is not locked on this queue from the same caller thread (maybe to not
> takes datapath locks when vdpa is configured at all).
> 
> Good point, I agree we shouldn't need to use the access lock when vdpa is
> configured. We may want to document that all the control path is assumed to
> be single thread though.
> 
> 
> > 2. rte_vhost_host_notifier_ctrl
> > 	This function API is per device and not per queue, maybe we need to
> change this function to be per queue (add new for now and deprecate the
> old one in 20.11).
> 
> This one is still experimental, so no issue in reworking the API to make it per
> queue without deprecation notice.
> 
> > 3. Need to be sure that if ready queue configuration is changed after
> dev_conf, we should notify it to the driver. (maybe by
> set_vring_state(disabl) and set_vring_state(enable)).
> 
> Agree, I'm not sure yet if we should just toggle set_vring_state as you
> proposes, or if we should have a new callback for this.

Actually, when the queue configuration is changed, there is one moment that configuration is not valid (in the write time).
So maybe it makes sense to toggle.

But there is one more option:

It doesn't make sense that after configuration change the QEMU will not send VHOST_USER_SET_VRING_ENABLE massage.

So maybe we need to call set_vring_state in the next events:
	1. queue becomes ready (enabled and fully configured) - set_vring_state(enable).
	2. queue becomes not ready - set_vring_state(disable).
	3. queue stay ready and VHOST_USER_SET_VRING_ENABLE massage was handled - set_vring_state(enable).

Then we need to document that every set_vring_state call may point on configuration changes in the queue even if the state was not changed.

What do you think?



> >> It is likely to need changes in the .dev_conf and .set_vring_state
> >> implementations by the drivers.
> >
> > Yes, for Mellanox it is very easy change.
> > Intel?
> >
> >
> >>>
> >>>> With VHOST_USER_SET_STATUS, we will be able to handle this
> >>>> properly, as the backend can be sure the guest won't initialize
> >>>> more queues as soon as DRIVER_OK Virtio status bit is set. In my
> >>>> v2, I can add one patch to handle this case properly, by
> >>>> "destorying" queues metadata as soon as DRIVER_OK is received.
> >>>>
> >>>> Note that it was the exact reason why I first tried to add support
> >>>> for VHOST_USER_SET_STATUS more than two years ago...:
> >>>>
> https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fl
> >>>> is
> >>>> ts.g
> >>>> nu.org%2Farchive%2Fhtml%2Fqemu-devel%2F2018-
> >>>>
> >>
> 02%2Fmsg04560.html&amp;data=02%7C01%7Cmatan%40mellanox.com%7C
> >>>>
> >>
> bed5d361fbff47ab766008d80c99cc53%7Ca652971c7d2e4d9ba6a4d149256f461
> >>>>
> >>
> b%7C0%7C0%7C637273201984684513&amp;sdata=KGJjdEtEN54duNu41rhBIw
> >>>> o4tmdWn6QD4yvdR3zeLI8%3D&amp;reserved=0
> >>>>
> >>>> What do you think?
> >>>
> >>> Yes, I agree it may be solved by VHOST_USER_SET_STATUS (and
> probably
> >>> a lot of other issues), But I think we need support also legacy QEMU
> >>> versions
> >> if we can...
> >>
> >> I think the SET_STATUS support is important to be compliant with the
> >> Virtio specifictation.
> >>
> >>> Don't you think so?
> >
> > Yes, I agree.
> >
> >>
> >> We can try that.
> >> I will try to cook something this week, but it will require
> >> validation with OVS to be sure we don't break multiqueue. I will send
> >> it as RFC, and count on you to try it with your mlx5 vDPA driver.
> >>
> >> Does it work for you? (note I'll be on vacation from July 1st to
> >> 17th)
> >
> > Sure,
> > Do you have capacity to do it this week?
> > I can help.....
> 
> That would be welcome, as I initially planned to spend time on reviewing &
> merging patches this week.
> 
> Thanks,
> Maxime
> > Matan
> >
> >
> >>
> >> Thanks,
> >> Maxime
> >>
> >>>> Regards,
> >>>> Maxime
> >>>
> >


  reply	other threads:[~2020-06-18  6:39 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-14  8:02 [dpdk-dev] [PATCH (v20.08) 0/9] vhost: improve Vhost/vDPA device init Maxime Coquelin
2020-05-14  8:02 ` [dpdk-dev] [PATCH 1/9] vhost: fix virtio ready flag check Maxime Coquelin
2020-05-14  8:02 ` [dpdk-dev] [PATCH 2/9] vhost: refactor Virtio ready check Maxime Coquelin
2020-05-14  8:02 ` [dpdk-dev] [PATCH 3/9] vdpa/ifc: add support to vDPA queue enable Maxime Coquelin
2020-05-15  8:45   ` Ye Xiaolong
2020-05-15  9:09   ` Jason Wang
2020-05-15  9:42     ` Wang, Xiao W
2020-05-15 10:06       ` Jason Wang
2020-05-15 10:08       ` Jason Wang
2020-05-18  3:09         ` Wang, Xiao W
2020-05-18  3:17           ` Jason Wang
2020-05-14  8:02 ` [dpdk-dev] [PATCH 4/9] vhost: make some vDPA callbacks mandatory Maxime Coquelin
2020-05-14  8:02 ` [dpdk-dev] [PATCH 5/9] vhost: check vDPA configuration succeed Maxime Coquelin
2020-05-14  8:02 ` [dpdk-dev] [PATCH 6/9] vhost: add support for virtio status Maxime Coquelin
2020-06-11  2:45   ` Xia, Chenbo
2020-06-16  4:29   ` Xia, Chenbo
2020-06-22 10:18     ` Adrian Moreno
2020-06-22 11:00       ` Xia, Chenbo
2020-05-14  8:02 ` [dpdk-dev] [PATCH 7/9] vdpa/ifc: enable status protocol feature Maxime Coquelin
2020-05-14  8:02 ` [dpdk-dev] [PATCH 8/9] vdpa/mlx5: " Maxime Coquelin
2020-05-14  8:02 ` [dpdk-dev] [PATCH 9/9] vhost: only use vDPA config workaround if needed Maxime Coquelin
2020-06-07 10:38   ` Matan Azrad
2020-06-08  8:34     ` Maxime Coquelin
2020-06-08  9:19       ` Matan Azrad
2020-06-09  9:04         ` Maxime Coquelin
2020-06-09 11:09           ` Matan Azrad
2020-06-09 11:26             ` Maxime Coquelin
2020-06-09 17:23             ` Maxime Coquelin
2020-06-14  6:08               ` Matan Azrad
2020-06-17  9:39                 ` Maxime Coquelin
2020-06-17 11:04                   ` Matan Azrad
2020-06-17 12:29                     ` Maxime Coquelin
2020-06-18  6:39                       ` Matan Azrad [this message]
2020-06-18  7:30                         ` Maxime Coquelin
2020-06-23 10:42                           ` Wang, Xiao W

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=AM0PR0502MB4019D2F0D06DB778986B13A6D29B0@AM0PR0502MB4019.eurprd05.prod.outlook.com \
    --to=matan@mellanox.com \
    --cc=amorenoz@redhat.com \
    --cc=dev@dpdk.org \
    --cc=jasowang@redhat.com \
    --cc=lulu@redhat.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=shahafs@mellanox.com \
    --cc=viacheslavo@mellanox.com \
    --cc=xiao.w.wang@intel.com \
    --cc=xiaolong.ye@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).