Clarification regarding "nvme discover" and setting IOSQES/IOCQES

Sagi Grimberg sagi at grimberg.me
Mon Feb 8 13:16:45 EST 2021


> I'm using "nvme discover" to retrieve discovery log pages. And I'm using nvmet-tcp as the target.
> 
>  From what I understand, "nvme discover" is supposed to set up a connection to a "Discovery Controller (DC)". During the exchange between the Host and the Target, there is a time when the Host must set CC.EN=1 to "enable" the DC. I'm using Wireshark to analyse the packets sent by the Host to the DC. I can see that when it's time to set CC.EN=1, the Host also sets two additional parameters: IOCQES=4 and IOSQES=6.
> 
> In the NVME Base Specification, Figure 78 - Controller Configuration, these fields are defined as parameters to configure an "I/O Controller (IOC)" and not to configure a "Discovery Controller (DC)". In fact, it says that "If the controller does not support I/O queues, then this field shall be read-only with a value of 0h".
> 
> The way I understand it, DCs do not support I/O queues. So why set IOCQES and IOSQES to non-zero values?

Its probably an oversight, and the fact that the existing discovery
controllers simply allowed it.



More information about the Linux-nvme mailing list