体系结构论文导读(三十五):Improving Reliability of Soft Real-Time Embedded Systems on Integrated CPU and GPU

Improving Reliability of Soft Real-Time Embedded Systems on Integrated CPU and GPU Platforms
提高集成 CPU 和 GPU 平台上软实时嵌入式系统的可靠性

文章核心

主要讨论了如何在集成了CPU和GPU的多处理器系统芯片(MPSoCs)上,提高软实时嵌入式应用程序的可靠性。这类应用程序需要大量并行处理,而该文章提出了一种混合框架来解决寿命可靠性(由于永久性故障)和软错误可靠性(由于瞬态故障)的问题。

一、引言

背景与动机

为了满足许多应用的性能和功耗需求,已经引入了各种异构多处理器系统芯片(MPSoCs)。其中一种类型的MPSoCs由集成的CPU和GPU组成。由于GPU提供了强大的并行计算能力,而CPU提供了通用计算能力,这种类型的MPSoCs在许多应用中得到了广泛使用。例如,Nvidia提供了一个完整的软件栈来支持自动驾驶,其软件依赖于GPU的并行计算能力来实现诸如障碍物检测和可行驶路径等关键功能。对于自动驾驶车辆来说,实现高可靠性是一个重大挑战,特别是在恶劣的汽车环境下。

可靠性问题

在这些应用中,瞬态故障引起的软错误可靠性和永久故障引起的寿命可靠性是设计中的两个重要问题。瞬态故障比永久故障发生得更频繁,因此在本文中,目标是在寿命可靠性约束下最大化软错误可靠性,尤其是针对软实时应用。

虽然大多数现有研究都集中在CPU可靠性上,但也有一些技术旨在提高GPU的软错误可靠性和/或寿命可靠性。然而,这些技术主要是为了从软错误中恢复,而不是减少软错误发生率,并且并非所有GPU都支持这些技术。此外,它们仅考虑GPU的可靠性,而没有考虑CPU的可靠性。对于集成了CPU和GPU的MPSoCs来说,来自任一方的错误都可能导致系统故障,因此需要综合考虑CPU和GPU的可靠性。

研究目标

本文系统地解决了在CPU和GPU上运行的任务的可靠性问题。对于给定任务,目标是在寿命可靠性和实时性约束下最大化软错误可靠性。此外,为了避免热节流,我们要求系统的操作温度保持在热阈值以下。我们在使用CUDA的系统环境中考虑这个问题,因为CUDA被广泛应用于许多实际应用中。CUDA任务通过操作系统(OS)的驱动程序使用GPU资源,可能依赖于某些I/O服务来完成。

HyFRO框架

为了解决上述问题,首先探索了CUDA任务的映射如何影响任务的CPU时间,然后开发了一个名为HyFRO(Hybrid Framework for Reliability Optimization)的混合框架。该框架:

  1. 静态地将任务映射到CPU核心,以提高软错误可靠性;
  2. 动态地在CPU核心之间迁移任务,以平衡核心的磨损状态,从而实现更高的寿命可靠性;
  3. 动态地调整CPU和GPU核心的频率,以在峰值温度、实时性和寿命可靠性约束下提高软错误可靠性。

二、相关工作

1. CPU和GPU集成的MPSoCs
  • 这些系统提供了强大的并行计算能力和通用计算能力,已有多篇论文讨论了如何实现更低的功耗和更高的性能。
  • 功耗和性能优化
    • Jeong等提出了通过调整CPU和GPU内存请求的优先级来改进GPU性能。
    • Pathania和Prakash分别提出了通过调整CPU和GPU核心频率来最大化MPSoC性能的方法。
    • Wang等人开发了一个框架,在温度约束下,通过分区和映射并发应用来最大化系统性能。
2. CPU可靠性研究
  • 软错误可靠性:多篇论文提出了不同的方法来分配任务失败后的恢复。
    • Zhao等提出了通过增加核心频率来减少软错误率的方法。
  • 寿命可靠性:Huang等通过任务映射和调度来防止老化效应。Das等提出了一种基于机器学习的算法来降低温度和减轻热循环。
  • 综合研究:软错误和永久错误都可能导致系统故障,因此软错误可靠性和寿命可靠性需要共同研究。Das等通过调整核心频率来提高系统可用性。Zhou等提出了静态确定任务副本和核心频率的方法。
