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

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

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

Agora, entre outras coisas, o vmstat -scomando informa sobre "páginas paginadas" e "páginas paginadas", que são contadores que começam em 0 no momento da inicialização. Confirmei que, em qualquer momento, esses valores são exatamente iguais aos valores encontrados para as entradas pgpgine empgpgout/proc/vmstat(o comando vmstat os obtém /proc/vmstat?). Outros comandos e, em particular, sar -Brelatórios pgpgin/se pgpgout/scomo Kibibytes paginados de entrada/saída por segundo durante um intervalo específico.

Em testes recentes, vi que pgpgin/sos pgpgout/svalores de sar também correspondem exatamente a uma taxa calculada a partir dos valores 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 pgpgin/outvalores de/proc/vmstatsão o número de KiB paginados de entrada/saída 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 outros recursos relatam páginas de 1 KiB em vez de páginas de 4 KiB que são a "moeda comum" do sistema operacional e da arquitetura? Em particular, vmstat está dizendo " pages paged in/out", não " KiBs paged in/out". Isso é confuso.

Responder1

Em relação aos contadores /proc/vmstata função que aparece para atualizar esses valores está submit_bioem 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 emLinux/include/linux/bio.h

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

Isto parece sugerir-me que os números são contados em tamanhos de setor (512) bytes. Dado que esse é o valor que você obteria se mudasse a contagem de bytes para nove.

De qualquer forma, esta parece ser uma configuração semelhante entre os kernels 2.6.27 - 4.0.x.

informação relacionada