NVMe over Fabrics host: behavior on presence of ANA Group in "change" state

Alex Talker alextalker at yandex.ru
Thu Feb 10 05:46:45 PST 2022


 > Can you please stop top-posting, its difficult to follow this
 > copy-pasting-top-posting chain that you are generating..

My bad, I just had a hard time taming my mail client in all this 
plain-text mode requirements.
Also, I was a bit confused on how to handle branching-off replies :)


In short, my opinion, after consulting with NVMe base specification 2.0b 
stating is that:

a) (8.1.2, page 340) "Namespaces that are members of the same ANA Group 
perform identical asymmetric namespace accessstate transitions.
The ANA Group maintains the same asymmetric namespace access state for 
allnamespaces that are members of thatANA Group
[...]The method for assigning namespacesto ANA Groups is outside the 
scope ofthisspecification."
b) (8.1.2, page 340) "An ANA Group may contain zero or more 
namespaces[...]The mapping of namespaces,[...] to ANA Groups is vendor
specific."
c) (Figure 280, page 270) "ANAGRPID[...]
If the value in this field changes and Asymmetric Namespace Access 
ChangeNotices are supported and enabled,
then the controller shall issue an AsymmetricNamespace Access Change 
Notice."
d) (8.1.3.5, page 343) "While ANA Change state is reported by a 
controller for the namespace, the host should:[...part about ANATT...]"

Thus I see it that ANATT-based timer should be started only upon 
condition that a namespace belongs to a group in this state
but change of relation between a namespace and it's ANA state can occur 
either because ANA Group state has changes(and this would affect all of 
the group members)
or when ANAGRPID is changed(and this, if the new group's ANA state 
differs from the old one, affects only one namespace at a time).
 From that, I find it is logical to no-op on the empty ANA Groups in 
"change" state since I don't see the standard explicitly disallowing 
that behavior in any way whatsoever.

Now, moving to the rest...

 > If your use-case needs more than 128 groups, you can send a patch.

I thought these constants were defined by optimization or something but 
I ain't no expert on the code base :)
In that case, what is your opinion on adding number of groups & 
namespaces as module parameters(to nvmet) alike "mulipath"(i.e. to be 
only set upon the load)?
As I saw in earlier discussion here on different matter, in production 
there's systems which provide huge number of namespace(and possibly 
groups too)
and this extra parameters would allow for easy mock-up of such setups to 
look for bottleneck and the like, without re-patching the code for each try.
Would appreciate your advice on possible disadvantages of such an approach!

 > nvmet is actually violating the spec right now because it doesn't
 > set bit 6 in ctrl identify anacap, and it clearly exposes anagrpid as
 > a config knob, so either we need to block it, or set that bit.

So, my "expertise" is lacking on this one but if I get what you saying 
correctly,
it means that for past hell knows how much time I could change the ANA 
group on target, AEN(I think? the notification functionality I mean) 
would be successfully sent
and hosts were quite okay with what's going on but somebody forgot to 
advertise such capability in the controller's info?
I literally used my workaround on these pre-"native multipath" host 
times(I'm looking on CentOS 7 for example) and it seem to went okay, so 
I'd vote for the bit.
So...this is like +1-2 patch(-es)?

 > No attachments please, follow the instructions in:
 > Documentation/process/submitting-patches.rst

Gotcha, already working on it.
I tested the straightforward patch on the latest release and it seems to 
be working as expected
(i.e. ANATT triggers only on on non-empty "change" state groups), so I'm 
on the stage of trying out the 'git send-email' :)

Thanks for your time anyway!

Best regards,
Alex



More information about the Linux-nvme mailing list