I have a question regarding multi-queue (MQ) in SCSI layer and consequently iSCSI. Apparently there is good technical and scientific literature explaining multi-queue (MQ) on block layer level. But there is rarely any good explanation that how this multi-queue (MQ) is triggered down to SCSI layer and then iSCSI. AFAIK, since Linux kernel 3.13 (2014), the linux block layer has multi-queue a.k.a mq-blk. After mq-blk in block layer, the SCSI IO submission path had to be updated. As a result, SCSI multi-queue a.k.a scsi-mq work has been functional since Linux kernel 3.17. Therefore, I have following questions:
Question 1: How actually multi-queuing is achieved in SCSI layer?
Question 2: Traditionally, the SCSI mid-level layer used to create queuecommand (). Now when there is multi-queuing implemented in SCSI, does multi-queuing actually means creating more than one queuecommand ()?
Question 3: Where exactly one can see multi-queue in SCSI code base?
Question 4: Once we have multi-queue in SCSI, how is this implemented in iSCSI level?
Please help me understand it.