Xilinx的DDR controller的Round Robin with aging调度算法

Xilinx的DDR控制器结构图如下:

分为三层,其中DDR core部分负责任务调度和队列排序,其结构图:

仲裁是这样实现的:

 

实现的调度方法如下:

是一种基于Aging的循环调度策略(round robin with aging)

The round robin mechanism circularly scans all requesting devices and services all outstanding requests before servicing the same device again.

The aging mechanism measures the time each request has been pending and assigns higher
priority to requests with longer wait times.

循环调度策略是一种简洁的调度策略,来实现各个任务的顺序执行。同时,Aging的加入,保证了等待过久的任务也依然能被执行到。

每个任务都被分配了一个优先级号码,作为Aging CountDown的起始值。也就是说,优先级越高的进程,会更早的CountDown to 0,即最高优先级,从而更早的被执行。

每个任务还带有urgent信号输入,正常情况下urgent信号无效。当urgent置位时,对应任务的Aging值就被复位为0,即最高优先级,从而在下一个调度时隙被执行。

 

补充:仲裁算法有三种,如下: 

True Round-Robin 算法:对于所有出于活跃状态的slave 接口赋予同等的权重;而且如果一个slave 接口紧跟着一个已经被允许的slave 接口的话,那么新一轮仲裁中它拥有最高优先级。这种算法确保了每个活跃的slave 拥有同等的带宽资源。
Round-Robin算法:类似与前者,不过新一轮的仲裁中每个slave 接口的优先级一致,而不是紧跟着一个刚被允许的接口的优先级最高。这种算法的带宽分配有可能不均匀。
Fixed-Priority 固定优先级算法:slave接口 S00 拥有最高优先级,S01次之,…,S15 拥有最低优先级。这种算法中,低优先级的接口可能饿死。

为了区别以上三种算法,举个例子:比如对于一个有 4 个slave 接口,1 个master 接口的switch,其中 S00,S02 和 S03 在持续不断地要求传输 large transactions。经过一番仲裁之后,最终,在True Round-Robin 算法中,S00,S02 和 S03 都获得了33% 的带宽;而在Round-Robin算法中,S00 和 S03 各获得 25% 的带宽,而 S02 获得了 50% 的带宽,这是因为 S02 继承了 S01 的带宽;而在Fixed-Priority 固定优先级算法 中,S00 获得了100% 的带宽,S02 和 S03 都饿死了。

另外,无论哪种算法,如果Arbitrate on maximum number of transfers 选项设为 1 的话,仲裁器都是不支持来自同一slave 接口的背靠背传输的。这里面有两层意思:① 如果对于一个特定的master,只有一个slave 接口发来请求的话,则它们之间只能实现 50% 的带宽,另外 50% 就浪费了; ② 如果加上上一段所描述的场景,使用 固定优先级算法 的话,那么 S00 和 S02 会获得 50% 的带宽,S03 饿死。
 

参考链接:进程调度 https://blog.csdn.net/lyfwill/article/details/81175082

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值