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 / unix / Perguntas / 523252
Accepted
Yves
Yves
Asked: 2019-06-07 01:25:56 +0800 CST2019-06-07 01:25:56 +0800 CST 2019-06-07 01:25:56 +0800 CST

Como atribuir um processo em duas CPUs

  • 772

Eu tenho um servidor Ubuntu, que tem 16 CPUs. ( nproc --allme mostre 16)

Eu escrevi um script bash chamado test.shcomo abaixo:

#!/bin/bash


while :
do
    echo xxx
done

Eu executei: ./test.sh >/dev/null &.

Então eu usei o comando toppara monitorar os usos da CPU e descobri que uma CPU foi usada quase 100% por causa do processo test.sh:

6411 me       20   0   11240   3052   2852 R  93.8  0.0   0:11.71 test.sh
%Cpu5 : 96.7 us,  3.3 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

Como podemos ver, o processo test.shfoi atribuído na 5ª CPU, que foi usada quase 100%.

É possível atribuir um processo pesado em mais de uma CPU para que possamos fazer mais uso das CPUs? Por que o sistema operacional não atribuiu o processo test.shem mais de uma CPU? É porque o processo test.shnão é pesado o suficiente ou devemos fazer alguma configuração para o sistema operacional fazer isso?

cpu top
  • 2 2 respostas
  • 3603 Views

2 respostas

  • Voted
  1. Best Answer
    ctrl-alt-delor
    2019-06-07T01:40:10+08:002019-06-07T01:40:10+08:00

    Um único thread não pode ser dividido entre vários núcleos:

    Um programa precisa ser escrito para ter mais de um thread (um por núcleo), ou precisa haver mais de um programa. Caso contrário, você não usará os núcleos.

    Escrever programas para usar mais núcleos não é trivial, e nem todos os problemas podem ser paralelizados (escritos para rodar em mais de um núcleo). Se um problema contiver 20% de código essencialmente sequencial, então, com um número infinito de processadores, ele não será mais rápido que 20% do tempo de execução original (aumento de velocidade de 500%). Depois, há os overheads (comunicação entre threads).

    Se você não tiver nenhum aplicativo para os núcleos, é melhor vendê-lo e obter uma máquina mais barata.

    Cada núcleo terá uma tonelada de paralelismo, para lidar com um único thread, mas isso não é visível. Agora estamos lutando para tornar um único núcleo mais rápido, à medida que adicionamos núcleos. Isso funciona bem no início.

    Sistemas Unix (como Gnu/Linux, por exemplo, Ubuntu), fazem um bom trabalho usando núcleos extras, até cerca de 2→4. O Windows da Microsoft obtém melhorias quando você tem um núcleo para o antivírus, outro para o desfragmentador e outro para todo o resto.

    Depois disso só fará diferença se você tiver aplicativos projetados para multi-core.

    • 4
  2. RGRHON
    2021-03-11T22:17:35+08:002021-03-11T22:17:35+08:00

    Aqui estão exemplos de comandos linux que podem usar vários processadores:

    • make -j
    • gcc -pipe

    A makeopção é particularmente útil e simples ao compilar grandes projetos com arquivos gcc.

    • Adicione a -fopenmpopção às suas opções de compilação ao chamar gcc.

    • Tente adicionar o seguinte pragma logo acima de seus loops for:

      #pragma omp parallel for
      for(i=0; i<8000000000; i++) {
          ptr[i] = i/10000;
      }
      

    Por padrão, o OpenMP criará tantos threads quanto núcleos em sua máquina e compartilhará a carga de trabalho uniformemente entre eles.

    • 0

relate perguntas

  • Definir limites na utilização do núcleo da CPU no Linux

  • Como uma CPU sabe que há IO pendente?

  • Tempo de execução total da máquina

  • limpe os filtros adicionados no `top`

  • Por que contagem de CPU diferente de nproc e nproc --all no contêiner OpenVZ?

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

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