简介
本文是乔治亚理工公开课程Interconnection Networks (Spring 2017)的教程,共有7个主题13堂课加上4个lab,目录在最后的部分。这里是第5 第6堂课 deadlocks 死锁的部分。
关于死锁
死锁是什么
死锁发生的条件
死锁的处理
避免死锁
x-y路由
非常经典的x-y路由,避免了构成一个圈。
本质是避免自己成为等待/依赖的一部分。在x-yrouting中,按xymodel的第二个图,永远在等待 右下角的 资源或者左上角的资源。举个例子,如果是最左上角的节点要等待资源,哪怕他一直在等他自己的右下节点,上一个节点也在等上一个节点自己的右下节点,他会一直等待到最右下角的节点,而不用担心等待自己。也就是不会出现衔尾蛇的情况,只要自己不在自己需要等待的节点中,就避免死锁。
West-First 等 路由
不是任意的两条路径都行
如果会成环,就不行,例如下图。
Channel Dependency Graph (CDG)
这个部分个人感觉对gem5 garnet等研究不是很有必要,就跳过了。当然,有兴趣还是可以去读的,打好基础。
死锁避免的实现方法
Virtual channels
这里挺有意思的一个点是,所有的virtual channel,都是再一个class内传递的,也就是channel 0 和channel1 平时不互通,只在dateline互通一次。
而我读的一些vc的用法,随时都在跳channel。后面可以再研究研究细节,是这个乔治亚的课程简化了,还是后面vc 一开始是这样,后面进化了。
vc用于防止死锁
vc 的占用
”而我读的一些vc的用法,随时都在跳channel。后面可以再研究研究细节,是这个乔治亚的课程简化了,还是后面vc 一开始是这样,后面进化了。“ 这里的问题得到了解答,如果vc的buffer全部channel都复用,那就随时随地可以当dateline,跳转不同的vc channel。同时这里会跳出一个新问题,deadlockavoidance 就不成立了。
下面就讲了如何通过一个escape vc。(或者,可以通过简单的x-yrouting。ppt里没提,但是很多文章实践中这么用)
escape vc 用于多vc共用
flow control 用于防止死锁
死锁恢复
主要还是通过避免,死锁后恢复只有一两个ppt。
vn的需要:防止request和response 死锁
network is deadlock-free的时候 会有 Protocol Deadlock 可以解释为什么需要两个vn。实践上我常看到两个vn,之前也在思考为什么需要这个,因为物理的link是只有一个的,两个vn有什么好处呢?避免互相为源点和目的点的时候,response发不出去。
当然,还有一个选项,是简化以后的traffic pattern,就是两个不互为源点。比如,只有60个节点是运算节点发request,而4个节点是mem节点 只发response,这样 network is deadlock-free的时候,也会protocol deadlock -free。
总结
关于死锁的部分,了解了课程级别的基础知识。 实践中,如果是用于gem5 ruby garnet的延伸研究,可能知道常用的x-y routing就已经够了。