| 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: |
什么是标签? |
| A: |
OCP从设备通常按照和OCP主设备发出的请求相同的次序,给来自OCP主机的请求返回应答。然而,有时候更需要OCP从设备判断什么时候应该给OCP主设备回复。标签可以用来直接连接应答和触发OCP从设备应答的原始请求。在很多情况下,标签的使用可以提高整个系统的性能。
|
|
| 12: |
标签如何和线程相区分? |
| A: |
在提供无序应答方面,可以把标签想成比线程更轻。特别是,多重的线程为每一个标签提供独立的流控制,而所用的标签使用单一的共享的流控制。还有,不同的线程处理的时候没有排序法则,而标签事务不能被重新排序。最后,每一个线程都需要独立的缓存,而因为所有的标签使用一个流控制,所以对于标签来说,不需要缓存。
|
|
|
| 13: |
threads可以使用什么类型的流控制? |
| A: |
当核正忙于处理一个线程上的请求时,为了使它能够处理另一个线程上的请求,提供了几个thread busy请求信号。从设备可以使用SThreadBusy信号告知主设备,在一个特定的线程上,不能再产生请求。相类似的情况,主设备可以使用MThreadBusy信号告知从设备,在一个特定的线程上,不能再产生应答。同时还提供了SDataThreadBusy信号,供从设备用来通知主设备,在一个特定的线程上,它不能接受更多的数据握手状态。
|
|
|
| 14: |
使用多重线程时,我如何防止阻塞? |
| A: |
注意到从OCP协议的角度来看,不同的thread busy信号没有相位时序的需要,所以它们只会被处理成主设备和从设备间的一条线索。为了确保不会发生阻塞,每一个thread busy信号都包含有配置参数,强制主设备或者从设备遵循精确的thread busy 语法。
|
|
|