3. GPU可靠性研究
  • 软错误可靠性:Tan等开发了一个框架来评估通用GPU(GPGPU)的软错误脆弱性,并提出利用电阻性存储器来提高软错误可靠性和减少能耗。Lee等开发了一种编译和指令调度方法来提高软错误可靠性。
  • 寿命可靠性:Namaki-Shoushtari等提出了平衡GPU寄存器文件磨损状态的方法。Rahimi等开发了一种考虑老化的指令分配方案,以均匀分布指令压力。

三、 预备知识

A. 硬件模型
  • 本文关注的MPSoC由一个GPU(ρG)和m个同质CPU核心({ρ1, ..., ρm})组成。虽然Nvidia的GPU有多个核心,但我们无法明确分配任务到具体的核心,因此将GPU抽象为单一处理器。GPU仅在没有任何操作执行时处于空闲状态。
  • 假设CPU和GPU都支持电压和频率调整。较高的电压和频率通常会产生较高的温度。定义一个时间间隔内的CPU核心或GPU的利用率为U = [ta/|∆t|],其中ta是核心执行操作的时间量。显然,较低的核心频率会导致较高的核心利用率。核心利用率通常用于估计软错误可靠性和保证截止日期约束。CPU和GPU核心的工作温度可以通过使用RC热模型工具(如HotSpot)或通过温度传感器测量来估算。通常,较高的工作温度会导致较低的寿命可靠性。为了避免意外的热节流,要求操作温度低于某个阈值。
B. 软错误和寿命可靠性模型
  • 考虑由瞬态故障引起的软错误可靠性和由永久性故障引起的寿命可靠性。由于CPU和GPU在设备级别是相同的,因此设备级别的软错误可靠性和寿命可靠性模型适用于CPU和GPU。

  • 软错误可靠性:在时间间隔内,软错误可靠性是没有软错误发生的概率:

    其中,f是核心频率,|∆t|是时间间隔的长度,U是该时间间隔内核心的利用率。λ(f)是依赖于频率f的平均故障率:

    其中,λ0是最大核心频率下的平均故障率,fmin和fmax分别是最小和最大核心频率,d是指示故障率对频率调整敏感性的硬件特定常数。

  • 系统级软错误可靠性:MPSoC的系统级软错误可靠性为:

    其中,rG和r_i(i=1, ..., m)分别是ρG和ρi的软错误可靠性。

  • 寿命可靠性:本文考虑了四种主要的集成电路(IC)失效机制:电迁移(EM)、时间依赖电介质击穿(TDDB)、应力迁移(SM)和热循环(TC)。EM是金属原子的位移,TDDB是栅氧层的劣化,SM是金属线中原子的方向偏置运动引起的。EM、SM和TDDB的磨损与操作温度呈指数关系。TC的磨损则依赖于每个循环的幅度、周期和峰值温度。通常,较低的操作温度、较小的幅度和较长的周期会导致更高的寿命可靠性。本文使用现有工具检查热剖面产生的寿命可靠性是否超过寿命可靠性约束。

四、 经验研究:任务映射对任务执行时间的影响

这一部分研究了CUDA任务的执行时间是否会因为操作系统(OS)和/或相关I/O服务在不同的CPU核心上执行而有所不同。通过在不同的硬件平台上进行实验,我们得出了以下结论:

实验设计

在Nvidia的TK1芯片上(使用CUDA 6.5)测量了CUDA任务的CPU时间。默认设置为CPU频率2.1 GHz,GPU频率72 MHz。使用CUDA API cudaEventRecord记录GPU执行前后的时间戳,计算GPU时间。为了得出一般结论,我们执行了来自不同基准套件的6个CUDA任务(见表I)。

实验结果
  • 若CUDA任务与操作系统在不同的CPU核心上运行,额外的CPU时间。可以看出,额外的CPU时间随着输入的不同而变化,但可以预测。
  • 相比额外的CPU时间,额外的GPU时间可以忽略不计(小于任务执行时间的1%)。
平台独立性
  • 为验证观察是否与平台无关,在Nvidia的TX2芯片上(使用CUDA 8.0)测量了这些任务的执行时间。TX2包含4个ARM核心和2个Denver核心。结果与TK1类似。
