Page 134 - 《软件学报》2021年第8期
P. 134
2416 Journal of Software 软件学报 Vol.32, No.8, August 2021
势 [18] ,然而,直接用一个 2n 维的数据来表示系统的温度状态会带来巨大的空间和时间开销.从当前温度和温度
变化以及降维的角度出发,我们采用了文献[29]中所提出的方法来表示当前内核的温度状态:
Δt
T = i t (( )T t − i T i (t − Δ )et × − b Δ )/(1 e− − b t ) (5)
其中,T i (t)为核 i 在 t 时刻的温度,T i (t−Δt)为核 i 在 t−Δt 时刻的温度,b 是由处理器决定的常数,Δt 表示间隔时间.
这些参数在文献[29]中进行了详细的介绍,在此处不做描述.式(5)涵盖了系统的当前温度和温度变化趋势,相
比于 LTB 能更好地反映系统温度信息,而相比于文献[18],则实现了有效降维.为了使温度状态与合并的系统状
t
态 L 处于相同的数值范围,我们使用系统的最大阈值温度 T threshold 对当前温度状态进行归一化:
i
ˆ t
T = T i t /T threshold (6)
i
最终,ReLeTA 中单个内核的状态信息由下式表达:
t
t
s = (, i ˆ t i ) (7)
LT
i
而所有内核的当前状态组合起来表示当前的系统状态,系统状态表示如下:
t
S = {, ,..., }s s t s t (8)
t 1 2 n
(2) 奖励函数
强化学习是通过智能体不断地执行操作和评估环境所反馈的奖励值来改善其学习策略,因此,奖励函数的
设置决定了任务调度器学习到最优策略的时间和学习策略的最终效果.现有文献的奖励函数存在一定缺陷:
LTB 的奖励函数与动作之间相关性不够高,DSM 的奖励函数复杂度高且很难实现温度和性能的均衡.这两种情
况均不利于智能体学习到最优的任务调度策略.因此,我们提出了一种新的奖励函数来高效地指导调度器学习
到最优的温度感知调度策略.新的奖励函数公式如下:
R ()t = T (t − 1) T− ( )t (9)
i a
其中, (Tt − 1) 为 t−1 时刻所分配的任务运行结束后,所有内核的平均温度; Tt 为 t 时刻新分配任务运行结束后,
( )
i a
任务所在内核的温度.新的奖励函数有两个优点:(1) 相比于 LTB 的奖励函数仅仅使用静态的系统温度最大阈
值,新的奖励函数使用一个动态的系统平均温度 (Tt − 1) 作为参考温度,动态的系统平均温度能更准确地反映系
统的温度状态;(2) 直接将被分配任务内核的温度加入到奖励函数中,能提高动作与奖励的相关性.而相对 DSM
中奖励函数,尽管同时考虑了性能和温度,但正如图 5 所示,其奖励函数很难实现对性能和温度的有效权衡;而新
的奖励函数则相对简单且能有效降低温度.
(3) 动作空间
强化学习中的动作空间指智能体可以执行的所有动作的集合,ReLeTA 是一个温度感知的调度器,其目标
就是将程序调度到不同的处理器上,从而达到降低系统温度的目的.因此,我们将 ReLeTA 的动作空间定义如下:
A={a 1 ,a 2 ,a 3 ,…,a n } (10)
其中,a i 表示为把当前任务分配到核 i 上运行,n 是系统所拥有的内核数.
4.3 Q值近似
ReLeTA 使用 Q-Learning 算法来训练调度策略,传统的 Q-Learning 算法使用 Q 值表格来存储不同状态、动
作下所获得的 Q 值,然而随着状态空间和动作空间的增加,会导致存储 Q 值所需的内存空间呈指数形增长.为了
缓解这一问题,通常采用神经网络来近似估计不同状态动作组合下的 Q 值,将 Q 表的更新问题变成一个函数拟
合问题.在 ReLeTA 中,使用同样的方法来处理存储 Q 表带来的内存开销问题.
为了设计一个简单且准确的神经网络来拟合 Q 值,我们对网络的层数和神经元的个数对模型的影响进行
了评估.使用大量不同的神经网络进行了多组测试后,发现“输入层-隐藏层-输出层”这种 3 层结构的神经网络,
隐藏层的神经元个数设置为 2×n,能使算法达到较好的效果且开销较低,而增加网络层数或隐藏层神经元个数
都不能使得效果有明显提升.因此综合考虑效果和系统开销,我们选择 3 层神经网络来拟合 Q 值:
Q(s,a)=θ 1 S 1 +θ 2 S 2 +…+θ n S n +b (11)
其中,θ={θ 1 ,θ 2 ,…,θ n }表示神经网络的参数,b 表示偏置,S i 是内核 i 的系统状态,如式(8)所示.针对此神经网络,我