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
.
내 질문은 다음과 같습니다
- 무슨 뜻인가요
swap cache
? - 무슨 뜻인가요
SwapCached
? - 그들은 동일합니까? 그렇지 않다면 그들 사이의 차이점은 무엇입니까?
답변1
두 개의 명령과 두 개의 파일이 있습니다.
]# free -V; vmstat -V
free from procps-ng 3.3.15
vmstat from procps-ng 3.3.15
프록 파일: meminfo
및vmstat
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의 내용)에서는 값이 어떻게 함께 수집되는지 보여줍니다. i
sysinfo 구조입니다. 캐시됨 및 사용 가능 여부는 이전에 계산됩니다. 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/meminfo
Cached
Slab
- 이는 대략 파일 캐시, 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
스왑을 다른 "캐시된" 파일인 것처럼 처리합니다. 이 용어는 다른 카운터/도구와 완전히 호환되지 않습니다.