Linux에서 vmstat 명령 및/또는 /proc/vmstat에 의해 보고되는 페이지 크기는 얼마입니까?

Linux에서 vmstat 명령 및/또는 /proc/vmstat에 의해 보고되는 페이지 크기는 얼마입니까?

StackExchange 및 다른 곳에서 많은 사람들이 언급했듯이 Linux의 일반적인 커널/mmu 페이지 크기는 4KiB입니다. 내 OS/아키텍처(RHEL 6.6, Intel Xeon E5-2690)에서 이것이 사실임을 확인했습니다.

이제 vmstat -s명령은 부팅 시 0부터 시작하는 카운터인 "페이지 인된 페이지" 및 "페이지 아웃된 페이지"를 보고합니다. 나는 특정 순간에 이 값이 pgpginpgpgout항목에 대해 발견된 값과 정확히 동일하다는 것을 확인했습니다./proc/vmstat(vmstat 명령이 에서 가져오나요 /proc/vmstat?) 다른 명령은 특히 특정 간격 동안 초당 페이지 인/아웃된 키비바이트를 보고 합니다 sar -B.pgpgin/spgpgout/s

pgpgin/s최근 테스트에서 sar의 값 pgpgout/s도 지정된 간격 동안 vmstat 값에서 계산된 속도와 정확히 일치한다는 것을 확인했습니다 . 이는 vmstat가 1KiB 크기의 페이지에 대한 값을 보고한다는 결론을 내립니다. 따라서 pgpgin/out값은/proc/vmstat부팅 이후 페이지 인/아웃된 KiB 수입니다.

내 질문은 다음과 같습니다

  1. 이것이 타당한 결론인가, 그리고
  2. 그렇다면 vmstat 및 기타 기능이 OS 및 아키텍처의 "공통 통화"인 4KiB 페이지 대신 1KiB 페이지로 보고하는 이유는 무엇입니까? 특히 vmstat는 " pages paged in/out"가 아니라 " KiBs paged in/out"라고 말하고 있습니다. 이것은 혼란스럽다.

답변1

/proc/vmstat이 값을 업데이트하는 것으로 나타나는 함수 의 카운터와 관련 submit_bio하여 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은 매크로입니다Linux/include/linux/bio.h

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

이것은 숫자가 섹터 크기(512) 바이트로 계산된다는 것을 암시하는 것 같습니다. 이것이 바이트 수를 9만큼 오른쪽으로 이동하면 결국 얻게 되는 값이라는 점을 감안할 때.

어쨌든 이것은 커널 2.6.27 - 4.0.x 사이의 유사한 설정인 것으로 보입니다.

관련 정보