AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1083512
Accepted
Py-ser
Py-ser
Asked: 2018-10-14 09:41:38 +0800 CST2018-10-14 09:41:38 +0800 CST 2018-10-14 09:41:38 +0800 CST

在不同的 CPU 之间分配工作负载

  • 772

在我的 Ubuntu 16.04 上,我正在运行一个在 CPU 使用率方面相对昂贵的程序。完成需要相当长的时间,因此其他任务(如浏览网页)会变慢。我一直在寻找一种方法来提高计算能力,如果可能的话,同时更好地了解我的笔记本电脑中发生了什么。

通过这个,我发现,如果我问top,我正在运行的程序显示 CPU 使用率为 100%,而当我打开选项卡时System monitorCPU 使用率仅为 ~25% Processes。此外,Resources系统监视器中的选项卡显示 4 个 CPU,每个 CPU 的使用率从 ~5 变为 ~100%:

CPU 使用率

结果lscpu是:

@C:~$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 142
Model name:            Intel(R) Core(TM) i5-7200U CPU @2.50GHz
Stepping:              9
CPU MHz:               3099.937
CPU max MHz:           3100,0000
CPU min MHz:           400,0000
BogoMIPS:              5423.81
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3

我可以做些什么来改善这种情况,例如稀释 4 个 CPU 之间的工作?Usingenice似乎不能解决我的情况。

我知道这可能是一个普遍的问题,取决于我正在运行的程序类型(假设它是一个Python脚本),但我想在这里获得一般知识。

cpu-load cpu intel-cpu
  • 2 2 个回答
  • 3813 Views

2 个回答

  • Voted
  1. Best Answer
    vidarlo
    2018-10-14T10:04:36+08:002018-10-14T10:04:36+08:00

    我可以做些什么来改善这种情况,例如稀释 4 个 CPU 之间的工作?Usinge nice 似乎不能解决我的情况。

    简而言之:没有。该程序是单线程的。

    Top 可以通过两种方式显示 cpu 使用情况:每个 CPU 的饱和度或总份额。如果你有一个四核系统,top 可能会显示 Irix 模式:

    同样对于多处理器环境,如果 Irix 模式关闭,top 将在 Solaris 模式下运行,其中任务的 cpu 使用率将除以 CPU 总数。您可以使用“I”交互命令切换 Irix/Solaris 模式。

    您可以通过按顶部的 I 来切换它。由于您有四个 CPU 内核,因此使用量除以四,您将显示 25%。如果打开 Irix 模式,它将显示 100%。

    您的应用程序是单线程的。它在一个 CPU 内核上执行顺序线程。如果你有源代码,你可以改变它。然而,这通常不是一项微不足道的任务,并且根据任务的不同,这可能是不可能的。

    Linux 有一个调度程序,它将运行线程分配到不同的 CPU/内核。

    • 1
  2. Chai T. Rex
    2018-10-14T10:20:39+08:002018-10-14T10:20:39+08:00

    100% 与 25% 的 CPU 使用率

    根据lscpu,您的 CPU 中有四个内核:

    On-line CPU(s) list:   0-3
    

    top每个内核使用 100%,所以如果你有一个四核处理器,那就是 400%。您完全使用了一个核心,所以这是 400% 中的 100%。系统监视器对所有内容都使用 100%(或者可能是每个实际的 CPU,我不确定)。一个核心是四个可用核心的四分之一,因此它在系统监视器中显示为 25% 的使用率。

    使用一个核心显着放缓

    如果系统变慢了一点,可能只是 CPU 使用率,除了提高工作负载进程的 niceness 值之外,您无能为力。

    如果它的速度下降到远低于四分之三的速度,它可能使用了大量的 I/O,因此其他应用程序无法非常快速地执行 I/O,无论是使用文件还是网络,或者如果没有则交换系统中有足够的 RAM,这些都显示在系统监视器应用程序中。文件使用和交换也用sudo iotop.

    更改任务的优先级

    您可以使用nice像 15 这样的高值来使任务让位于需要 CPU 的其他任务:

    nice -n 15 the-program its-arguments
    

    减缓任务

    您可以尝试nice将程序设置为 15 之类的高值,并使用该cpulimit程序(在cpulimitAPT 包中)在允许运行时减少 CPU 使用率。

    the-program its-arguments将CPU 使用率降至 60% 并使用 niceness 值 15的示例:

    cpulimit -q -z -l 60 -- nice -n 15 the-program its-arguments
    

    使用多核

    有几种方法可以继续拆分工作负载以使用更多内核。如果您尝试在计算机上执行其他操作,这可能不是您想要做的,因为它会消耗更多的处理能力来更快地完成任务。

    如果在运行时有某种方法可以指定工作负载,则一种是使用四分之一的工作负载运行该过程四次。在某些情况下有用的一种可能性是使用 4 个内核在每个内核上一次xargs -n ## -P 4 command处理项目。##

    另一种是重写应用程序以使用四个左右的线程而不是一个。如果您的应用程序中有大量 I/O 等待或类似情况,您可以将其增加到远远超过四个线程。

    还有其他可能性。

    将使用多个核心与减慢任务速度和设置 niceness 值相结合

    您可以结合使用多个内核来减慢任务或更改任务的优先级。这将使您能够更快地完成任务,但不会妨碍其他流程。

    • 1

相关问题

  • 平均负载和 CPU 负载有什么区别?

  • 为什么 ksoftirqd/0 进程使用了​​我所有的 CPU?

  • 禁用“按需”CPU 缩放守护程序

  • 未连接到任何可见进程的令人讨厌的 CPU 峰值

  • 根运行emacs

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve