AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 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

Distribua a carga de trabalho entre diferentes CPUs

  • 772

No meu Ubuntu 16.04, estou executando um programa relativamente caro em termos de uso da CPU. Leva muito tempo para terminar e outras tarefas (como navegar na web) ficam mais lentas como consequência. Eu estava procurando uma maneira de melhorar o poder de computação, se possível e ao mesmo tempo saber melhor o que está acontecendo no meu laptop.

Com isso, descobri que, se eu perguntar top, o programa que estou executando mostra um uso de CPU de 100%, enquanto quando abro o System monitoruso da CPU é de apenas ~ 25% na Processesguia. Além disso, a Resourcesaba do System monitor mostra 4 CPUs, cujo uso varia de ~5 a ~100% para cada uma:

uso de CPUs

O resultado de 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

Existe algo que eu possa fazer para melhorar a situação, como diluir o trabalho entre as 4 CPUs? Usinge nicenão parece uma solução para minha situação.

Sei que essa pode ser uma dúvida geral que depende do tipo de programa que estou executando (digamos que seja um Pythonscript), mas estou tentando aqui obter conhecimentos gerais.

cpu-load cpu intel-cpu
  • 2 2 respostas
  • 3813 Views

2 respostas

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

    Existe algo que eu possa fazer para melhorar a situação, como diluir o trabalho entre as 4 CPUs? Usinge nice não parece uma solução para a minha situação.

    Resumindo: não. O programa é de thread único.

    O Top pode mostrar o uso da CPU de duas maneiras: saturação por CPU ou participação no total. Se você tiver um sistema de quatro núcleos, a parte superior pode mostrar o modo Irix:

    Também para ambientes com vários processadores, se o modo Irix estiver desativado, o top operará no modo Solaris, no qual o uso da CPU de uma tarefa será dividido pelo número total de CPUs. Você alterna os modos Irix/Solaris com o comando interativo `I'.

    Você pode alternar isso pressionando I no topo. Como você tem quatro núcleos de CPU, o uso é dividido por quatro, e você vai mostrar 25%. Se você ativar o modo Irix, ele mostrará 100%.

    Seu aplicativo é de thread único. Ele executa um thread sequencial, em um núcleo da CPU. Se você tiver o código-fonte, poderá alterá-lo. No entanto, geralmente não é uma tarefa trivial e, dependendo da tarefa, pode não ser possível.

    O Linux possui um agendador que distribuirá threads em execução para diferentes CPUs/núcleos.

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

    100% vs 25% de uso da CPU

    Segundo lscpu, você tem quatro núcleos em sua CPU:

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

    topusa 100% por núcleo, portanto, se você tiver um processador de quatro núcleos, será 400%. Você está usando um núcleo completamente, então isso é 100% dos 400%. O monitor do sistema usa 100% para tudo (ou talvez por CPU real, não tenho certeza). Um núcleo é um quarto dos quatro núcleos disponíveis, portanto, aparece como 25% de uso no monitor do sistema.

    Desaceleração significativa com um núcleo usado

    Se o sistema estiver um pouco lento, provavelmente é apenas o uso da CPU, e você não pode fazer muito sobre isso além de aumentar o valor da gentileza dos processos da carga de trabalho.

    Se estiver diminuindo para muito menos do que três quartos da velocidade, provavelmente está usando muita E/S para que outros aplicativos não possam fazer E/S muito rapidamente, usando arquivos ou a rede ou trocando se não houver RAM suficiente no sistema, que são todos mostrados no aplicativo do monitor do sistema. O uso e a troca de arquivos também são mostrados com sudo iotop.

    Mudando a prioridade da tarefa

    Você pode usar nicecom um valor alto como 15 para fazer a tarefa dar lugar a outras tarefas que precisam da CPU:

    nice -n 15 the-program its-arguments
    

    Desacelerando a tarefa

    Você pode tentar nicecolocar o programa em um valor alto como 15 e usar o cpulimitprograma (no cpulimitpacote APT) para reduzir o uso da CPU enquanto ele pode ser executado.

    Um exemplo diminuindo a the-program its-argumentsvelocidade para 60% do uso da CPU e usando um valor de gentileza de 15:

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

    Usando vários núcleos

    Existem algumas maneiras de proceder até dividir a carga de trabalho para usar mais núcleos. Isso provavelmente não é o que você deseja fazer se estiver tentando fazer outras coisas no computador, pois ele pode usar ainda mais poder de processamento para executar as tarefas mais rapidamente.

    Uma delas é executar o processo quatro vezes cada uma com um quarto da carga de trabalho, se houver alguma maneira de especificar a carga de trabalho ao executá-la. Uma possibilidade útil em algumas circunstâncias é usar xargs -n ## -P 4 commandpara processar ##itens de cada vez em cada núcleo usando 4 núcleos.

    Outra é reescrever o aplicativo para usar quatro ou mais threads em vez de apenas um. Se houver muita E/S esperando em seu aplicativo ou algo assim, você poderá aumentá-la muito acima de quatro threads.

    Existem outras possibilidades também.

    Combinando o uso de vários núcleos com a desaceleração da tarefa e a definição do valor de gentileza

    Você pode combinar o uso de vários núcleos com a redução da velocidade da tarefa ou a alteração da prioridade da tarefa. Isso permitirá que você termine a tarefa mais rapidamente, mas saia do caminho de outros processos.

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve