一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
— 背景介绍 — |
✨ 1. 背景介绍
Readiness Notification,缩写为RN,PCIe 3.1提出并在PCIe 4.0时正式引入。在未使用CRS(Configuration Request Retry Status)时,PCIe设备启动或复位后要等1s左右的时间软件才能发送配置请求,启动CRS后将这个时间缩减到了100ms左右。但CRS使用起来比较繁琐,RN机制在CRS基础上更进一步,是一种更为简便的通知机制,同样能够减少PCIe Device/Function 启动或复位到软件发送配置请求间的等待时间。
RN机制包括两种通知机制:DRS消息(Device Readiness Status) 和 FRS消息(Function Readiness Status)。该机制是Device/Function进入Configuration-Ready状态的直接标志。
✔️ 在PCIe系统实现过程中,强烈建议firmware/software减少一切不必要的延时 ❗️❗️❗️
✔️ 强烈建议硬件设计能够舍弃或尽可能减少时延需求,充分利用RN机制提供的便利,依据RN通知来决定所需的时延 ❗️❗️❗️
💡 注:
Configuration-Ready,Function能够对其收到的配置请求回复以带有Success状态的有效Completion,则该Function为Configuration-Ready状态。
— DRS消息 — |
✨ 2. DRS消息
2.1 DRS触发事件
DRS用以指示Device进入了Configuration-Ready状态。以下Device-Level的事件用以触发DRS,称为为DRS事件:
- 设备退出冷复位
- 设备退出暖复位、热复位、回环,或设备被关闭
- 设备退出L2、L3完毕
- 其他场景,例如端口由DL_Down变为DL_Up状态
💡 注:
DL_Down:DL层通知Transaction层当前端口对端未检测到其他设备;
DL_Up:DL层通知Transaction层当前PCIe链路已连接其他设备。
2.2 DRS消息格式
DRS协议采用PCI-SIG定义的VDM(Vender-Defined-Mechanism)机制,DRS消息是一种没有数据载荷的Type 1类型的VDM消息,其帧格式如图1所示。
图1 DRS消息帧格式
DRS消息的TLP Type为Msg,Fmt为001b,Type为10100b(目的为Local或Receiver),TC[2:0]为000b,Attr[2:0]及Tag字段预留,Message Code为01111111b,Vender ID为0001h,Subtype字段为08h。
⚠️ 注意:在未分配Bus Number时Function发出DRS消息是合法的,该DRS消息Requester ID中的Bus Number为0。若此时Switch下行端口开启了ACS来源验证,该消息有可能会触发ACS违例报错。
2.3 DRS协议规则
DRS消息协议遵循以下规则:
- DRS没有开关机制。对于支持DRS的下行端口而言,其链路能力2寄存器的DRS Supported位必须为1(图2);对于上行端口而言,同样建议将其链路能力2寄存器的DRS Supported位置1,即便该位为0,上行端口也能够发送DRS消息 ✔️。
- 端口由DL_Down变为DL_Up状态且当前Logical Bus上跟该上行端口相关的所有非VF Function都Ready之后,DRS消息必须由具备DRS能力的上行端口发出。对
Type 0类型的 Function
及非Switch上行端口的Type 1类型Function
而言,该Function进入Configuration-Ready后该Function即Ready;对Switch上行端口的Type 1类型Function而言,该Function及其所有二级bus的Function均为Configuration-Ready时,该Function才Ready。- Device发出DRS消息后,除非发生了DRS事件,否则跟该DRS对应的Configuration-Ready的非VF Function不应返回CRS Completion消息。
- 实现了DRS的Switch,所有端口都应支持DRS机制。对Switch下行端口下游的Device而言,Switch发出的DRS消息并不意味着这些Device Ready了,这些Device是否Ready是独立于Switch的。
- Switch下行端口及RP中需实现DRS Message Received位,以指示其接收到了DRS消息。
图2 Link Capabilities 2 Register
— FRS消息 — |
✨ 3. FRS消息
3.1 FRS触发事件
FRS用以指示Function进入了Configuration-Ready状态。以下Function-Level的事件用以触发FRS,称为FRS事件:
- Function Level复位(FLR)
- D3Hot到D0转换完成
- SR-IOV系统中PF开启或关闭VF功能
3.2 FRS消息格式
同DRS一样,FRS协议采用PCI-SIG定义的VDM机制,FRS消息是一种没有数据载荷的Type 1类型的VDM消息,其帧格式如图3所示。
图3 FRS消息格式
FRS消息的TLP Type为Msg,Fmt为001b,Type为10000b(路由到RC),TC[2:0]为000b,Attr[2:0]及Tag字段预留,Message Code为01111111b,Vender ID为0001h,Subtype字段为09h。FRS Reason字段用以指示产生FRS消息的原因,如
表1所示。
表1 FRS Reason
FRS Reason (b) | Description |
---|---|
0001 | 接收到DRS消息 |
0010 | D3Hot到D0转换完成 |
0011 | FLR完成 |
1000 | VF开启 |
1001 | VF关闭 |
其他 | 预留 |
DRS消息的接收者可有选择性地对消息各字段有效性进行检查确认,若检查不通过则当作畸形包处理。
3.3 FRS协议规则
FRS消息协议遵循以下规则:
- FRS消息的Requester ID需指示Readiness状态发生变化的Function。
- FRS消息中的FRS reason字段需指示Function Readiness状态发生变化的原因。
- Function发出FRS消息后,除非发生DRS或FRS事件,该Function不应返回CRS Completion消息。
- 实现了FRS的Switch,所有端口都应支持FRS机制,且上行端口应能够发送FRS消息。
- SR-IOV系统中PF开启或关闭VF功能时,PF应上行发送FRS消息。
- RP及RC中应实现FRS排队扩展能力,以收集FRS消息。
— FRS消息队列 — |
✨ 4. FRS消息队列
4.1 FRS消息规则
支持FRS机制的RP及RC事件收集器中必须实现FRS队列扩展能力结构。对RP而言,器FRS消息队列中包含了该RP收到及发出的FRS消息。对RC而言,其FRS消息队列中包含了该RC事件收集器发出及其相关RCiEP发出的FRS消息。
FRS队列满足以下需求:
- Reset之后FRS消息队列需为空。
- 链路比那位DL_Down后RP的FRS消息对应需为空。
- 若收到FRS消息后或生成FRS消息过程中FRS消息队列非满,需将FRS消息压入队列并将FRS消息接收指示位置一。
- 若收到FRS消息后或生成FRS消息过程中FRS消息队列已满,则丢弃该FRS消息并将FRS消息溢出位置一。
- 最陈旧的FRS消息需体现在FRS消息队列寄存器中。
- 写FRS消息队列寄存器时需移除队列中最陈旧的元素。
- FRS消息接收指示或溢出位由0变1时,若支持中断应产生对应中断。
4.2 FRS队列扩展能力结构
FRS队列扩展能力结构如图4所示,该结构中各寄存器释义如下:
FRS Queueing Extended Capability Header
,FRS队列扩展能力头标(图5),用以指示该组件具备FRS队列能力、能力版本及下一能力的地址偏移。FRS Queueing Capability Register
,FRS队列能力寄存器(图6),用以指示FRS消息队列的最大深度及FRS中断的消息号。FRS深度最低为1,可配置的最大深度为4095。FRS Queueing Status Register
,FRS队列状态寄存器(图7),用以指示接收到了FRS消息或FRS消息队列溢出。FRS Queueing Control Register
,FRS队列控制寄存器(图8),用以开启FRS中断。FRS Message Queue Register
,FRS消息队列寄存器(图9),RC/RP事件收集器中既有的最陈旧的FRS消息的Requester ID记录在FRS Message Queue Function ID字段,FRS Reason记录在FRS Message Queue Reason字段。FRS Message Queue Depth用以指示当前队列中的FRS消息数目,0代表队列为空。
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!