GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁

简介

本文是乔治亚理工公开课程Interconnection Networks (Spring 2017)的教程,共有7个主题13堂课加上4个lab,目录在最后的部分。这里是第5 第6堂课 deadlocks 死锁的部分。

关于死锁

死锁是什么

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第1张图片
GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第2张图片

死锁发生的条件

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第3张图片

死锁的处理

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第4张图片

避免死锁

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第5张图片
GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第6张图片

x-y路由

非常经典的x-y路由,避免了构成一个圈。
本质是避免自己成为等待/依赖的一部分。在x-yrouting中,按xymodel的第二个图,永远在等待 右下角的 资源或者左上角的资源。举个例子,如果是最左上角的节点要等待资源,哪怕他一直在等他自己的右下节点,上一个节点也在等上一个节点自己的右下节点,他会一直等待到最右下角的节点,而不用担心等待自己。也就是不会出现衔尾蛇的情况,只要自己不在自己需要等待的节点中,就避免死锁。
GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第7张图片

West-First 等 路由

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第8张图片

不是任意的两条路径都行

如果会成环,就不行,例如下图。

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第9张图片

Channel Dependency Graph (CDG)

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第10张图片
这个部分个人感觉对gem5 garnet等研究不是很有必要,就跳过了。当然,有兴趣还是可以去读的,打好基础。

死锁避免的实现方法

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第11张图片

Virtual channels

这里挺有意思的一个点是,所有的virtual channel,都是再一个class内传递的,也就是channel 0 和channel1 平时不互通,只在dateline互通一次。
GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第12张图片

而我读的一些vc的用法,随时都在跳channel。后面可以再研究研究细节,是这个乔治亚的课程简化了,还是后面vc 一开始是这样,后面进化了。

vc用于防止死锁

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第13张图片

vc 的占用

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第14张图片
”而我读的一些vc的用法,随时都在跳channel。后面可以再研究研究细节,是这个乔治亚的课程简化了,还是后面vc 一开始是这样,后面进化了。“ 这里的问题得到了解答,如果vc的buffer全部channel都复用,那就随时随地可以当dateline,跳转不同的vc channel。同时这里会跳出一个新问题,deadlockavoidance 就不成立了。

下面就讲了如何通过一个escape vc。(或者,可以通过简单的x-yrouting。ppt里没提,但是很多文章实践中这么用)

escape vc 用于多vc共用

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第15张图片
GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第16张图片
GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第17张图片

flow control 用于防止死锁

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第18张图片
GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第19张图片

死锁恢复

主要还是通过避免,死锁后恢复只有一两个ppt。
GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第20张图片
GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第21张图片

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 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第22张图片

总结

关于死锁的部分,了解了课程级别的基础知识。 实践中,如果是用于gem5 ruby garnet的延伸研究,可能知道常用的x-y routing就已经够了。

目录

GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁_第23张图片

你可能感兴趣的:(GEM5,片上网络NoC,硬件架构)