Verifique as informações detalhadas da CPU no Linux com CoreFreq [avançado]

9 de novembro de 2019

Você já sentiu a necessidade de verificar as informações da CPU no Linux? Você já quis saber a velocidade real de sua CPU? Ou qual processo está atualmente vinculado a um determinado núcleo? Essas parecem ser perguntas apenas para especialistas.

Mas fique comigo - como Alice, você pode descobrir mais do que o esperado ao passar pelo espelho. Então, sem mais delongas, deixe-me apresentar nosso protagonista principal: CoreFreq.

Conheça sua CPU no Linux com CoreFreq

CoreFreq é uma ferramenta para coletar dados de desempenho da CPU em sistemas Linux. Possui licença de código aberto. Ele foi escrito por CyrIng, um desenvolvedor francês, e as fontes estão disponíveis no GitHub.

Embora aparentemente estável, o CoreFreq deve ser considerado experimental. A partir de hoje, ele está disponível apenas em repositório Arch. Não está empacotado (ainda) para qualquer outra distribuição. Portanto, se você quiser experimentar, pode ser necessário compilá-lo. O que não é difícil, e pode ser um bom primeiro passo se você nunca fez isso antes.

Finalmente, o que torna o CoreFreq diferente de outras ferramentas semelhantes é que ele visa reunir dados de alta precisão . Para fazer isso, o CoreFreq precisa monitorar a CPU o mais próximo possível do hardware. Vamos ver agora como ele obtém informações da CPU na máquina Linux.

Como funciona o CoreFreq?

CoreFreq é composto por três partes. Um módulo de kernel, um daemon e uma interface de linha de comando (CLI) de usuário .

  • Por definição, o módulo do kernel terá acesso total ao host. É sua responsabilidade coletar os dados de baixo nível.
  • Os dados são coletados por um daemon userland. O daemon deve ser executado como root .
  • Finalmente, o CoreFreq vem com uma interface de terminal para relatar dados em um formato legível por humanos. Essa ferramenta CLI é um processo comum e pode ser usada pelo usuário final.

Compilando e executando CoreFreq

Antes de executar o CoreFreq, você deve compilá-lo. Ou seja, transformar o código-fonte escrito pelo programador de forma que seu computador o compreenda. Não tenha medo quando eu disser você deve compilá-lo - você não terá muito trabalho a fazer. Seu computador fará todo o trabalho duro.

As etapas necessárias para compilar o CoreFreq serão basicamente as mesmas para todas as distribuições Linux - exceto para a instalação dos pacotes necessários. Aqui eu dou as instruções para CentOS/Red Hat e Debian. Sinta-se à vontade para usar a seção de comentários para fornecer mais detalhes sobre outras distribuições, se necessário.

No entanto, agora é hora de abrir seu emulador de terminal favorito e começar a digitar. Para Red Hat/CentOS, as ferramentas necessárias fazem parte do grupo Ferramentas de Desenvolvimento - então, basta instalar:

Comandos para usar no terminal

# specific to Red Hat, CentOS sudo yum group install "Development Tools"

Para distribuições com base em Debian e Debian, você precisará instalar alguns pacotes individuais:

Comandos para usar no terminal