额外CPU时间的来源
  • 为了发现额外CPU时间的来源,使用Nvidia的性能分析工具nvprof测量了每个CUDA函数的CPU时间。结果显示,调用同步CUDA函数(如cudaMemcpy)时,如果CUDA任务在与OS不同的核心上执行,CPU时间显著增加。

基于上述实验结果,得出以下结论:

  • 若CUDA任务在与OS和/或I/O服务不同的核心上执行,GPU任务的CPU时间会增加,但GPU时间不会变化。
  • 为减少额外CPU时间,CUDA任务应在每次传输中传输更多数据,以减少数据传输次数,从而减少CUDA API调用次数。

五、 集成任务、操作系统和I/O服务模型

为了考虑任务依赖于OS和I/O服务完成的事实,我们扩展了实时任务模型。具体来说,模型考虑了任务执行时间与OS和I/O服务的依赖关系。这可以通过一个无向图来描述,任务、OS和I/O服务用节点表示,边表示它们的依赖关系,边的权重是任务与OS或I/O服务在不同核心上运行时的额外CPU时间(见图6)。

六、框架概述

A. 问题表述

本文的问题来源于诸如车载信息娱乐系统等应用。这类系统具有软截止时间、温度、寿命可靠性和软错误可靠性要求。为表述问题,我们首先介绍两个概念:

  1. 采样窗口(Sampling Window, W):定义为温度可以被视为常数的时间间隔。在采样窗口内不允许任务迁移。
  2. 剖析窗口(Profiling Window):由多个等长的采样窗口组成,用于估计寿命可靠性。

假设一个剖析窗口由n个采样窗口组成,MPSoC有m个CPU核心和一个GPU。我们的目标是在每个剖析窗口中最大化系统级软错误可靠性,并在每个采样窗口中满足设计约束。公式化如下:

目标函数:

约束条件:

其中,rG,j 和 ri,j分别是在采样窗口 Wj中GPU和CPU核心 ρi的软错误可靠性。以上约束条件分别要求:

  1. CPU核心和GPU的温度必须低于阈值 TCth
  2. 核心的利用率 U(ρi,Wj)必须低于上限 Uth​ 以满足实时性要求。
  3. 最低寿命可靠性 LTR 必须高于阈值 LTRth

软错误可靠性与核心利用率有关,首先设计了一种离线启发式方法来映射任务、操作系统和I/O服务,以减少核心的总利用率。然后我们动态迁移任务以实现更高的寿命可靠性,并在每个采样窗口中调整CPU和GPU核心频率以提高软错误可靠性。我们将这两种方法整合到一个混合框架中以高效解决问题。

B. HyFRO框架概述

我们开发了一个离线/在线混合框架HyFRO,以解决上述问题。图7展示了HyFRO的高级概述。主要挑战包括:

  1. 任务映射对任务执行时间的影响;
  2. 核心之间不平衡的磨损状态,降低了寿命可靠性;
  3. 负载和运行环境的变化。

为了应对这些挑战,框架的基本思路是:

  1. 静态地将任务、I/O服务和操作系统映射到合适的CPU核心,以最小化额外的CPU时间;
  2. 动态迁移任务以平衡核心之间的磨损状态;
  3. 调整CPU和GPU核心频率以最大化软错误可靠性,同时满足寿命可靠性和操作温度约束。

HyFRO的离线部分(图7左侧)负责将任务、I/O服务和操作系统映射到适当的CPU核心。这种映射最小化了额外的CPU时间,减少了任务执行时间,从而提高了软错误可靠性。然而,这种方法会因为核心负载和磨损状态不均衡而降低寿命可靠性。我们通过在HyFRO的在线部分动态迁移任务并平衡CPU核心之间的磨损状态来改善寿命可靠性。

HyFRO的在线部分包括四个主要部分:

  1. 磨损平衡器(Wear Balancer)
  2. 频率调节器(Frequency Governor)
  3. 执行器(Executor)
  4. 状态收集器(State Collector)

