性能管理:操作系统的新维度

描述

鉴于处理器和应用程序的复杂性增加,当前一代操作系统(OS)主要关注软件完整性,而部分忽略了从现有硬件中提取最大性能的需求。

处理器的性能与操作系统允许的一样。嵌入式或其他计算平台不仅包括物理资源(内存、CPU 内核、外围设备和总线),通过资源分区(虚拟化)进行管理,还包括性能资源,如 CPU 周期、时钟速度、内存和 I/O 带宽,以及主/缓存内存空间。这些资源通过优先级或时间片等古老方法进行管理,或者根本不管理。结果,处理器未得到充分利用并消耗过多的能量,从而剥夺了它们真正的性能潜力。

大多数现有的管理计划都是零散的。CPU 周期由优先级和时间隔离管理,这意味着需要在预设时间内完成的应用程序将被保留该时间,无论它们是否实际需要它。由于缓存未命中、未命中推测和 I/O 阻塞,无法安全地预测执行时间,因此保留时间通常比所需时间长。为了确保智能手机中的调制解调器堆栈接收足够的 CPU 周期来进行呼叫,其他应用程序可能会被限制为不同时运行。这就解释了为什么一些未命名品牌手机的用户抱怨说,当手机响起时,GPS会掉线。

除此之外,电源管理最近引起了极大的兴趣。请注意“单独”特征。大多数部署的解决方案都擅长检测空闲时间、使用系统响应缓慢的模式,或 CPU 可以以较低时钟速度运行从而节省能源的特定应用程序。例如,英特尔提出了Hurry Up and Get Idle(HUGI)。要理解HUGI,请考虑以下类比:有人可以使用印地汽车全速到达目的地,然后将其停放,但也许使用普锐斯及时到达那里会更实用。您认为哪个使用更少的气体?基于使用模式的电源管理过于粗糙,无法始终有效地挖掘所有节能机会。

理想情况下,开发人员希望改变时钟速度/电压以匹配瞬时工作负载,但这不能仅通过关注正在运行的应用程序来完成。开发人员也许能够确定应用程序按时完成的最低时钟速度,但是他们是否可以放慢时钟速度,不知道其他等待运行的应用程序如果延迟会受到怎样的影响?单独管理任务和时钟速度(电源)不能导致最佳能耗。获胜的方法将同时管理/优化所有性能资源,但至少要管理时钟速度和任务调度。想象一下,任务调度员是行程计划员,时钟经理是汽车司机。如果汽车减速,则必须重新计划行程。驱动程序可能由于路况不佳(缓存未命中)而必须减速,或者在铁路障碍处停车(多线程中的障碍,由于分配的 I/O 带宽不足而阻塞缓冲区为空等)。表现出数据依赖执行时间的应用程序也存在一个问题,因为它们完成的时间在完成之前是未知的。应该提前为这些应用分配什么时钟速度?

先进的性能管理解决方案

管理性能资源的一个例子是VirtualMetrix性能管理(PerfMan),它通过参数驱动的算法控制所有性能资源。该软件调度任务、更改时钟速度、确定空闲周期,并根据性能数据(如消耗的带宽和停用的指令)分配 I/O 带宽和缓存空间。这种方法(如图 1 所示)解决了碎片问题,甚至可以实现最佳资源分配,甚至可以考虑现代处理器和数据相关应用程序的执行速度的不可预测性。

图1:PerfMan 使用参数驱动的算法控制所有性能资源,从而实现最佳资源分配。

gps

正在申请专利的已完成工时分配算法使用闭环方法,该方法通过将已完成的工作与仍要执行的工作进行比较来做出分配决策,以系统提供的任何可测量的性能量表示。例如,如果应用程序是填充缓冲区的视频播放器或通信协议,则 PerfMan 可以跟踪缓冲区填充级别并确定时钟速度和运行时间,以便及时填充缓冲区。完成的时间不可避免地会有所不同,因此决策会周期性地更新。在许多情况下,缓冲区会过度填充,以防止在缓冲区空时阻塞,这可能导致计时冲突。PerfMan 能够精确分配性能,将缓冲保持在最低限度并减少内存占用。该算法可以处理混合在一起的硬、软和非实时应用程序。