# specific to Debian-based distributions sudo apt-get install dkms git libpthread-stubs0-dev

  • dkms é uma ferramenta para construir módulos do kernel a partir da fonte. É necessário porque o CoreFreq é implementado como um módulo do kernel para reunir dados o mais próximo possível do hardware;
  • git é uma ferramenta usada para desenvolvimento distribuído. Aqui, usaremos apenas para baixar uma cópia da última árvore de desenvolvimento do CoreFreq. Mas se quiser, você mesmo pode corrigir o software e enviar solicitações de pull para o desenvolvedor original;
  • libpthread-stubs0-dev é uma [biblioteca] necessária (https://en.wikipedia.org/wiki/Library_%28computing%29) para construir o CoreFreq (bem, na verdade, no Linux ele contém apenas dados do pkg-config, mas vamos fingir que por hoje)

Assim que as ferramentas necessárias forem instaladas em seu sistema, será hora de baixar o código-fonte do CoreFreq:

Comandos para usar no terminal

# Distribution-agnostic part git clone https://github.com/cyring/CoreFreq.git

Observe que o git fará o download da última versão do código-fonte, bem como de todo o histórico de modificações do projeto. Para um mero usuário, isso é inútil. Mas ... tenho a secreta esperança de que esta seja a ocasião para você examinar mais de perto o processo de desenvolvimento de código aberto. Mas vamos fechar esse parêntese - já que agora você está pronto para compilar o software:

Comandos para usar no terminal

cd CoreFreq/ make && echo Done

Após alguns segundos, a palavra Concluído deve aparecer na janela do terminal, significando que a compilação foi bem-sucedida.

Neste ponto, as três partes do CoreFreq estão compiladas e prontas para iniciar. Como eu disse antes, o software é feito de três partes - então você tem na verdade três softwares para começar a rodar o CoreFreq.

Instalando o módulo do kernel

Por razões técnicas - como CoreFreq usa o mesmo contador de baixo nível - você deve primeiro desabilitar watchdog NMI.

Em meu sistema Debian, isso pode ser feito editando o arquivo/etc/default/grub para adicionar o argumento de linha de comando do kernel nmi_watchdog = 0 e executando update-grub depois:

Comandos para usar no terminal

sudoedit /etc/default/grub update-grub

Obviamente, você precisa reinicializar para que o novo argumento do kernel seja levado em consideração.

Observe ao escrever este artigo, não fui eu. E eu não tenho nenhum problema perceptível.

Para instalar o módulo do kernel, usaremos a ferramenta Linux padrão insmod. Ele irá carregar o módulo no kernel e iniciá-lo:

Comandos para usar no terminal

sudo insmod corefreqk.ko

Você pode verificar se o CoreFreq está instalado usando lsmod:

Comandos para usar no terminal

lsmod | grep corefreq corefreqk 45056 0

E, finalmente, você pode verificar se CoreFreq reconheceu o seu processador examinando a saída de dmesg:

Comandos para usar no terminal

sudo dmesg | grep CoreFreq [57413.945720] CoreFreq: Processor [06_1E] Architecture [Nehalem/Lynnfield] CPU [8/8]

Iniciando o daemon

Agora é hora de iniciar o daemon. Seu objetivo é coletar dados coletados pelo módulo do kernel (já que é um bom design para fazer o mínimo possível dentro do kernel):

Comandos para usar no terminal

sudo ./corefreqd -i

Este comando não retornará enquanto o daemon estiver em execução. Portanto, não se surpreenda ao ver seu terminal aparentemente travar - não é: o daemon está simplesmente rodando, pronto para aceitar solicitações do cliente. Você notou que eu usei a sinalização -i acima? Isso é para o daemon exibir mais informações no terminal sobre o que está acontecendo. Apenas uma questão de curiosidade - mas ei, este artigo é sobre curiosidade!

Iniciando o cliente

Agora você está pronto para iniciar o aplicativo cliente. Abra um novo terminal e vá para o diretório CoreFreq. A partir daí, você executará o cliente:

Comandos para usar no terminal

cd CoreFreq ./corefreq-cli

CoreFreq para obter informações da CPU no Linux

Investigando sua CPU no Linux

Além das características estáticas de seu processador, como o nome do modelo ou seus recursos, uma vez que o CoreFreq esteja em execução, você pode começar a investigar o comportamento dinâmico de sua CPU em condições ao vivo. Por exemplo, na captura de tela acima, você pode ver que os vários núcleos do meu processador estão rodando entre 138MHz e 334MHz. A carga (muito pequena) sendo uniformemente distribuída entre eles.

Além disso, você pode ver para cada núcleo a quantidade de tempo gasto nos vários estados C do processador (o total deve ser 100%) - e o tempo gasto no modo turbo Boost. Se você não está familiarizado com esses conceitos, só posso encorajá-lo a dar uma olhada nas excelentes explicações de Victor Stinner: https://haypo.github.io/intel-cpus.html

Neste ponto, para fins de demonstração, lancei um loop infinito em um terminal na esperança de consumir 100% de um núcleo:

Comandos para usar no terminal

# infinite loop

eats 100% of the CPU--really?

while true; do : ; done

Obtenha informações detalhadas da CPU no Linux com CoreFreq Obtenha informações detalhadas da CPU no Linux com CoreFreq… e, de fato, posso ver claramente a qual núcleo o shell que executa o loop infinito está atualmente vinculado. Isso pode ser confirmado olhando para o corefreq-cli task Monitor

Pressione para revelar o menu e escolha visualizar> monitor de tarefas:

Você não pode ver isso na imagem acima, mas se você executar sozinho, notará que a tarefa salta de um núcleo para outro após alguns segundos. Acho que sei o motivo desse comportamento. Mas, você consegue adivinhar? Não hesite em usar a seção de comentários para compartilhar suas ideias!

Mas antes de fazer isso, vamos ver como parar o CoreFreq.

Parando CoreFreq

Para parar o CoreFreq, você simplesmente precisa encerrar as três partes do software, na ordem inversa em que você os iniciou.

  • saia do cliente pressionando F4 ou CTRL-C no terminal do cliente
  • saia do daemon pressionando CTRL-C é o terminal daemon
  • remova o módulo do kernel sudo rmmod corefreqk

E você está pronto.

E agora?

Por alguns aspectos, o CoreFreq traz algumas informações da CPU no Linux que você pode coletar usando top, htop, sensores, lscpu e algumas outras ferramentas. Mas, com o CoreFreq, você não só tem todas as informações em uma única interface, mas também tem uma precisão maior pela forma como os dados são coletados. Finalmente, alguns dados simplesmente não estão disponíveis em qualquer outra ferramenta - pelo que eu sei, é claro (proporção de estados C? Instrução por ciclos?)

Você pode achar esta ferramenta destinada apenas a desenvolvedores que tentam ajustar algoritmos de computação intensiva. Ou para jogadores ansiosos para verificar quanto ganho eles obtiveram fazendo overclock em seu hardware.

Mas devo admitir que pessoalmente sempre acho essas ferramentas interessantes, pois nos permitem tocar a realidade do hardware moderno - geralmente muito mais complexo do que normalmente imaginamos. Por exemplo, quantos de vocês sabiam que vários núcleos de uma CPU podem ser executados em velocidades diferentes - ou podem estar em modo C diferente?

De qualquer forma, tenho certeza de que alguns de vocês encontrarão usos muito inteligentes dessa ferramenta ou farão descobertas intrigantes sobre seu hardware. Não hesite em compartilhar isso conosco na seção de comentários abaixo. Tenho certeza de que CyrIng ficaria feliz em ouvir suas idéias e feedbacks sobre o CoreFreq para torná-lo ainda melhor.

E, não se esqueça: se você desenvolveu um software de código aberto, sinta-se à vontade para entrar em contato conosco para aparecer no It’s FOSS.

Confira também a versão original desse post em inglês
Esse post foi originalmente escrito por Sylvain Leroux e publicado no site itsfoss.com. Tradução sujeita a revisão.

Check Detailed CPU Information In Linux With CoreFreq [Advanced]

Propaganda
Blog Comments powered by Disqus.
Propaganda