zTT@MobiSys '21

发布时间 2023-10-10 15:15:52作者: SheepHuan

这篇工作还是做的是一个DVFS技术,来动态调整CPU/GPU的电压和频率,达到节能、控温。

1. introduction

  1. 传统的DVFS技术主要停留在操作系统内核层面,与应用程序无关。但是不同的应用的需求决定了它们的最佳的CPU,GPU的功耗分布。
  2. 一些DVFS无法摆脱过热的问题。这里举例(图1):手机芯片一旦过热,CPU就会锁住频率,导致帧率下降。
    1696912022648.png
    • 移动设备的温度环境太复杂了,握持方式、外部温度等等。导致一些服务器上的温度管理技术不能直接用用到移动设备上。
    • 移动设备的内部的芯片温度也是存在热耦合的问题。CPU,GPU是贴合在一起的,CPU热可能也会导致GPU降频。CPU,GPU的调频策略应该联合优化。

作者们为了解决上面的两个问题,提出了一个DVFS设计,它能够持续的学习应用的性能需求和环境变换,而从适应这些改变。作者用强化学习实现这个外部的DVFS适应应用性能和环境变化。

insight

  1. 默认的控制策略不高效。作者用了3种CPU调速器(governor),分别测试Video Rendering和YOLO的功耗和帧率数据。InteractivePerformance是Linux的默认governor。Optimal是作者设置的一个虚拟的调速器,它可以提升能效。
    1696914293667.png

    对于(a)和(b)来说,我们不难发现的问题就是perf.模式下,虽然将CPU的频率拉到了最高,功耗也很高,但是由于热问题导致帧率较低。而Opt.模式却实现了功耗最低,帧率最高。默认策略没有很好的能效比表现。

    目前的DVFS技术的GAP就是缺乏对应用程序性能特点的考虑
    作者表示如果可以预测出APP的资源瓶颈,就能实现对CPU和GPU的能效控制。

  2. 热问题分析。

    • Fig3 (a)展示JETSON TX2在不同CPU频率下的渲染视频时的温度。显然这里面频率越高,温度越高。Fig3 (b)则是展示了在视频渲染的同时增加YOLO的目标检测。

      1696915174957.png

    • 温度收到热耦合影响。Fig4 展示了CPU和GPU的热耦合现象。

      1696915094157.png

      这里我们发现在GPU频率拉高的时候GPU和CPU的温度都上涨了。

    • 室温影响。Fig 5 两哈了不同室温情况下的温度管理的状况。在(a)中整体性能较为稳定,而在(b),(c)中,在手机套和在口袋中,我们发现它的温度基本超过了阈值。无线充电的情况下温度也会升高。

      1696916697117.png

问题描述 ( Problem Formulation)

\[\begin{align*} \max_{\pi}{\frac{1}{T}\sum_{t=1}^{T}{U(t)+\frac{\beta}{P(t)}}} \\ \text{s.t.} \quad T_{C}(t)\leq_{C,th}, \forall t \\ T_{G}(t)\leq_{G,th}, \forall t \\ \end{align*} \]

  1. \(U(t)\)表示t时刻的应用的QoE值,通常表示帧率。
  2. \(P(t)\)表示t时刻,CPU和GPU共同的功耗消耗。
  3. \(\pi\)表示\(t=1\)\(t=T\)时一些可用的CPU,GPU的联合控制策略。用\(f_{C}(t)\)\(f_{G}(t)\)分别表示CPU和GPU的频率。
  4. \(\beta\)表示一个控制权重。比如不考虑功耗消耗就可以设置\(\beta=0\)
  5. 下面的两个限制条件时用来分别限制CPU和GPU温度不超过阈值。

这样整个问题就被表达成了最大化QoE同时最小化功耗消耗。我们从\(\pi\)

1696918504140.png

设计

state

  1. 当前频率,\(f_{C}(t)\)\(f_{G}(t)\)
  2. 当前温度,\(T_{C}(t)\)\(T_{G}(t)\)
  3. 当前功耗,\(P_{C}(t)\)\(P_{G}(t)\)
  4. 当前帧率,\(x(t)\)

action

作者设计了两类动作实现了一个\(\epsilon-greedy\)算法。在概率为\(\epsilon\)时用探索(exploration)动作,在概率为\(1-\epsilon\)时用开放(exploitation)动作,而当温度接近或者超过阈值时,采取降温动作。这里的动作就是指CPU和GPU的频率。

  1. Exploration和Exploitation.Exploration是指在整个频率范围内去随机采用一个动作。而Exploitation是指要采用一个最大化奖励值的动作。
  2. Cool-down Action。在算法中,Exploration没有考虑他的执行后果,所以可能会选择到一个会导致高温的动作。所以达到温度阈值的时候,zTT会选择一个低于当前时钟频率的值去调整状态。

reward

奖励函数的原型是

\[r(t) = U(t)+\frac{\beta}{P(t)} + W(t) \]

作者首先考虑到QoE指标函数的设计,它认为QoE过高也会导致性能需求过高,而且对用户来说可能没有体验上的提升。它为不同应用都设置了一个帧率需求值\(X_t\)。超过\(X_t\)不会带来体验提升的同时带来了过多的功耗消耗。

\[U(t) = \begin{cases} 1, & if\text{ }x(t) \geq X_t \\ \frac{x(t)}{X_t} , & otherwise \end{cases} \]

第二点\(W(t)\)是一个惩罚项,用来考虑哪些可能会导致温度过高的动作基于负数值,而低于温度阈值的基于正数奖励。\(W_C(t)\)是CPU的设计,GPU设计类似,\(W(t)=W_C(t)+W_G(t)\)

\[W_C(t) = \begin{cases} \lambda \cdot \tanh(T_{C,th}-T_C(t)), & if\text{ }T_C(t) \geq T_{C,th} \\ -10 \cdot \lambda , & otherwise \end{cases} \]