Debian 如何利用大量 CPU 核心?

Debian 如何利用大量 CPU 核心?

我刚刚在 24 核 VPS 上获得了一个帐户(根据 UnixBench 有 24 个 CPU)。

  1. 一般来说,如何在 Debian 中充分利用所有这些内核进行通用 shell 计算?
  2. 当我从 shell 发出长时间运行的应用程序时,是否需要输入一些特殊的内容,以使每个进程在单独的核心(如果有可用的情况下)上运行?或者 Debian 只负责处理所有这些,而我却看不见?

答案1

您不需要做任何特殊的事情:内核的工作是决定哪个线程运行在哪个 CPU 上,并且它比人类做得更好。

但是,如果没有至少 24 个并发线程运行,那么拥有 24 个 CPU 就没有意义。如果有更多的 CPU 可用,程序不会神奇地运行得更快:只有编码为具有多个并行线程的程序才会受益,而许多程序不会受益,不是因为它们的编写方式较差,而是因为它们所做的是本质上是不可并行的。

具有 N 个并发计算线程的程序将受益于最多 N 个 CPU(尽管它可能不会快 N 倍,因为线程之间的同步需要时间)。运行 M 个不同的程序,如果有的话,不会进行太多交互,同样会利用 M 个 CPU(如果程序是多线程的,则更多)。

在某些情况下,需要手动干预才能利用并行性。如果您要启动多个数据处理任务,请注意它们是并行生成的(每个 CPU 略多于一个任务),而不是一个接一个地生成。例如,在构建软件时,将-j选项传递给make.请参阅其他一些示例和解释:

如果您正在运行 Web 服务器,则所有专为重负载设计的 Web 服务器都擅长利用并行性。在评估 Linux 内核优化性能时,使用 Apache 作为测试用例。但请注意,CPU 中的并行性仅在不存在其他瓶颈(例如数据库访问或输入输出带宽引起的争用)的情况下才有帮助。

答案2

利用多个内核来提高性能在很大程度上取决于您的应用程序。一些应用程序需要逐步运行:没有办法将计算并行地分配给多个核心,因为要计算某个步骤,需要知道前面步骤的结果。如果是这样的话,那么使用 24 个核心就和只使用一个核心一样好。

在其他情况下,应用程序需要执行许多彼此不依赖的事情,拥有多个内核可以大大加快速度。作为一个相关的示例,如果您正在编译包含许多源文件的项目,则可以在链接不同文件之前独立编译每个源文件。在这种情况下,您可以让编译器在单独的内核上编译每个文件。可以使用多个 CPU 核心的应用程序通常有一个开关供您请求。例如,当使用 GNU 编译项目时make,您可以将-j开关传递给它,后跟数字。该数字指定应同时启动的作业数量make(即:在不同的内核上)。

相关内容