如果将应用程序执行图量化为简单的性能参数,并且截止时间在重要时已知,则算法将动态调度以及时满足截止时间。即使是非实时应用程序也需要一些性能分配,以避免无限期推迟。分配应用程序所需的最小处理器资源会增加系统利用率,从而导致更高的可能工作负载。该方法不依赖于严格的优先级,尽管可以使用它们。执行中的优先级或顺序是应用程序在等待轮到运行时表现出的紧迫性的直接结果,这是要执行的基本工作/已完成范式的函数。

扩展到更多维度

如果任务已准备好在现有操作系统中运行,它们将运行,但它们是否需要运行?如果操作系统知道它们不会影响它们的运行,它们是否可以延迟(强制空闲)?

了解每个任务的时间以及它是正在运行还是等待运行,使软件能够自动确定最小时钟速度和运行时间。因此,在所有负载条件下,一切都按时完成。将时钟速度与瞬时工作负载相匹配并不意味着时钟速度始终最小化。低能耗的目标有时需要高速爆发,然后是空闲,就像英特尔的 HUGI 一样。但即便如此,运行速度超过最佳利用率(每单位时间执行的操作)所指示的速度也没有好处。在等待内存操作完成时快速计时不会节省能源。

该算法的口号是“以最低的能耗实现最高的利用率/工作负载”,这在很大程度上是通过管理所有性能资源的闭环算法来实现的。

在多核系统中,无法同时实现平衡的负载、低多线程屏障延迟和最低的总体能耗。若要解决此问题,可以将 PerfMan 配置为优化一个或多个性能属性。如果目标是最低能耗,那么不平衡的系统(某些内核负载高,而其他内核为空并因此关闭)可能会提供最低的能耗,但代价是执行延迟更长,整体性能较低。

加速线程以减少屏障延迟也可能导致更高的能耗。但是,满足截止日期(硬或软)会覆盖所有其他考虑因素。基于闭环的精确性能资源分配算法可以安全地保持更高的工作负载水平,这反过来又允许将核心整合比现有方法进一步推动,从而实现更高的能耗降低。

在 VMX Linux 上的实现

PerfMan已实现为独立于常驻操作系统运行的瘦内核(sdKernel)。它已移植到 Linux 2.6.29 (VMX Linux),如图 2 所示。安卓端口即将完成。该软件接管 Linux 任务调度并与现有的电源管理基础架构互通。sdKernel 的单独版本提供虚拟化,并支持符合 POSIX 标准的环境中的硬实时任务。在许多平台上,调度/上下文切换都处于亚微秒级别,但由于大多数 Linux 系统调用对于硬实时应用程序来说太慢了,因此 sdKernel 为基本外围设备、计时器和其他资源提供了 API。

图2:在 Linux 实现中,PerfMan 接管 Linux 任务调度并与现有的电源管理基础架构互通。

gps

通过监控性能,该软件可以检测异常执行模式,预测即将到来的操作系统崩溃和崩溃。在这种情况下,sdKernel 将通知任务关键型应用程序停止使用 Linux 系统调用,并在重新启动 Linux 时暂时切换到 sdKernel API(安全模式)。

VMX Linux 支持真实和非实时应用程序的混合,具有高效的性能隔离,同时最大限度地降低了能耗。它还可以提供硬件隔离/安全性和安全着陆。

基准测试显示结果

使用 VMX 设计的电能表实时测量的能耗是系统累积的,并与各个应用程序相关联。媒体播放器应用程序(视频和音频)首先使用标准 Linux 2.6.29(图 3 红色图表)和 VMX Linux(图 3 蓝色图表)在 OMAP35xx BeagleBoard 上运行。

图3:在 OMAP35xx BeagleBoard 上使用 VMX Linux 可实现 95% 的平均负载,并及时完成。

gps

性能合规性(性能组合图)显示应用程序任务按时完成的程度(中心线)。该行下方表示违反最后期限。请注意,使用 VMX Linux,在没有预缓冲和违反截止时间的情况下实现了 95% 的平均负载,但它已经接近了。使用 VMX Linux 时,46 秒视频的总电路板能耗从 68.7 W*sec 下降到 27.6 W*sec。显示的数据表示预设间隔内的平均值。作为额外的好处,当Linux故意崩溃时,视频会消失,但音乐以安全模式播放,没有可听见的故障。

简而言之,该实施创造了一种新的绩效管理方法,并取得了令人兴奋的结果。审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分