Utilitário Linux para registrar estatísticas de E / S (aleatório / sequencial, tamanhos de bloco, proporção de leitura / gravação)

4

Como parte do provisionamento do nosso novo servidor (consulte outro SF ) Eu gostaria de descobrir o seguinte:

  • proporção de leituras aleatórias para sequenciais & escreve
  • quantidade de dados lidos & escrito de cada vez (pref in histogram form)

Já posso descobrir nossas leituras / gravações em um nível de dados por operação e geral usando o iostat & dstat, mas eu gostaria de saber mais. Por exemplo, eu gostaria de saber que na maioria das vezes são leituras aleatórias de 16kb ou muitas leituras sequenciais de 64kb com gravações aleatórias.

Estamos (atualmente) em uma VM Ubuntu 10.04.

Existe algum utilitário que eu possa executar para registrar e apresentar essas informações para mim?

    
por Michael Pearson 10.09.2012 / 05:05

3 respostas

2

Eu gosto de usar o utilitário collectl para essa finalidade. Mencionei isso em outra resposta para alguém que esteja procurando por E / S específica saída de estatísticas para reprodução. Você deve ser capaz de adaptar a saída às suas necessidades específicas. Com o Ubuntu, isso deve estar disponível através dos repositórios normais. A ressalva é que você não verá as porcentagens que procura.

nmon também é uma boa ferramenta que pode fornecer a maioria das informações que você buscando em uma interface fácil.

Se você já está familiarizado com iostat , quais sinalizadores está usando no momento?

Se você é hardcore e está analisando um aplicativo específico, SystemTap pode ser uma opção, mas não tenho certeza se é o jogo certo. Pode ser mais trabalho do que o necessário.

É muito fácil obter essa informação do Solaris Dtrace (em sistemas ZFS - NexentaStor tela abaixo), mas tem que cavar um pouco no lado do Linux ... Então você poderia considerar Dtrace para Linux .

    
por 10.09.2012 / 07:32
4

Eu segui o caminho de este post , usando a ferramenta SystemTap .

Fisrt, instale o systemtap. Para Debian / Ubuntu:

apt-get install systemtap linux-image-$(uname -r)-dbg linux-headers-$(uname -r)

Crie o script systemtap, salve como blockio.stp :

global writes
global reads

probe ioblock.request {
    if(bio_rw_num(rw) == BIO_WRITE)
        writes[devname] <<< size
    if(bio_rw_num(rw) == BIO_READ)
        reads[devname] <<< size
}

probe end {
    printf("\n")
    # foreach([devname] in writes-) {
    #     printf("Device: %s\n", devname)
    #     println(@hist_log(writes[devname]))
    # }
    printf("WRITE\n")
    println(@hist_log(writes["sda1"]))
    printf("READ\n")
    println(@hist_log(reads["sda1"]))
}

Substitua sda1 pela sua unidade ou use o método foreach como em postagem original para mostrar as estatísticas de todas as unidades.

Inicie o monitoramento. Executar como root

stap -v blockio.stp

Pare com Ctrl + C quando quiser terminar o monitoramento. A saída será como

Pass 1: parsed user script and 95 library script(s) using 84064virt/25528res/2408shr/23916data kb, in 160usr/0sys/164real ms.
Pass 2: analyzed script: 3 probe(s), 21 function(s), 2 embed(s), 4 global(s) using 297648virt/205248res/86464shr/119268data kb, in 1750usr/60sys/1815real ms.
Pass 3: using cached /root/.systemtap/cache/ea/stap_ea33aaf95086fa562bb720d36fca7504_12821.c
Pass 4: using cached /root/.systemtap/cache/ea/stap_ea33aaf95086fa562bb720d36fca7504_12821.ko
Pass 5: starting run.
^C
WRITE
  value |-------------------------------------------------- count
      0 |@@@@@@@@@@@@@@@@@@@@@@@@                           191952
      1 |                                                        0
      2 |                                                        0
        ~
   1024 |                                                        0
   2048 |                                                        0
   4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  395272
   8192 |@@                                                  16273
  16384 |@                                                   12799
  32768 |                                                     4908
  65536 |                                                     4170
 131072 |                                                     2159
 262144 |                                                     6546
 524288 |                                                     4587
1048576 |                                                        0
2097152 |                                                        0

READ
  value |-------------------------------------------------- count
    128 |                                                       0
    256 |                                                       0
    512 |                                                       2
   1024 |                                                       0
   2048 |                                                       0
   4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  38229
   8192 |@@                                                  1550
  16384 |@@@                                                 2525
  32768 |@@                                                  1692
  65536 |@@                                                  1693
 131072 |@@@@@@@@@@@@@@@@@@                                 14455
 262144 |                                                     217
 524288 |                                                       0
1048576 |                                                       0

Pass 5: run completed in 140usr/720sys/3662349real ms.
    
por 10.09.2013 / 12:15
0

iopattern no OSX faz o% aleatório e o percentual sequencial, e iopending no OSX mostra um histograma, mas não sei ao certo de que. Esses são scripts do Dtrace, portanto, pode não ser muito útil para você.

    
por 10.09.2012 / 05:10

Tags