O que as “gravações / leituras emitidas” referem-se ao rótulo DSK do topo?

1

Contexto: Estou escrevendo um script que calcula o uso de E / S de um serviço no histórico do último nos últimos 2 minutos (onde a amostragem do topo está configurada para ser por 1 minuto). Estou usando o seguinte comando para gerar o arquivo de histórico:

atop -P DSK,PRD -b [time] -e [time] -r > somefile_to_read_from

Estou usando a opção de saída analisável atop ( -P ) e os rótulos DSK e PRD .

Na página de manual de atop , está escrito sobre DSK :

For every logical volume/multiple device/hard disk one line is shown. Subsequent fields: name, number of milliseconds spent for I/O, number of reads issued, number of sectors transferred for reads, number of writes issued, and number of sectors transferred for write.

Enquanto para PRD , diz:

For every process one line is shown. Subsequent fields: PID, name (between brackets), state, obsoleted kernel patch installed ('n'), standard io statistics used ('y' or 'n'), number of reads on disk, cumulative number of sectors read, number of writes on disk, cumulative number of sectors written, cancelled number of written sectors, TGID (group number of related tasks/threads) and is_process (y/n).

Eu assumi que eles seriam a mesma coisa. No entanto, quase sempre obtenho valores muito acima de 100% para o uso de E / S (por exemplo, ao executar ab para o apache). Eu pensei que seria um problema vindo da minha lógica de programação e algoritmo, no entanto, eu bati minha cabeça na parede por horas e não conseguia pensar em um erro que eu poderia ter feito, tentei várias maneiras diferentes de calculá-lo , ainda obtendo os mesmos resultados.

Então eu abri e comecei a ler o arquivo de histórico que eu criei linha por linha depois de filtrar para mostrar apenas o processo que eu monitorei para ter esse uso de I / O (apache neste caso, desde que executei benchmarks em isto). E notei algo, que era o fato de que os números de gravações emitidas por eram muito menores do que a soma de todas as gravações em disco do apache DSK lines ' .

Não sei se entendi algo errado ou o que estou fazendo de errado. O arquivo de histórico é muito grande para mostrar, no entanto, posso fazer o upload para algo como pastebin, se necessário.

Minhas perguntas são, o que os números de gravações / leituras emitidas de PRD referem, não é o mesmo que o número de leituras / gravações de DSK ? no disco ? E se não, qual seria uma maneira de calcular o uso de I / O para um único processo usando o histórico do topo?

    
por Fanatique 03.08.2018 / 16:46

3 respostas

1

Primeiro de tudo, meu man atop diz:

The counters 'number of reads on disk' and 'number of writes on disk' are obsoleted anyhow.

no topo Versão: 2.3.0 - 2017/03/25 09:59:59

De man iostat :

A transfer is an I/O request to the device. Multiple logical requests can be combined into a I/O request to the device.

Acho que isso explica por que a soma do processo de E / S excede os valores de DSK .

O uso decentemente preciso de E / S de um único processo seria process_io / sum_of_all_process_io . Não é 100% preciso, pois não há nenhuma maneira (que eu saiba) de determinar exatamente como os pedidos lógicos são combinados.

    
por 11.08.2018 / 22:06
0

Eu posso estar absolutamente errado, mas isso pode estar relacionado ao fato do buffer de E / S do sistema de arquivos, bem como ao tamanho do setor da unidade e ao tamanho do E / S. Por exemplo, se um tamanho de bloco de disco for de 512 bytes e o aplicativo estiver gravando 1024 bytes, então 1 IO de aplicativo será igual a 2 IOs na unidade. Imagine agora que, entre o aplicativo e a unidade, há pelo menos um sistema de arquivos e um gerenciador de volume, e ambos podem ter seus próprios tamanhos de blocos.

    
por 09.08.2018 / 16:04
0

Acho que seus resultados estão corretos e são resultado de E / S de disco eficiente. Em um sistema write-back (stackoverflow) , o número de gravações emitidas deve ser menor que as gravações reais em disco, enquanto em um sistema write-through a soma da quantidade de gravações emitidas deve ser igual ao número de gravações em disco porque não há combinação de escrita (wikipedia) .

Em Webopedia :

Write-back caching yields somewhat better performance than write-through caching because it reduces the number of write operations to main memory. With this performance improvement comes a slight risk that data may be lost if the system crashes.

Por causa disso, o rótulo DSK do topo é um valor mais representativo para o IO do disco real que ocorre nos sistemas de write-back.

Para o io por processo esta pergunta de falha do servidor pode ajudar.

Este tópico do fórum da Huawei tem uma boa descrição do write-through versus write-back , assumindo que é isso que está influenciando sua saída.

    
por 09.08.2018 / 21:01