Monitorando o acesso ao arquivo no Linux

3

Existe uma maneira de coletar estatísticas sobre blocos sendo acessados em um disco?

Eu tenho um cenário em que uma tarefa é intensiva em memória e E / S e preciso encontrar um bom equilíbrio quanto à quantidade de RAM disponível que posso atribuir ao processo e quanto devo deixar para o sistema. construindo seu cache de E / S para o dispositivo de bloco que está sendo usado.

Eu suspeito que a maior parte da E / S que está acontecendo atualmente é acessar um pequeno subconjunto de arquivos (ou partes de arquivos grandes) e esse desempenho pode ser otimizado aumentando a RAM disponível para o buffer de E / S.

Idealmente, eu seria capaz de criar algo como um "mapa de calor" que mostre quais partes dos arquivos são acessadas a maior parte do tempo.

A configuração atualmente é baseada no CentOS 5 na instância m1.large do AWS / EC2. As configurações de disco são dispositivos de blocos efêmeros em uma configuração RAID0 (LVM) ou, alternativamente, um único EBS (500 GB)

Atualização: Originalmente, essa questão estava falando sobre blocos de disco, o que era enganoso, já que estou realmente interessado nos blocos lógicos que estão sendo acessados e não me importo onde eles estão nos dispositivos físicos. Eu mudei isso para deixar claro que são partes de arquivos nos quais estou interessado. Peço desculpas pela confusão.

    
por VoidPointer 09.11.2012 / 17:11

4 respostas

3

Não tenho certeza de que você entende completamente como os caches de buffer modernos funcionam - você tem metade disso você quer limitar a quantidade de RAM que seu processo usa (então há "o suficiente" disponível para o cache de buffer, mas você está pensando no caminho errado.

O que você está pedindo não é realmente útil para ajustar o cache de buffer - pode ser útil se você tem um único disco contíguo (ou um array que se apresenta como um e se comporta como um) e está procurando otimizar layout de disco, mas isso está entrando no Deep Filesystem Magic. Você pode ler os artigos de McKusick sobre design de sistemas de arquivos ( ou passar 42 minutos e assistir a este excelente vídeo ) para obter um conceito básico de como o sistema de arquivos já tenta otimizar isso para você - Sistemas de arquivos são muito bons em obter o layout do disco certo.

Em termos de otimização do cache de buffer, você deve examinar o número de ocorrências de cache versus falhas de cache (e especificamente o que está causando as falhas). A localização física no disco não importa - o que importa é quantas vezes você precisa acessar o disco para obter o que deseja, e se o seu cache é grande o suficiente para não estar constantemente em movimento (essencialmente negando a eficiência do cache). / p>

O ajuste é um pouco mais de tentativa e erro do que qualquer outra coisa - uma regra geral extremamente ineficiente é deixar 2x o tamanho do seu maior arquivo / bloco de dados para o cache de buffer, mas você quase sempre É melhor começar a usar o aplicativo ou o cache e ajustar-se ao desempenho de pico.

    
por 09.11.2012 / 18:00
1

Se você está falando sobre um sistema de classe de servidor, existem outras variáveis a serem consideradas. Eu entendo o que você está pedindo, mas em sistemas modernos, essas coisas foram abstraídas por vários níveis de cache e as otimizações de controladores RAID inteligentes.

Para atividade de polarização de gravação, grande parte da carga de trabalho de gravação aleatória deve ser gravada no cache não volátil com bateria ou flash (para fornecer reconhecimento rápido das gravações), reunida e liberada sequencialmente em seus discos. Se você não está empregando o uso de algo assim, você está deixando o desempenho na mesa.

Para atividade de leitura, o SO faz um trabalho razoável de cachine. Ter cache de controlador adicional ajuda. E além disso, você pode empregar alguns truques para ajudar a controlar seu subsistema de memória virtual. (veja: Virtual Memory Toucher )

Veja também: Limpar / limpar a memória cache

Mas, novamente, precisamos de detalhes sobre sua configuração para ajudar a entender como ajudar.

    
por 09.11.2012 / 18:25
0

Use iotop . Isso é exatamente o que você precisa.

    
por 09.11.2012 / 17:13
0

Vou colocar meu voto na DSTAT ( link ). Dê uma olhada em alguns dos switches como top-io, top-latency, top-mem, etc. Ele não vai fazer um mapa de calor para você ou quais partes do disco estão sendo acessadas, mas pode ajudar você a apontar a direção certa

    
por 09.11.2012 / 18:09