这些部分在每个剖析窗口的开始时触发,而执行器和状态收集器在每个采样窗口中触发。磨损平衡器在每个剖析窗口中交换CPU核心之间的工作负载以平衡磨损状态,提高寿命可靠性。为了提高软错误可靠性,状态收集器、频率调节器和执行器协同工作动态提高CPU和GPU核心频率。状态收集器收集并保存系统状态,包括每个核心的温度、利用率和频率。基于系统状态,频率调节器在每个剖析窗口的开始时决定下一个剖析窗口中所有采样窗口的CPU和GPU核心频率。然而,由于运行时工作负载可能发生变化,执行器可能会调整频率调节器的决策以适应运行时变化。

七、框架细节

A. 任务映射器(Task Mapper)

任务映射器将任务、I/O服务和操作系统映射到合适的CPU核心,以减少总执行时间,从而提高软错误可靠性。由于GPU任务的依赖性CPU时间较大,我们首先映射GPU任务、I/O服务和操作系统,然后映射普通的CPU任务以平衡核心间的工作负载。

算法1:任务映射

  • 初始化: 首先,将所有CPU核心的利用率设为0。
  • 排序: 根据任务和服务之间的依赖关系(即它们在不同核心上运行时的额外CPU时间)进行排序,优先处理依赖关系强的任务。
  • 映射任务:
    • 对于每对任务和服务,如果它们都还没有被映射,尝试将它们映射到同一个核心上。如果这样做不会违反实时性要求(即核心利用率不会过高)。
    • 如果不能映射到同一个核心上,就将它们映射到两个利用率较低的核心上。
    • 如果其中一个已经被映射,尝试将另一个映射到同一个核心上。如果不行,就将其映射到利用率最低的核心上。
  • 平衡负载: 最后,将普通的CPU任务映射到核心上,以平衡各核心之间的工作负载

该算法的复杂度是任务、I/O服务和操作系统之间依赖关系数量的线性关系。

B. 磨损平衡器(Wear Balancer)

虽然任务映射器可以避免额外的CPU时间并减少核心的总利用率,但会导致核心工作负载和磨损状态不平衡。为了实现更高的寿命可靠性,必须在运行时迁移任务并平衡核心间的磨损状态。

算法2:平衡CPU核心间的工作负载

 

这个算法的目的是通过交换CPU核心之间的工作负载来平衡它们的磨损状态,从而延长系统的寿命。

步骤概述:

  1. 排序: 按照温度从高到低对CPU核心进行排序。
  2. 交换工作负载: 从温度差异较小的核心对开始,交换它们之间的工作负载。这样做的目的是避免因温度波动过大而引起的热循环问题
  3. 限制温度差异: 交换工作负载的条件是两个核心的温度差异小于预设的阈值Tcyc,以确保交换不会导致热循环成为主要故障原因。

该算法的复杂度为O(m),其中m是CPU核心的数量。

C. 频率调节器(Frequency Governor)

为了提高软错误可靠性,频率调节器在每个剖析窗口的开始时被触发,以基于过去的系统状态确定下一个剖析窗口的核心频率。

算法3:确定核心频率

 这个算法的目的是根据系统的历史状态,在每个剖析窗口的开始时调整CPU和GPU核心的频率,以提高软错误可靠性。

步骤概述:

  1. 检查寿命可靠性: 如果当前的GPU计划违反了寿命可靠性约束,首先找到温度最高的采样窗口,降低这些窗口中的核心频率,以减少核心的利用率。
  2. 增加频率: 如果当前的计划满足寿命可靠性约束,则在不违反温度约束的情况下,增加每个采样窗口中的核心频率,以最大化软错误可靠性。
  3. 调整CPU频率: 类似地,检查CPU的寿命可靠性。如果违反了约束,则降低温度最高的采样窗口中的核心频率;否则,增加温度最低的采样窗口中的核心频率。
  4. 生成新计划: 基于上述调整,生成下一个剖析窗口的核心频率计划。

该算法的复杂度为O(m × n + n),其中m是CPU核心数量,n是剖析窗口中的采样窗口数量。

D. 执行器(Executor)

执行器在每个采样窗口的开始时设置CPU和GPU核心的频率。尽管一个直接的方法是简单遵循频率调节器生成的计划,但由于任务的负载在运行时可能会变化,该计划可能会违反一些或全部约束。

为避免违反温度约束,执行器在每个采样窗口开始时需要确定初始温度是否超过约束。如果超过,则需要降低采样窗口的核心频率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D了一天bug忘了编译

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值