【CMDQ】
Command queue是三星和高通在eMMC V5.1上联合提出来的一个提案(joint proposal)。它允许host可以
发出一个队列包含32个data-transfer command。CMDQ可能对random read/write性能提升更明显。
Ex
- host queue task
- 每个task都由cmd44来编码block count,direct,Prio,taksID... CMD45编码address;
- 在收到cmd45之后,device把task存在queue里;
- host询问taskID,避免使用重复的ID。
- QSR
- 32bit register,由taskID对应映射;
- host可以在任何时刻发送cmd13,来查询QSR;
- 每个bit表示对应的task的状态,“0-->pending or no task, "1-->ready for execution"
- 每次host想execute,都需要先查询QSR。
- 如果task ready for execution,使用cmd46/47来执行read /write 。direction需要和CMD44发出一致
- 在data transfer阶段
- host可以发出新task(cmd44/45)
- 发出cmd13在任何时刻。
以上的CMD都是有硬件来发送,软件需要做的是维护两个位于memory的(task/transfer)descriptor list,然后利用doorbell register去trigger task。
Task descriptor主要指示task的具体参数,而transfer descriptor是指示data buffer在memory的位置。DCMD task只能发给slot31。
对于QBR bit set的task,它会等待在它之前的task都完成之后,才会发给device。而在它之后的task则必须等待它完成QBR查询。