总目录:
Retry trans flow
- CHI协议提供了一种retry机制,来保证当一比请求到达completer时,要么被accept, 要么complter发送一个RetryAck, 来防止REQ channel被block;
- PrefetchTgt transaction不能retry;
- 对于requester来讲,它必须将刚刚发送的所有的信息保存下来,直到接收到这个请求,要么被接收,要么被retry;
- 除了PrefetchTgt, the AllowRetry field must be asserted the first time a transaction is sent。
- completer这一侧,当如下场景下,会进行retry:
- has limited resources and insufficient storage to hold the current request;
- until some earlier transactions have completed.
- requester发送一个请求,该请求没有protocol credit(P-Credit); 也就是说,该请求不保证completer一定能够接收该trans;
- completer返回一个retry resp, RetryAck, 给到Requester;
- completer再发送一个protocol credit grant, PCrdGrant, 给到Requester;
- 典型场景下,是希望先发送,或者收到RetryAck,然后再是PCrdGrant;
- 但是允许这两个响应按照任意顺序发送或者接收;
- requeset有两种处理retry的方式:
一些特殊的命令处理
- CopyBack的写操作如果被retry了,在这个过程中,其数据被其他人snoop了:
- 要么发送pcrd-return, 将这个pcrd返回;
- 要么继续发送copyback的命令,allowretry==0, dataresp改成CopyBackWrData_I;
- The transaction that is resent must have the same field values as the original request, except when the field is inapplicable or is one of the following;(此处不描述)
- 对于某个transaction, 没有固定的pcrd与之对应;
- pcrd有16种类型,completer可以将不同的资源,使用不同的pcrd;
- 例如,某一种pcrd与read trans的资源绑定;
- 某一种pcrd与write trans的资源绑定;
在等待对应pcrd的request到来的过程种,如果其他的命令来了怎么办?
- 其他的命令如果是第一次来,那么此时肯定是没有resource处理这个命令的,所以此时直接retry这个请求即可;
- 如果是第二次来,那么一定是有了pcred, 所以一定是能接收的;