众所周知,UFS 的一大优点之一就是支持command queue,这里我把关于UFS command queue的几个问题总结一下,希望对大家有用哦~

1. cmd queue代表UFS的多线程吗?有几个queue就代表UFS内部有几个线程吗?
我认为不是这样的。

UFS的queue只是把device收到的cmds queue起来,至于执行的时候是不是多线程,那是另一个问题。

用一个简单的比喻好了。午餐时,大家在餐厅排队打饭,排的队就是所谓的queue,可以排成一队,也可以并排排上几队.而线程呢,就是打饭阿姨们工作的打饭窗口,有几个打饭窗口就是有几个线程。窗口越多,工作完成的越快咯。

2. UFS的queue depth
从host的角度来说,最关心的应该就是queue depth了,因为host只有实时了解cmd queue还有多少个“位置”,才能发命令发的更有效率。所谓的queue depth管理有两种模式:一种是“shared queue”,另一种是“per-logical unit queues”.

2.1 shared queue

就是说整个device有一个固定的queue depth,假如说是32,就意味着发给所有LU的cmd加起来不能超过32,至于每个LU有多少cmd则没有限制。

需要说明的是,QUERY REQUEST UPIU,NOP OUT UPIU,and TASK MANAGEMENT REQUEST UPIU不会被存储在queue中。

2.2 per-logical unit queues

这个是指,每一个LU有自己的queue depth,即使其中一个LU的cmd queue已经满了,不影响其他的LU正常接受命令。

同样的,QUERY REQUEST UPIU,NOP OUT UPIU,and TASK MANAGEMENT REQUEST UPIU也不会被存储在queue中。

2.3 特殊的LU-RPMB LU queue

RPMB LU是一个另类。对它来说可以有三种模式:一种是和其他的LU share queue,规则和2.1描述的一样;第二种是per-logical unit queues,这时,RPMB的queue depth是且只能是1;还有一种情况就是RPMB有自己的cmd queue depth,然后剩余的LU share queue.

讲完了这几种情况,那么host该怎样判断device采用的是哪种模式,以及cmd queue depth是多少呢?host通过读取几个read only的descriptor value来判断,请看下表。

device descriptor bQueueDepth    unit descriptor bLUQueueDepth(except RPMB LU)    RPMB LU descriptor bLUQueueDepth     描述    queue depth
X(1<=X<=255)    0    0    
share queue

device queue depth=X
X(1<=X<=255)    0    1    PRMB queue depth=1;other lu share queue    PRMB queue depth=1;other lu share queue depth =X
0    大于等于1;小于等于255    1    per-logical unit queues    bLUQueueDepth of each logical unit
0    0    0 or 1    queue depth未知    host需要自己设定算法来计算
3. 如果host发送的CMD count超过了queue depth会怎样?
这时,device会回复一个带有“TASK SET FULL status”的response.

4. CMD queue和CMDs in a queue 有优先级区别吗?
对于device来说,发给不同LU的cmd,可以有相同的优先级,也可以有一个LU拥有高优先级。这个通过设置device descriptor bHighPriorityLUN来决定。

对于同一个LU来说,queue中的CMD优先级是和CMD UPIU中的Flags.CP和Flags.ATTR相关的。

Flags.CP和Flags.ATTR的值可以参考如下:

我们知道,UFS在处理HOST的命令时,read的优先级会高于write的优先级。再结合Flags.ATTR和Flags.CP,总的来说,UFS处理host命令的优先级遵守以下顺序:

any cmd with "head of queue" attr

>read cmd with "simple" attr & Flags.CP=1

> write cmd with "simple" attr & Flags.CP=1

= read cmd with "simple" attr & Flags.cp=0

>write cmd with "simple" attr & Flags.cp =0

至于那些“ordered” attribute 的CMD以及除了读写之外的scsi cmd,在queue中的位置不会改变,而且发挥着barrier的作用。就是说,除了“head of queue” cmd可以翻越“ordered” cmd,其他的CMD即使排在后面的比前面的优先级高,也不能翻越“barrier”来调整执行顺序。
————————————————
版权声明:本文为CSDN博主「comeonbestxiaohe」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/comeonbestxiaohe/article/details/81221254

