No Linux, qual é o tamanho das páginas relatadas pelo comando vmstat e / ou / proc / vmstat?

6

Como muitos afirmaram no StackExchange e em outros lugares, um tamanho de página kernel / mmu típico para o Linux é de 4 KiB. Eu verifiquei que este é o caso no meu sistema operacional / arquitetura (RHEL 6.6, Intel Xeon E5-2690).

Agora, entre outras coisas, o comando vmstat -s informa sobre "páginas paginadas em" e "páginas paginadas", que são contadores que começam a partir de 0 no momento da inicialização. Confirmei que, a qualquer momento, esses valores são exatamente iguais aos valores encontrados para as entradas pgpgin e pgpgout em /proc/vmstat (o comando vmstat obtém elas de /proc/vmstat ? ). Outros comandos, e em particular sar -B report pgpgin/s e pgpgout/s como Kibibytes paginados in / out por segundo durante um intervalo particular.

Em testes recentes, vi que os valores de pgpgin/s e pgpgout/s do sar também correspondem exatamente a uma taxa calculada a partir dos valores de vmstat para um intervalo especificado. Isso me leva a concluir que o vmstat está relatando valores para páginas de 1 KiB de tamanho. Assim, os valores pgpgin/out de /proc/vmstat são o número de KiBs paginados para dentro / fora desde a inicialização.

Minhas perguntas são:

  1. Esta é uma conclusão válida e
  2. Em caso afirmativo, por que o vmstat e outras instalações relatam em 1 página do KiB em vez das 4 páginas do KiB que são a "moeda comum" do sistema operacional e da arquitetura? Em particular, o vmstat está dizendo " pages paged in/out ", não " KiBs paged in/out ". Isso é confuso.
por Marc C 16.10.2015 / 11:25

1 resposta

3

Em relação aos contadores em /proc/vmstat , a função que parece atualizar esses valores é submit_bio in Linux/block/blk-core.c .

2067 blk_qc_t submit_bio(struct bio *bio)
2068 {
...
2079                         count = bio_sectors(bio);
2080 
2081                 if (op_is_write(bio_op(bio))) {
2082                         count_vm_events(PGPGOUT, count);
2083                 } else {
2084                         task_io_account_read(bio->bi_iter.bi_size);
2085                         count_vm_events(PGPGIN, count);
2086                 }
...
2100 }
2101 EXPORT_SYMBOL(submit_bio);

bio_sectors é uma macro em Linux/include/linux/bio.h

 64 #define bio_sectors(bio)        ((bio)->bi_iter.bi_size >> 9)

Isso parece sugerir que os números são contados em tamanhos de setor (512) bytes. Dado isso, qual seria o valor que você teria se mudasse uma contagem de bytes por nove.

Esta parece ser uma configuração similar entre os kernels 2.6.27 - 4.0.x de qualquer maneira.

    
por 06.12.2016 / 10:11