vmstat의 "스왑 캐시" 대 /proc/meminfo의 "SwapCached"

vmstat의 "스왑 캐시" 대 /proc/meminfo의 "SwapCached"

Fedora 24에서 메모리 정보를 확인하기 위해 두 가지 명령을 실행했지만 스왑 캐시 크기와 관련하여 두 가지 다른 결과를 얻었습니다.

첫 번째 명령은 다음과 같습니다.

[root@localhost ~]# vmstat -s
      4029004 K total memory
      1043700 K used memory
       742144 K active memory
       321916 K inactive memory
      2372500 K free memory
        63628 K buffer memory
       549176 K swap cache
      4063228 K total swap
            0 K used swap
      4063228 K free swap
      ......

두 번째 명령은 다음과 같습니다.

[root@localhost ~]# cat /proc/meminfo
MemTotal:        4029004 kB
MemFree:         2369712 kB
MemAvailable:    2690460 kB
Buffers:           63720 kB
Cached:           437460 kB
SwapCached:            0 kB
......

참고: vmstat -s말하고 549176 K swap cache, cat /proc/meminfo말하세요 SwapCached: 0 kB.

내 질문은 다음과 같습니다

  1. 무슨 뜻인가요 swap cache?
  2. 무슨 뜻인가요 SwapCached?
  3. 그들은 동일합니까? 그렇지 않다면 그들 사이의 차이점은 무엇입니까?

답변1

두 개의 명령과 두 개의 파일이 있습니다.

]# free -V; vmstat -V
free    from procps-ng 3.3.15
vmstat  from procps-ng 3.3.15

프록 파일: meminfovmstat

Free 맨페이지에서는 meminfo 필드를 설명합니다. 이러한 필드 중 일부는 간접적으로 계산되기도 합니다.

vmstat/proc/vmstat 필드를 추가하기만 하면 됩니다.

/proc/vmstat보다 체계적이고 긴 구조를 가지고 있습니다. 신비한 네 줄이요페이지 캐시말하는

nr_anon_pages   212687
nr_mapped        70247
nr_file_pages   887005
nr_dirty            64

이제 이러한 문자열은 설명이 포함된 mmzone.h의 열거 목록에 비해 매우 약합니다.

NR_ANON_MAPPED, /* Mapped anonymous pages */
NR_FILE_MAPPED, /* pagecache pages mapped into pagetables. only modified from process context */
NR_FILE_PAGES,
NR_FILE_DIRTY,

(첫 번째는 ANON과 FILES, ACTIVE와 INACTIVE 4줄의 조합입니다)


따라서 두 번째 것은 명령이 아니라 명령이 의존하는 proc 파일의 내용입니다.


fs/proc/meminfo.c:

    cached = global_node_page_state(NR_FILE_PAGES) -
                    total_swapcache_pages() - i.bufferram;
    if (cached < 0)
            cached = 0;

이는 자체적인 "캐시" 카운터가 없으며 온전성 검사를 받아야 함을 나타냅니다. 기본적으로 몇 가지 수정 사항이 포함된 활성 또는 비활성의 모든 "파일 페이지"입니다.

i.buffers"버프/캐시" 필드에 다시 추가됩니다.free

이 섹션(/proc/meminfo의 내용)에서는 값이 어떻게 함께 수집되는지 보여줍니다. isysinfo 구조입니다. 캐시됨 및 사용 가능 여부는 이전에 계산됩니다. page[] 배열은 /proc/vmstat와 매우 유사하며 이 영역의 페이지 호출에 의해 Mlocked됩니다.

    show_val_kb(m, "MemTotal:       ", i.totalram);
    show_val_kb(m, "MemFree:        ", i.freeram);
    show_val_kb(m, "MemAvailable:   ", available);
    show_val_kb(m, "Buffers:        ", i.bufferram);
    show_val_kb(m, "Cached:         ", cached);
    show_val_kb(m, "SwapCached:     ", total_swapcache_pages());
    show_val_kb(m, "Active:         ", pages[LRU_ACTIVE_ANON] +
                                       pages[LRU_ACTIVE_FILE]);
    show_val_kb(m, "Inactive:       ", pages[LRU_INACTIVE_ANON] +
                                       pages[LRU_INACTIVE_FILE]);
    show_val_kb(m, "Active(anon):   ", pages[LRU_ACTIVE_ANON]);
    show_val_kb(m, "Inactive(anon): ", pages[LRU_INACTIVE_ANON]);
    show_val_kb(m, "Active(file):   ", pages[LRU_ACTIVE_FILE]);
    show_val_kb(m, "Inactive(file): ", pages[LRU_INACTIVE_FILE]);
    show_val_kb(m, "Unevictable:    ", pages[LRU_UNEVICTABLE]);
    show_val_kb(m, "Mlocked:        ", global_zone_page_state(NR_MLOCK));

캐시 교환무료 통화 캐시:

은닉처: 사용된 메모리페이지 캐싱 및 태블릿(/proc/meminfo에 캐시되어 SReclaimable 있음)

왜냐하면 (단순화, 위 참조):

cached = NR_FILE_PAGES - total_swapcache_pages()

...SwapCached와 흥미로운 관계가 있습니다. 이름이 덜 헷갈리면 좋을 것 같아요.


무엇캐시 교환디스크에 있는 파일의 경우캐시 교환전환 장치의 ANON 페이지에 적용됩니다. (이것이 말이 되기를 바랍니다/완전히 틀린 것은 아니기를 바랍니다)

답변2

vmstat필드에는 cache필드 합계의 합계가 있습니다.cat /proc/meminfoCachedSlab

  • 이는 대략 파일 캐시, inode 캐시, 디렉터리 캐시, 추가 개체 캐시를 의미합니다.
  • swap cache동일한 필드가 에서 호출됩니다 vmstat -s.
  • 이 지역에는아무것도 없다, zero, nil은 교환과 관련이 있습니다. 이것은 잘못된 이름이며 항상 발생합니다.
  • cat /proc/vmstat필드에서 이 값을 계산 하려면 다음을 사용하세요.

swap cache = nr_file_page + nr_slab_reclaimable + nr_slab_unreclaimable - meminfo_SwapCached

이러한 관점에서 볼 때 /proc/meminfo이 필드는 SwapCached디스크 캐시나 슬랩 캐시와 관련이 없습니다. 이는 클린 메모리 페이지에 남아 있는 스와핑 양입니다.

파일 캐싱과 스왑을 혼합하는 것으로 보이는 유일한 카운터는 nr_file_page스왑을 다른 "캐시된" 파일인 것처럼 처리합니다. 이 용어는 다른 카운터/도구와 완전히 호환되지 않습니다.

관련 정보