我发现内核仅识别出一个核心/proc/cpuinfo
。因此,我安装了一个 686 pae 内核来识别所有核心并获得多核功能。
我读到过有关进程如何使用多个核心(如果可用)的信息。即,必须对应用程序进行编程以利用计算机上可用的多核。
但我想知道 686 pae 内核是否能够划分总进程,从而1. assign a set of processes to different cores
2. share a process between different cores
减少每个核心的工作量。这实际上会减少队列中的进程并更快地完成进程。支持多处理的内核能否实现这一点并帮助减少 CPU 开销?
我可以遵循任何其他方法在核心之间有效地共享进程吗?
答案1
我们已经可以通过设置来限制进程可以在哪些核心上执行进程的亲和力。在 Linux 上,这可以实现通过使用taskset
限制进程可以在哪些核心上执行。默认情况下,Linux 使用抢占式任务调度程序,这和你在 中描述的几乎一模一样(2)
。几乎所有主流操作系统都使用这种任务调度程序,这将导致一个进程默认在多个核心上运行。
实际上保证您的进程X
在核心上运行的时间Y
,正如您在中暗示的那样,(1)
需要使用实时操作系统;Linux 也有一个现有的实时内核模块(例如实时Linux)。
TL,DR:回答这个问题如何在核心之间有效地共享进程?由于使用了任务调度程序,所有主流操作系统都已经实现了这一点。操作系统的工作是控制在什么时间、什么位置运行什么进程。虽然您可以将进程“固定”到特定核心(或一组核心)并禁止其在其他核心上执行(通过taskset
),但当该进程被抢占时,操作系统仍会安排其他进程在该核心上运行。
如果你需要保证程序X
在核心上的执行时间至少为Y
,你应该考虑使用实时内核,或者“调整”您已经使用的任务调度程序使用不同的抢占策略(甚至将整个任务调度程序换成另一个!)。请注意,只有实时操作系统才会保证执行。