为进程分配核心的好处

Benefits of assigning cores to the process

本文关键字:核心 进程 分配      更新时间:2023-10-16

关于整个核心到过程,我想知道真正的好处。例如,我有一个多进程Qt c++应用程序,有7个进程,包括大量的科学计算和可视化。该应用程序运行在最新的Ubuntu和8核CPU(4实4虚)上。提示:几乎所有进程都是单线程的。在这种情况下,将单个进程分配给专用核心是否会带来性能优势?理想情况下,我会将所有进程分配给专用核心,但我有一个进程是多线程的,并驱动设备。

这是有好处的,但前提是你要让其他进程远离你的专用核心。问题是,你真的需要它吗,或者换句话说,你觉得它适合你吗?
内核在将进程分配给内核方面还不错,但它试图保持负载平衡,它不知道你的优先级,所以有时你必须强迫它。这样做的好处是,您的进程将较少受到缓存丢失和上下文切换的影响。但是如果你做很多系统调用,比如IO,你会有上下文切换,我不确定你会感觉到有多大的不同。专用内核通常用于时间紧迫的线程,您不希望被其他任何东西中断。并且通常只在shm和/或非内核IO上通信。

modem CPU非恒速运行。有许多因素,包括调度程序的选择(这可能取决于cpu温度和风扇噪音),热提升/多步进水平等。从理论上讲,拥有所有CPU核心"最大限度"(因此没有boost)并不意味着您可以完成更多的工作。可能是,但你需要衡量。

现在假设我们想为CPU绑定任务"最大化"所有CPU内核。现代ubuntu有很好的调度程序来防止内核之间不必要的线程传输,这会导致各种开销,包括跨cpu同步和TLB崩溃。因此,只要所有线程都使用自己的内核,它们通常会坚持使用它,除非调度程序对cpu频率进行调整。

TL,博士;系统通常有更好的想法来利用机器,让调度程序做决定,它通常把你的cpu绑定线程固定到特定的核心,除非是时候冷却它了。

指定要处理的内核的时间是为系统保留一个内核来执行I/O操作。

在这种情况下,将单个进程分配给专用核心是否会带来任何性能优势?

如果你的工作记忆集足够小,它可能会。比如说,每个核心都有专用的L1 32K D和32K i缓存,然后说每个模块(对核心)L2 256K D和256K i缓存,然后共享6M L3缓存。

从一个核心移动到另一个核心意味着扔掉你的缓存,并在不同的核心上重新加载它。如果给定的工作内存集足够小,这可能很重要。如果您在16Gb内存集上跟踪指针,很可能看不到任何内容

但是你必须测量