From: Walker, Benjamin <benjamin.walker at intel.com>
To: spdk@lists.01.org
Subject: Re: [SPDK] RDMA qp recovery: follow up on latest changes
Date: Wed, 22 Aug 2018 22:33:42 +0000 [thread overview]
Message-ID: <bac459bc5baa2b49a793b76519932ea4f404cbce.camel@intel.com> (raw)
In-Reply-To: DM6PR04MB498819D2AC51BED103E12DAB86300@DM6PR04MB4988.namprd04.prod.outlook.com
[-- Attachment #1: Type: text/plain, Size: 2493 bytes --]
On Wed, 2018-08-22 at 22:04 +0000, Philipp Skadorov wrote:
> Hello Benjamin,
> There have been a series of changes to the QP error recovery that I'd like to
> follow up:
>
> ** c3756ae3 nvmf: Eliminate spdk_nvmf_rdma_update_ibv_qp
> ibv_query_qp results in a write syscall to the SNIC driver which is a context
> switch.
> The original code was calling it when the state is known to change; the cached
> value was used everywhere else.
The observation driving this patch was that the cached value was always updated
before being used, so keeping the cached value wasn't saving any calls. Do you
see anywhere in the code on master where a call to ibv_query_qp could be
eliminated? The only one I see that might be questionable is the one in
_spdk_nvmf_rdma_qp_error.
>
> ** 65a512c6 nvmf/rdma: Combine spdk_nvmf_rdma_qp_drained and
> spdk_nvmf_rdma_recover
> ** 3bec6601 nvmf/rdma: Simplify spdk_nvmf_rdma_qp_drained
> ** a9b9f0952d6a0c1a37e544ef2977e7db136a8e86 nvmf/rdma: Don't trigger error
> recovery on IBV_EVENT_SQ_DRAINED
> De-allocating the resources associated with the requests being processed by
> SNIC at the time of IBV_EVENT_QP_FATAL is too early.
> The IBV standard requires SPDK should "wait for the Affiliated Asynchronous
> Last WQE Reached Event" before manipulating with the QP state.
> Would also assume it is unsafe to return the associated requests and their
> data back to the pools before "Last WQE Reached" event is received.
I agree, but I think the code on master does that already with just one twist.
We observed that the IBV_EVENT_QP_LAST_WQE_REACHED event would never occur if
an error occured on an RDMA queue pair which had no outstanding I/O. So we can't
always wait for that event before releasing resources. Instead, when we first
are notified of the error via IBV_EVENT_QP_FATAL, we abort all outstanding
commands and then attempt to do the recovery. The recovery quits early if there
are RDMA operations outstanding though. In that case, we'll later get the
IBV_EVENT_QP_LAST_WQE_REACHED event and go through the same path, but not bail
out early. This was all mostly figured out through trial and error when force
disconnecting the NVMe-oF initiator. If you see any flaws in the logic let me
know so we can get them corrected.
>
>
> Thanks,
> Philipp
>
> _______________________________________________
> SPDK mailing list
> SPDK(a)lists.01.org
> https://lists.01.org/mailman/listinfo/spdk
next reply other threads:[~2018-08-22 22:33 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-22 22:33 Walker, Benjamin [this message]
-- strict thread matches above, loose matches on Subject: below --
2018-08-27 15:43 [SPDK] RDMA qp recovery: follow up on latest changes Philipp Skadorov
2018-08-24 20:13 Walker, Benjamin
2018-08-23 21:54 Philipp Skadorov
2018-08-23 19:33 Walker, Benjamin
2018-08-23 4:08 Philipp Skadorov
2018-08-22 22:04 Philipp Skadorov
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=bac459bc5baa2b49a793b76519932ea4f404cbce.camel@intel.com \
--to=spdk@lists.01.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