대부분의 필드는 이해할 수 있지만 "페이지 인"과 "페이지 인"의 차이점을 설명할 수 있는 사람이 있습니까? 스왑은 전체 프로세스가 하드 드라이브의 스왑 공간으로 이동하는 것이고 페이징은 특정 페이지가 스왑 공간으로 이동되는 것이라고 확신합니다. 그렇다면 "페이지 인"은 주 메모리로 이동된 프로세스 부분에 속한 페이지이고 "페이지 인"은 주 메모리로 이동된 전체 프로세스에 속한 페이지를 의미합니까? 누군가 여기서 설명할 수 있나요? 다른 분야에 대해서도 더 많은 정보가 있으면 좋을 것 같습니다. 설명서를 읽었지만 이 명령과 특정 옵션에 대한 유용한 정보를 찾지 못했습니다. 명령 출력의 예:
vmstat -s
131072 K total memory
125700 K used memory
59836 K active memory
49268 K inactive memory
5372 K free memory
0 K buffer memory
101984 K swap cache
0 K total swap
0 K used swap
0 K free swap
18594 non-nice user cpu ticks
0 nice user cpu ticks
17990 system cpu ticks
108464145 idle cpu ticks
1121 IO-wait cpu ticks
0 IRQ cpu ticks
0 softirq cpu ticks
0 stolen cpu ticks
123672 pages paged in
486324 pages paged out
0 pages swapped in
0 pages swapped out
0 interrupts
7439516 CPU context switches
1457280256 boot time
131927 forks
값을 비교하고 더 잘 이해할 수 있도록 관련 파일의 출력은 다음과 같습니다. 이전 파일과 동시에 촬영되었습니다.
cat /proc/meminfo
MemTotal: 131072 kB
MemFree: 5404 kB
Cached: 101984 kB
Buffers: 0 kB
Active: 59820 kB
Inactive: 49268 kB
Active(anon): 11532 kB
Inactive(anon): 16920 kB
Active(file): 48288 kB
Inactive(file): 32348 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 28452 kB
Shmem: 21348 kB
Slab: 16544 kB
SReclaimable: 10580 kB
SUnreclaim: 5964 kB
답변1
프로그램을 실행하려면 프로그램을 메모리에 로드해야 한다는 점을 고려하세요. 특정 양의 사용 가능한 주소 공간이 있으며 프로그램에는 더 많은 주소 공간이 필요합니다. 사용 가능한 주소 공간을 페이지로 나눕니다. 이를 가상 페이지라고 합니다. 모든 페이지를 로드할 만큼 물리적 메모리가 충분하지 않다고 가정하고 이러한 가상 페이지를 물리적 메모리에 매핑해 보세요. 필요한 페이지는 즉시 로드하고 지금 당장 필요하지 않은 페이지는 유지합니다. 그러나 때가 되면 사용하지 않는 페이지를 언로드하여 프로그램을 실행하는 데 필요한 페이지를 로드하게 됩니다. 이것이 페이징 알고리즘이 수행하는 작업입니다. "페이지 인" 및 "페이지 아웃"이 표시됩니다.
반면에 스왑 인 또는 아웃은 프로그램을 실행하는 데 필요한 전체 메모리 공간을 처리합니다. 프로세스가 일부 리소스를 사용할 수 있을 때까지 기다리는 상태에 있다고 가정합니다. 조건이 충족될 때까지 메모리에 로드할 필요가 없습니다. 동시에 메모리 실행을 기다리는 다른 프로세스도 있습니다. 때가 되면 전체 프로세스가 교체되었다가 다시 교체됩니다.
대량의 물리적 메모리를 갖춘 최신 시스템을 고려하면 대부분의 시스템에서 스와핑은 과거의 일입니다.
물론 알고리즘(페이징 및/또는 스와핑)도 그렇게 간단하지 않습니다. 이것은 만 피트의 개요일 뿐입니다. 웹의 다른 곳에서 이에 대한 자세한 내용을 읽을 수 있습니다.
답변2
/proc/vmstat(리눅스 2.6.0부터)
이 파일은 다양한 가상 메모리 통계를 표시합니다. 파일의 각 줄에는 공백으로 구분된 이름/값 쌍이 포함됩니다. ...자세한 내용은 커널 소스 코드에서 확인할 수 있습니다. 암호. )
물론 비판은 저렴 man 5 proc
하지만 일부 지침/개요는 환영받을 것입니다.
mm/vmstat.c:
#ifdef CONFIG_VM_EVENT_COUNTERS
/* enum vm_event_item counters */
"pgpgin",
"pgpgout",
"pswpin",
"pswpout",
...
(이 섹션 이전에는 /* Node-based counters */
일부 다른 설정(zone, Numa, writeback)과 함께 나열되었습니다.)
이것들은 모두이벤트 카운터, 특정 순간에 메모리에 있는 페이지 수가 아닌
/proc/vmstat
내가 본 것의 값이 포함된 세 가지 주요 이벤트는 다음과 같습니다 (형식화된 숫자 포함).
pgpgin 2'023'720
pgpgout 32'622'399
pswpin 0
pswpout 0
...
pgalloc_normal 753'397'448
은행 계좌와는 달리 다음과 같이 말할 수 없습니다.
money_now = money_in - money_out
MM은 매우 복잡하기 때문입니다.
나는 스왑이 전체 프로세스를 스왑 공간으로 옮기는 것을 의미한다고 확신합니다.
출처를 확인하기 전에 Wikipedia도 확인해야 합니다. 이게 원래 의도야교환반세기 전.
Petr는 SuperUser에 관한 2016년 기사에서 다음과 같이 썼습니다.
간단히 말해서:
pgpgin, pgpgout- 디스크에서 읽고 메모리에 쓴 페이지 수, 일반적으로 이 숫자에 너무 신경 쓸 필요가 없습니다.
psw핀, pswpout- Prometheus와 같은 일부 모니터링을 통해 매번 이 숫자를 추적하고 싶을 수 있습니다. 스파이크가 있으면 시스템이 많이 교체되고 문제가 있음을 의미합니다.
( vmstat 1 5
또한 모니터링: 초당 5초, 합계 값 si
( so
페이지 합계가 아닌 바이트 차이))
베드로:너무 오래된 질문이라 지금까지는 정답이 없습니다.