All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Knight, Frederick" <Frederick.Knight@netapp.com>
To: Hannes Reinecke <hare@suse.de>,
	Alex Talker <alextalker@yandex.ru>,
	linux-nvme <linux-nvme@lists.infradead.org>,
	Sagi Grimberg <sagi@grimberg.me>
Subject: RE: NVMe over Fabrics host: behavior on presence of ANA Group in "change" state
Date: Mon, 14 Feb 2022 16:16:04 +0000	[thread overview]
Message-ID: <DM8PR06MB7704D092EEAE68C75EE33CDEF1339@DM8PR06MB7704.namprd06.prod.outlook.com> (raw)
In-Reply-To: <4cd1f9c1-e31a-2a41-1f96-ba54103cc3a2@suse.de>

> 
> On 2/11/22 10:21, Alex Talker wrote:
> >  > [FK> ] I think I'm missing a bunch of context here. What is the  >
> > original question? I take a stab at some assumptions: What is an  >
> > empty ANA group? That is an ANA Group with NO NSIDs associated with  >
> > that group. Meaning the "Number of NSID Values" field is cleared to  >
> > '0h' in the ANA Group Descriptor. That descriptor can be used to  >
> > update some host internal state information related to that ANA  >
> > group, but it has no impact on any I/O because there can be no I/O  >
> > (since there are no NSID values). So I'm not sure where that is  >
> > going (because RGO=1 also can return ANA Groups that have state, but
> > > no attached namespaces (it's a way to get group state without any  >
> > NSID inventory requirements)).
> >
> > That's exactly right, "nnsids=0" case. I/O is not a problem for such a
> > group, for sure.
> > I suppose the main argument we're having here is that when such a
> > group has a "change" ANA state, the host("nvme-core" module) starts a
> > timer for ANATT which upon expiration resets the controller.
> > Now, I do not disagree that having such a group is "ugly" but rather
> > argue that ANATT-related functionality could be only invoked for
> > "nnsids>0" case, since only then there's a relation between "change"
> > state and a namespace via "ANAGRPID".
> >
> Ah. So now I get where you are coming from.
> 
> The problem seems to be around a static ANA group with status 'change'.
> The whole idea behind the 'change' ANA status (and ANA groups in
> general) was that ANA groups could _change_ the ANA status, and such a
> change would affect all namespaces in that group.
>  From that angle having a 'change' state makes sense, as one could use them
> to signal "hey, I'm busy transitioning to another state" to the host.
> 
> But when using _static_ ANA groups the whole concept become shaky.
> While it's perfectly okay to have static ANA groups with 'normal' states (ie
> excluding the 'change' state), things become iffy if you have a static 'change'
> state.
> Thing is, having a 'change' state indicates to the host that a controller will
> need time to transition between states. And this transitioning out of
> necessity will always be between 'normal' ANA states (ie excluding the
> 'change' state).
> The spec doesn't allow the controller to specify "I need time to transition
> _to_ the 'change' state"; the transition to and from 'change'
> is always assumed to be atomic.
> (Because the 'change' state is used to signal precisely that condition.)
> 
> Exec summary: having static ANA groups is okay, having a static ANA group in
> 'change' state questionable and not something I would recommend.

[FK> ]  That is the point of ANATT.  If you get a status code of Asymmetric Access Transition on any I/O,
Then all namespaces in the ANA Group that contains that namespace are in CHANGE state.  All of those
Namespaces (the ones in the same ANA Group as the namespace that returned a status code of Asymmetric
Access Transition) are allowed to stay in that state for ANATT seconds.  So YES, that ANA Group may
Stay in the CHANGE state (but only for ANATT seconds).  If it stays in the CHANGE state for longer than
ANATT Seconds, then there is a problem.  The definition of ANATT = the controller will NOT stay in the
ANA Change state longer than this amount of time.

> 
> Cheers,
> 
> Hannes
> --
> Dr. Hannes Reinecke                        Kernel Storage Architect
> hare@suse.de                                      +49 911 74053 688
> SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg
> HRB 36809 (AG Nürnberg), GF: Felix Imendörffer

  reply	other threads:[~2022-02-14 16:16 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-06 13:59 NVMe over Fabrics host: behavior on presence of ANA Group in "change" state Alex Talker
2022-02-07  9:46 ` Hannes Reinecke
2022-02-07 15:04   ` Alex Talker
2022-02-07 11:07 ` Sagi Grimberg
2022-02-07 15:04   ` Alex Talker
2022-02-07 22:16     ` Sagi Grimberg
2022-02-10 13:46       ` Alex Talker
2022-02-10 22:24         ` Sagi Grimberg
2022-02-11  2:08           ` Knight, Frederick
2022-02-11  9:21             ` Alex Talker
2022-02-11 16:58               ` Knight, Frederick
2022-02-11 20:53                 ` Alex Talker
2022-02-14 13:16               ` Hannes Reinecke
2022-02-14 16:16                 ` Knight, Frederick [this message]
2022-02-22  9:04                   ` Alex Talker

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=DM8PR06MB7704D092EEAE68C75EE33CDEF1339@DM8PR06MB7704.namprd06.prod.outlook.com \
    --to=frederick.knight@netapp.com \
    --cc=alextalker@yandex.ru \
    --cc=hare@suse.de \
    --cc=linux-nvme@lists.infradead.org \
    --cc=sagi@grimberg.me \
    /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.