Pode um kernel que suporta multi-core reduzir a sobrecarga da cpu, reduzir o superaquecimento da cpu

2

Encontrei apenas um único núcleo conforme identificado pelo kernel em /proc/cpuinfo . Portanto, estou instalando um kernel de 686 pae para identificar todos os núcleos e obter a funcionalidade de vários núcleos.

Eu li sobre como um processo pode fazer uso de mais de um núcleo, se disponível. ie. Um aplicativo deve ser programado para utilizar os multi-núcleos disponíveis em uma máquina.

Mas gostaria de saber se um kernel de 686 pae é capaz de dividir o total de processos e 1. assign a set of processes to different cores 2. share a process between different cores , o que pode reduzir o trabalho de cada núcleo. Isso de fato reduz os processos em fila e conclui processos mais rapidamente. Um kernel que suporta multiprocessamento consegue isso e ajuda a reduzir a sobrecarga de cpu?

Quaisquer outros métodos que eu possa seguir para compartilhar efetivamente processos entre os núcleos?

    
por perlboat 03.02.2014 / 17:38

1 resposta

1

Já é possível limitar os núcleos em que um processo pode ser executado definindo a afinidade dos processos . No Linux, isso pode ser feito usando taskset para limitar os núcleos nos quais o processo pode ser executado. Por padrão, o Linux usa um agendador de tarefas preventivas , que é quase idêntico ao que você descreve em (2) . Quase todos os principais sistemas operacionais usam esse tipo de agendador de tarefas, o que resultará em um processo sendo executado em vários núcleos por padrão.

Para garantir seu processo é executado por X no núcleo Y , como você sugeriu em (1) , seria necessário o uso de um sistema operacional em tempo real; existe também um módulo de kernel em tempo real para Linux (por exemplo, RTLinux ).

TL, DR: Em resposta à pergunta Como posso efetivamente compartilhar um processo entre os núcleos? todos os principais sistemas operacionais já fazem isso devido ao agendador de tarefas sendo usado . O trabalho de um sistema operacional é controlar qual processo é executado em que horário e onde. Embora você possa "fixar" um processo em um núcleo específico (ou conjunto de núcleos) e impedi-lo de executar em outros núcleos (via taskset ), o sistema operacional ainda agendará outros processos para serem executados nesse núcleo quando o processo é preempted.

Se você precisar garantir a execução do seu programa por pelo menos X de tempo no núcleo Y , você deve considerar um kernel em tempo real ou "ajuste" do agendador de tarefas que você já usa para usar diferentes preempções políticas (ou mesmo trocar o agendador de tarefas inteiro por outro!). Observe que apenas um sistema operacional em tempo real garantirá a execução .

    
por 03.02.2014 / 17:56