1: 线程到底是什么?
A: 线程是一请求序列,请求之间的顺序一直保持不变。所以线程永远不会乱序发送请求、执行和响应。
2: 为什么要使用线程?
A: 为了不影响性能的降低,在内核里线程之间允许并行执行。如果不使用线程,多个并行的请求序列就会交叉存取,变成分时复用的一个序列,任何一个请求的延时都会影响其后的所有请求,进而影响所有的并行序列。通过标志每个请求属于不同的线程,目标内核就可以重排序执行以优化性能。
在OCP规范中,内核内线程的最少数目是1个。此外,所有的请求都与线程相关。不过,发起内核可能要求目标内核先处理优先级高的线程请求。但是,在一个线程内,所有的请求和响应都保持原先的顺序。
因此,先前的请求处理完之后,优先级最高的线程将被处理。保留一个线程的请求优先级顺序,优先级高的请求总是比优先级低的请求先执行。
其他例子包括多存储体DRAM控制器配置,每个DRAM存储体有唯一的关联线程。在这种情况下,理论上所有的存储体能同时被激活,DRAM控制器可以显著地增加DRAM存取的并发性。
3: 内核最多可以有多少个线程?
A: OCP结构理论上不限制内核里线程的数目,但实际应用中是受限制的。主机在某一时刻只能发出一个命令。这样如果多线程同时有效,需要由仲裁器来选择一个有效的线程给OCP。随着线程数目的增加,IP内核的性能会降低。同样,从机也增加线程关联的存储开销,所以内核的门数会限制线程数在一个合理的数目。
4: 为什么要用多线程?
A: 多线程是为并发不相关的行为设立的。典型的例子是像EthernetMAC有传输数据流和接收数据流,每个数据流都是唯一的线程。
5: 什么是MThreadID的时序(相对于相位
A: 当数据握手信号不被使能有效时,写请求的相位号是1,当写命令有效时,线程标识信号(在请求组里)有效。当数据握手信号使能有效,当写数据有效时,线程标识信号(在数据握手信号组里)有效。
对读传输,当读命令有效时,线程标识信号(在请求组里)有效。当从机返回数据后,线程标识信号(在响应信号组里)有效。
6: 当主从机对正在执行的线程 作reset, 会怎么样?
A: Reset会取消或者完成所有未执行的、来自主机的请求和从机的响应。否则,对于reset以前发出的命令,如果从机在reset后响应系统状态就不会被reset正确初始化。OCP规范理要求reset至少持续置位16个时钟周期,以保证主从机达到一致的初始状态。
7: 内核如何实现优先级处理?
A: 超过一个线程时,正常的通讯是用一个线程,优先级高的请求用另一个线程。尽管在一个线程里请求间保持一定的顺序,但在不同的线程间就不一样了。来自不同线程的请求之间可以乱序执行,允许优先级处理。
8: OCP上的互连标识(connection ID)的作用是什么?
A: 互连标识类似于线程,但它是一个全局性的,而线程是局部性的。互连标识用于系统发起内核和目标内核之间的传输识别。需要注意的是当互连ID通过中间传输时,目标内核接受到的线程信息是描述本地OCP互连。
9: 线程和互连的区别在哪里?
A: 线程是和OCP接口相关的。假设内核A与内核B相连,而内核B与内核C相连,内核C接受到的经内核B转发的请求里没有关于内核A的OCP线程信息。所有的内核信息来自内核B和内核C的OCP互连。
互连是一OCP信号规定,允许内核A用全局标识符标记请求,以识别请求的来源。互连ID在包含有很多的发起内核和接受内核的SoC设计里很重要,因为它允许OCP发起内核给通过中介OCP接口传输的请求分配标识信息。
10: 单个从机能和多个主机互连吗?如果不行,怎么共享内存?因为OCP是一个点对点的互连,OCP有协议支持多个处理器到内存控制器的互连吗?
A: 微网络有两个功能:将多个从机互连至主机,多个主机互连至一个从机。后者在多个主机进行点对点的互连时支持共享一个从机。这和传统的总线功能很类似。微网络通过OCP接口互连系统内的每个主内核和从内核。一个从机有多个OCP接口是完全可行的,这类似于多端口的SRAM内存。
OCP接口标准,不像传统的总线协议,它可以随意混合线程。线程允许事务被标记,根据标记的不同区别对待线程。这样不同主机的数据流可以被从机识别,便利了为不同的数据流进行不同处理,还允许传输重排序来适应子系统的时序约束(像DRAM控制器),从而改善性能。
11: 什么是tagging?
A: “tagging是指接收端常常按照OCP主机端引起需求的顺序将响应反馈给由主机提出的需求。然而有些时候, 由OCP的接收端来决定何时向OCP发送端传递反馈更具意义。Tags可以被用于直接连接由导致OCP接收端反馈的最初需求和反馈。在很多情况下,使用tags能够提升整个系统的表现。”
12: 如何区分tags和threads?
A: 在提供无序响应方面,“tags”相对于“threads”可以被认为是轻量级选手。特别地,若干“threads”为每一根“threads” 提供独立的流控制,而“tags”却用单一共享的信号控制所有的“tags”。并且,在处理“threads”时不必遵守排序规则,而在处理“tags”时却不能打乱顺序。最后,每一根“threads”都必须插独立的缓冲器,而“tags”却不需要,因为对所有的“tags”而言,流控制信号是共用的。
了解更多关于OCP在线程&互连方面的知识,请访问http://www.ocpip.org/chinese/faqs/threads