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 / 410628
Accepted
Alchemist
Alchemist
Asked: 2017-12-14 04:45:55 +0800 CST2017-12-14 04:45:55 +0800 CST 2017-12-14 04:45:55 +0800 CST

Como uma CPU sabe que há IO pendente?

  • 772

Eu tenho examinado a iowaitpropriedade mostrada na saída do utilitário superior, conforme mostrado abaixo.

top - 07:30:58 up  3:37,   1 user,  load average: 0.00, 0.01, 0.05
Tasks:  86 total,   1 running,   85 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

iowaité geralmente definido da seguinte forma:

"É o tempo durante o qual a CPU está ociosa e há algum IO pendente."

É meu entendimento que um processo é executado em uma única CPU. Depois de ser desprogramado porque esgotou seu intervalo de tempo ou depois de ser bloqueado, ele pode eventualmente ser agendado novamente em qualquer CPU novamente.

No caso de solicitação de IO, uma CPU que coloca um processo em hibernação ininterrupta é responsável por rastrear o iowaittempo. As outras CPUs estariam relatando o mesmo tempo que o tempo ocioso, pois realmente estão ociosas. Essa suposição está correta?

Além disso, supondo que haja uma solicitação de IO longa (o que significa que o processo teve várias oportunidades de ser agendado, mas não foi agendado porque o IO não foi concluído), como uma CPU sabe que há "IO pendente"? De onde é obtido esse tipo de informação? Como uma CPU pode simplesmente descobrir que algum processo foi colocado em hibernação em algum momento para que um IO seja concluído, pois qualquer uma das CPUs poderia ter colocado esse processo em hibernação. Como esse status de "IO pendente" é confirmado?

linux cpu
  • 1 1 respostas
  • 3942 Views

1 respostas

  • Voted
  1. Best Answer
    Stephen Kitt
    2017-12-14T05:00:28+08:002017-12-14T05:00:28+08:00

    A CPU não sabe nada disso, o agendador de tarefas sabe.

    A definição que você cita é um tanto enganosa; procfs(5)a página de manual atual tem uma definição mais precisa, com ressalvas:

    iowait(desde Linux 2.5.41)

    (5) Tempo de espera para a conclusão da E/S. Este valor não é confiável, pelos seguintes motivos:

    1. A CPU não esperará que a E/S seja concluída; iowaité o tempo que uma tarefa está aguardando a conclusão da E/S. Quando uma UCP entra em estado ocioso para E/S de tarefa pendente, outra tarefa será agendada nesta UCP.

    2. Em uma CPU com vários núcleos, a tarefa que aguarda a conclusão da E/S não está sendo executada em nenhuma CPU, portanto, iowaité difícil calcular o valor de cada CPU.

    3. O valor neste campo pode diminuir em determinadas condições.

    iowaittenta medir o tempo gasto esperando por I/O, em geral. Não é rastreado por uma CPU específica, nem pode ser (ponto 2 acima - que também corresponde ao que você está pensando). É medido por CPU, na medida do possível.

    O agendador de tarefas “sabe” que há I/O pendente, pois sabe que suspendeu uma determinada tarefa porque está aguardando I/O. Isso é rastreado por tarefa no in_iowaitcampo do task_struct; você pode procurar in_iowaitno núcleo do agendador para ver como ele é definido, rastreado e limpo. O artigo recente de Brendan Gregg sobre as médias de carga do Linux inclui informações úteis sobre o histórico. A iowaitentrada em /proc/stat, que é o que termina em top, é incrementada sempre que um tique do timer é contabilizado e o processo atual “ligado” à CPU está ocioso; você pode ver isso procurando account_idle_timeno código de rastreamento de tempo da CPU do agendador .

    Então uma definição mais precisa seria “tempo gasto nessa CPU esperando por E/S, quando não havia nada melhor para fazer”...

    • 33

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

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

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

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

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +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
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +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