UFS的Command Queue相关推荐

  1. UFS 1-UFS架构简介1

    UFS 1-UFS架构简介 1 UFS是什么? 1.1 UFS 1.2 一般特征 1.2.1 Target performance 1.2.2 Target host applications 1.2 ...

  2. 蛋蛋读UFS之二:UFS协议栈

    转自:蛋蛋读UFS之二:UFS协议栈 任何一种接口或者协议,都是由一个完整的协议栈组成的.UFS也不例外. UFS定义了一个完整的协议栈.从上到下,依次为应用层.传输层.数据链路层和物理层.UFS使用 ...

  3. DirectX12 - Command List(命令列表)

    这里是SunshineBooming,GPU公司一枚小小的Driver工程师,主要工作是写DirectX12 Driver,我会持续更新这个DX12 Spec系列,可能比较冷门,但是都是干货和工作中的 ...

  4. Linux阅码场 - Linux内核月报(2020年06月)

    关于Linux内核月报 Linux阅码场 Linux阅码场内核月报栏目,是汇总当月Linux内核社区最重要的一线开发动态,方便读者们更容易跟踪Linux内核的最前沿发展动向. 限于篇幅,只会对最新技术 ...

  5. OpenCL编程详细解析与实例

    OpenCL编程详细解析与实例 C语言与OpenCL的编程示例比较 参考链接: https://www.zhihu.com/people/wujianming_110117/posts 先以图像旋转的 ...

  6. OpenCL框架与示例

    OpenCL框架与示例 下面的图简单说明了OpenCL的编程框架,图是用的GPU,其他类似: 名词的概念: Platform (平台):主机加上OpenCL框架管理下的若干设备构成了这个平台,通过这个 ...

  7. 用 Hystrix 构建高可用服务架构

    1 hystrix是什么 在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的. Hystrix 可以让我们在分布式系统中对服务间的 ...

  8. 【并行计算-CUDA开发】从零开始学习OpenCL开发(一)架构

    多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零开始做OpenCL开发>系列文章的 ...

  9. OpenCV中OpenCL模块函数

    It currently develop and test on GPU devices only. This includes both discrete GPUs(NVidia,AMD), as ...

  10. 线上服务 CPU 又 100% 啦?一键定位 so easy!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:my.oschina.net/leejun2005/blog ...

最新文章

  1. 学习vue的双向数据绑定的原理
  2. Markdown编辑器“MarkdownPad”下载安装(图)
  3. 开发非代码的业务知识
  4. 【AI2】app inventor2离线开发环境百度网盘下载链接,安卓app图形化开发环境
  5. java.sql.SQLException: Lock wait timeout exceeded --转
  6. COLING 2018 最佳论文解读:序列标注经典模型复现
  7. linux系列服务总结之四:SAMBA共享设置完整介绍
  8. wordpress房产信息网_Realia v3.1.2 wordpress房地产模板 租房网站模板
  9. Springboot2学习博客
  10. Bootstrap table分页问题汇总
  11. 系统安全工作笔记001---springcloud系统安全隐患与改善_工作经验_随时更新
  12. 施密特:下个千亿美元市值公司将出在哪个行业
  13. AV_PIX_FMT_YUV420P12LE’在此作用域中尚未声明
  14. java向led屏下发字符串乱码_几种误解,以及乱码产生的原因和解决办法
  15. php学习笔记-4.登录超时的设置
  16. 9.27 英语听力练习
  17. 抖音如何开通直播带货?抖音直播带货权限开通和直播带货选品小技巧分享!
  18. 从京东产品学搭建SaaS架构
  19. 基于立体视觉的三维模型重建系统设计
  20. 布法罗计算机专业怎么样,2019上海软科世界一流学科排名计算机科学与工程专业排名纽约州立大学布法罗分校排名第76-100...

热门文章

  1. 人力资源专员岗位职责和要求
  2. ansys19.0安装破解教程(图文详解)
  3. Deconstructing laws of accessibility and facility distribution in cities
  4. 以读者角度走进RFID打造的智慧图书馆
  5. 全球及中国酒店保险箱行业发展现状及需求前景预测报告*2022-2027
  6. Passive Aggressive Alogrithm
  7. 蓝牙中的三种音频编码:Apt-X、SBC、AAC,请问分别有什么区别?
  8. 第七章 DirectX 数学向量,碰撞检测和粒子系统(上)
  9. 级数ex展开_方亚斌---用ex的幂级数展开式编拟高考题
  10. 音视频同步、网络抖动