Embedded 确定多核处理器中特定核上的负载

Embedded 确定多核处理器中特定核上的负载,embedded,multicore,processor,scheduler,rtos,Embedded,Multicore,Processor,Scheduler,Rtos,在多核处理器中,有多种方法可以告诉特定应用程序在单核或2核或3核中运行。考虑到应用程序(具有大量线程)在多个内核上运行的场景,调度程序如何确定多核处理器中特定内核上的负载(线程数),并相应地在各个内核之间分配(平衡)负载(分配线程)?在大多数调度程序中,每个CPU都是一个独立的实体,它检查系统的当前状态,并试图找到一些有用的事情来做。把CPU想象成一个工作狂——它总是尝试做任何能做的事情。调度器不是告诉CPU下一步要做什么的“老板”,确保每个人都公平地分担任务。相反,每个CPU都遵循一个调度算法

在多核处理器中,有多种方法可以告诉特定应用程序在单核或2核或3核中运行。考虑到应用程序(具有大量线程)在多个内核上运行的场景,调度程序如何确定多核处理器中特定内核上的负载(线程数),并相应地在各个内核之间分配(平衡)负载(分配线程)?

在大多数调度程序中,每个CPU都是一个独立的实体,它检查系统的当前状态,并试图找到一些有用的事情来做。把CPU想象成一个工作狂——它总是尝试做任何能做的事情。调度器不是告诉CPU下一步要做什么的“老板”,确保每个人都公平地分担任务。相反,每个CPU都遵循一个调度算法,在该算法中,它将检查系统的状态,并尝试找出如何尽可能多地完成工作

调度算法可能对“线程关联性”有一些规定,这意味着CPU更愿意运行先前调度的线程,因为该线程更可能位于缓存中。然而,与网络负载平衡不同的是,调度算法通常(但并非总是)关注使每个CPU尽可能繁忙,即使工作负载最终不公平

为什么??如果工作负载是CPU密集型的,那么每个CPU将能够以接近100%的速度运行,并且工作负载是公平的。如果工作负载是I/O密集型的,并且CPU将大部分时间花在等待共享资源可用上(这是真实系统的正常情况),那么任何负载平衡策略都可能与简单地尽快释放共享资源不一致


一个简单的多CPU调度程序将包括一个可运行线程队列和一个阻塞线程列表——这个队列和列表是所有CPU共享的数据结构,访问受锁定保护。当CPU进入调度程序时,它将选择优先级最高的可运行线程,并运行该线程,直到块或分配的时间片过期。如果线程阻塞,它将被放置在阻塞线程列表中,直到它再次成为可运行线程。如果时间片过期,线程将被置于可运行线程队列中的延迟位置,另一个线程被选中。

在Linux中,您可以使用
任务集-c######/可执行文件
其中#####是一个cpu列表

支持多核的调度程序本身是一个单独的主题。您可能想看看这个:在程序员的级别,你必须开发你的算法,使不相互依赖的部分可以并行运行(线程)。快速傅立叶变换是并行计算的完美例子。有并行库可用于促进多核编程。虽然我没有得到确切的答案,但这是一个非常好的链接。