嵌入式Linux如何实现实时动态负载平衡
扫描二维码
随时随地手机看文章
很容易忘记的是,嵌入式Linux无法为所有嵌入式开发人员做任何事。虽然它适合于内存和强大处理器很多的应用程序,但嵌入式Linux和类似操作系统的开销对决定性和内存消耗造成负面影响的使用案例越来越多。
细胞调制解调器、高性能视频处理和复杂的汽车控制器只是在小型、低功率多核平台上运行的对称多处理(SMP)架构下高度确定性应用的几个例子。这些系统需要从底层操作系统获得核心分配和任务安排支持,以满足严格的实时要求,同时又不影响资源的使用。
嵌入式Linux对于资源受限平台上的SMP来说并不是一个可行的选择,而且很少有实时操作系统支持SMP。因此,开发人员必须创建自己的跨多个核心调度和管理任务的方法。
由于更多的嵌入式设备需要跨多个核心部署确定性工作负载,在RTOS级别上动态负载平衡的需求只会增加。
对称多重处理与不对称多重处理
SMP和不对称多处理(AMP)是两个或多个处理器一起工作以安排和运行工作负载的体系结构模型。尽管SMP系统具有相同的核心,可以运行分配给他们的任何任务,但是AMP系统通常依靠一个主核心来根据可用性和优先级来安排和分配任务。在AMP下,核心本身不需要是相同的类型或体系结构(例如。,一个MPU可以与一个GPU一起工作),任务通常是针对核心类型的。
如果开发人员能够依赖稳定和可预测的环境,这样操作系统就可以有效地分配工作负载,而不需要花费大量的开销,那么AMP模型的工作效果最好。相比之下,对于在事件不断变化且需要动态地将工作负载从核心转移到核心的环境中运行的应用程序,SMP模型通常最有效。例如,许多手机都使用SMP,例如那些在ARM-A53平台上实现细胞调制解调器功能的手机。
为了有效地跨多个核心分配应用线程,嵌入式软件开发人员使用动态负载平衡技术。主要目标是确保应用程序在运行时在核心之间平均分配计算工作负载,并保证最高优先级线程不会被较低优先级线程取代。
动态负载平衡背后的原则
动态负载平衡中的"动态"是指在运行时对线程调度的连续评价,这使应用程序能够适应不断变化的任务需求和系统条件。动态负载平衡对于:
· 改进利用:通过在多个核心之间分配任务,开发人员可以充分利用每个核心的计算能力,提高整体系统利用率。
· 减少响应时间:适当的负载平衡确保将关键任务分配给最少争用的核心,减少响应时间并提高任务执行的可预测性。
· 容错:负载平衡可以通过将任务重新分配到非故障核心,确保持续的系统功能,帮助减轻软件故障和硬件故障的影响。
· 可伸缩性:随着系统需求的增加和更多的核心被添加,均匀分配任务对于扩展容量是必不可少的,而不会引入瓶颈。
嵌入式Linux有负载平衡机制,但也有一个缺点:操作系统会带来高昂的管理费用,这可能会对决定论产生显著影响。由于大多数硬实时rtos不支持SMP体系结构上的负载平衡,开发人员经常求助于构建自己的支持。这项努力本身也带来了挑战:
· 资源使用:由于每个核心都有自己的缓存、寄存器和其他独特的特性,开发人员必须投入时间来深入了解平台,以便在没有性能影响或资源争夺的情况下有效地分配任务。
· 内存访问:如果开发人员将具有共同内存池的任务分配给不同的核心,那么如果应用程序的控制和数据流没有得到充分的说明,内存访问可能会出现争用问题。
· 任务优先级:开发人员必须了解所有任务的优先级和最后期限,以确保分配足够的资源和时间来避免延误。
· 动态适应:由于负载平衡是一个适应系统条件变化的过程,开发人员必须实现某种反馈循环或控制机制,以便在运行时持续地重新评估线程分配和调整策略。
· 同步开销:开发人员必须最大限度地减少核心之间任务切换所需的开销,以减少延迟并维护系统的实时响应性。
实时操作系统层面的负载平衡
像 PX5 RTOS 这些设计用于基于多数据映射p的应用程序提供了内置的负载平衡,可以满足硬的实时决定性,与嵌入式Linux和其他操作系统相比,开销要小得多。 本地POSIX线程API 而运行px5rtos所需的时间不到10kb,它是非常可移植和资源高效的,并且使开发人员不必建立自己的负载平衡器。
这种固有的负载平衡器的工作方式与许多流行的负载平衡技术相同:
1. 给定任意数目的核心,rtos跟踪每个核心上运行的线程。当一个核心变得自由,并且一个线程可以用于调度时,RTOS将安排线程在该核心上运行。
2. 如果没有自由的内核,而且一个新线程已经准备好了,那么RTOS将使用该线程的优先级进行调度:如果它的优先级高于当前运行的任何其他线程,那么ros将安排新线程以预先选择一个正在运行的线程。如果它的优先级低于当前运行的任何线程的优先级,那么RTOS将等待下一个可用的核心运行。
这种方法使用与嵌入式Linux相同的处理器亲和力API,使开发人员很容易将线程分配给特定的核心,并依靠rtos来执行这些任务。就像大多数rto一样,开发人员必须确保共享资源的适当管理,以避免争用问题。
不是所有的线索都是平等的
在一个典型的单核心、基于优先级的先发制人的调度环境中,开发人员可以一次只依赖一个线程运行。在SMP环境中,这个条件无法保证,因为多个线程可以在任意数目的内核上并行运行。为了避免这种行为对系统的潜在负面影响,即只需要在给定时间内运行最高优先级的线程,PX5RTOS允许开发人员配置只允许具有同等优先级的线程在所有核心中并行运行的调度。这种方法强制执行更严格的并行性,使开发人员对其系统的可预测性有更大的信心。
结论
实现动态负载平衡是开发人员在小型、低功率多核平台上实现硬实时性能和响应所必需的。就像 PX5 RTOS 负载平衡功能支持随时可用的应用程序线程与可用核心的动态配对,所有这些线程都在超小(小于10kb)、超便携(带有完全兼容的P线程API)和严格测试(100%c语句和每个发布的分支决策覆盖)的包中。
RTO-固有负载平衡使开发人员能够专注于应用程序逻辑和测试,而不是不得不构建自己的方法,在多个处理器之间分配工作负载。