Olá, especialistas em Kernel I/O,
Tenho uma pergunta sobre os contadores pgpgin
e em , focando especificamente em . Tenho explorado ferramentas de monitoramento de desempenho como e , que são ferramentas de linha de comando muito práticas para observar o desempenho de E/S. Ao examinar seu código, notei que essas ferramentas relatam "E/S atual" usando os contadores e em vez de ler diretamente as estatísticas de E/S atuais de dispositivos de bloco, como ferramentas como fazem.pgpgout
/proc/vmstat
pgpgin
vmstat
iotop
pgpgin
pgpgout
fio
Primeira pergunta: Estou tentando entender a relação exata entre os pgpgin
contadores pgpgout
e e a largura de banda de E/S real. Por que essas ferramentas dependem de contadores relacionados à paginação para representar a atividade de E/S? Como exatamente o pgpgin e o pgpgout são atualizados, e quais componentes do sistema são responsáveis por essas atualizações? Em resumo, você poderia explicar quando e por que esses contadores refletem as operações de E/S do disco?
Segunda pergunta (caso extremo): Existem cenários específicos ou casos extremos em que pgpgin
a largura de banda não corresponde com precisão à largura de banda real do disco?
Ao fazer benchmarking de desempenho de leitura de SSD usando fio
polling io_uring
, observei que a largura de banda de E/S relatada por fio
(e estatísticas de SSD) é significativamente menor do que a largura de banda indicada por pgpgin
. Essa discrepância me levou a investigar como pgpgin
reflete a atividade de E/S (daí a primeira pergunta acima).
Confirmei que essa incompatibilidade é consistente e não causada por ruído transitório do sistema.
Qualquer insight sobre esses contadores, seus mecanismos de atualização e sua relação com o desempenho real de E/S seria muito apreciado. Obrigado!
Apesar de seus nomes,
pgpgin
epgpgout
não estão diretamente relacionados a páginas; eles contam setores submetidos à camada de bloco para leitura e escrita (respectivamente). Eles são atualizados somente emsubmit_bio
, definidos emblock/blk-core.c
:Então, ferramentas que usam esses contadores medem E/S reais enviadas para a camada de bloco. Isso não necessariamente corresponde a E/S enviadas para dispositivos físicos: notavelmente, a camada de bloco mantém filas que podem coalescer operações.
No entanto, isso provavelmente não explica toda a discrepância que você está vendo...