前面的文章中介绍过,为了保证视频、音频等数据得到优先传输,pcie总线实现了一种叫做quality of service(qos)的机制。qos可以满足视频、音频等对latency和实时性(isochronous)要求比较高(一般不可以被打断)的应用需求。qos主要通过vc(virtual channel)和tc(traffic class)来实现。
vc的相关寄存器位于pcie配置空间的扩展部分(pcie extended capability space),如下图所示:
前面的文章中介绍过,每一个vc都有独立的buffer,某一个vc buffer满了并不会影响其他vc的使用。但是只靠vc并不能实现qos中的优先级的功能,这还需要tc(traffic class)的支持。tc的值由tlp header中的byte1的bit[6:4]定义,如下图所示。显然tc值的范围为0~7,值越大优先级越高,默认为0(优先级最低)。在初始化的时候,pcie驱动程序会为每一种类型的包分配好合适的tc值(优先级)。
如果pcie驱动程序没有找到pcie extended capability space,则认为该设备只有一个vc,即vc0。此时再为每一个tlp分配不同的tc值,显然是没有意义的。因此会默认采用tc0/vc0组合,即不支持qos功能。换一句话说,如果某一个pcie设备只支持一个vc(vc0),那么就没有qos什么事了。
注:本次连载的博客只是简单地介绍qos的功能和应用,关于qos的详细内容,如vc仲裁,端口仲裁,实时性(isochronous)等相关内容,还请参考pcie spec的相关章节。
pcie驱动程序(配置软件)通过修改vc资源控制寄存器(vc resource control register)中的tc/vc map位来实现tc/vc mapping。同时通过vc id位来选择相应的vc。如下图所示:
图中的例子,tc0、tc1对应vc0,而tc2~tc4对应的是vc3。
tc/vc mapping采用了一种灵活的机制,但是仍然需要注意以下几点:
· tc/vc mapping是针对link两端的端口(ports)的;
· tc0会被自动地map到vc0,且只能map到vc0;
· 其他的tc可以被map到任意的vc上;
· 一个tc一般最多只能map到一个vc上;
· 可以有tc或者vc不被使用。
如果link的两个端口(ports)中,vc数量不一致,则该link只能服从vc数量少的端口,如下图所示:
pcie驱动程序可以通过查询扩展配置空间中的extended vc count来确定该端口支持的vc数量,如下图所示:
一文让你轻松明白加谐波补偿的原因
智浦欣CS5328具有太阳能板最大功率点跟踪功能,带路径管理5A异步降压型铅酸电池充电管理IC
直屏版S20三星GalaxyS20FE真机曝光
天机机器人在发展中所遇到的挑战和机遇
基于STM32单片机的智能安全家庭健康系统设计
PCIe总线实现了一种叫做Quality of Service(QoS)的机制
AMD与百度携手创建GPU技术联合实验室 推动AI开发
中国电信在未来家庭宽带领域,仍要稳坐头把交椅的决心
双目影像密集匹配算法的综合分析
TMC5160-步进电机驱动器-低速250转效果无对手
总线伺服是什么设备?
LEDs状态灯任务(线程)设计 (基于RTOS)
基于台达20PM的点胶机数控系统
苹果大手笔采购OLED 投入超40亿美元
中国联通推动全光底座智能化演进,五大关键能力夯实全光底
智能传感器技术在呼吸监视仪中的应用
剖析python数字除法、floor除法
Niantic为独立开发者设立1000万美元基金
电动自行车用铅酸蓄电池选购与使用常识
常见的波峰焊接方式