답변 중 하나RAM이 충분하면 스왑 공간이 필요합니까?cat /proc/buddyinfo
측정된 메모리 조각화 와 스왑 사용 여부 사이에 어떤 관계가 있는지 궁금합니다 . 좀 더 구체적으로 말하면, 스왑을 활용하면 메모리 조각화를 줄일 수 있는지 알고 싶습니다. 평소에는 내 시스템에서 스왑이 작동하면 다음과 같은 결과가 나타납니다.
tvbox@tvbox-G31M-ES2L:~$ cat /proc/buddyinfo
Node 0, zone DMA 3 3 4 14 16 6 2 0 0 1 0
Node 0, zone Normal 1564 1052 462 356 240 109 33 21 6 1 0
Node 0, zone HighMem 43 1972 839 285 183 109 98 34 16 0 0
tvbox@tvbox-G31M-ES2L:~$ free
total used free shared buffers cached
Mem: 2053888 1821904 231984 171376 299908 812940
-/+ buffers/cache: 709056 1344832
Swap: 0 0 0
참고: 시스템 가동 시간은 18시간을 초과하지 않습니다.
더 많이 사용되는 시스템에는 다음이 있습니다.
me@me-zippy:~$ cat /proc/buddyinfo
Node 0, zone DMA 149 106 70 26 15 5 4 0 0 2 0
Node 0, zone Normal 2455 3527 4651 1421 367 157 61 19 14 3 0
Node 0, zone HighMem 7 43 75 266 166 162 91 43 27 0 0
me@me-zippy:~$ free -h
total used free shared buffers cached
Mem: 7.4G 7.0G 351M 281M 116M 6.0G
-/+ buffers/cache: 967M 6.4G
Swap: 0B 0B 0B
me@me-zippy:~$ uptime
12:01:49 up 3 days, 3:20, 2 users, load average: 0.52, 0.23, 0.17
이러한 시스템 중 어느 것도 스왑이 활성화되어 있지 않다는 것을 알 수 있습니다.
답변1
스와핑을 사용하면 물리적 페이지를 이동할 수 있습니다. 즉, 한 목적으로 사용된 페이지의 내용을 교체한 다음 다른 목적으로 사용할 수 있다는 의미입니다.
다양한 가상 메모리 관리 시스템에서는 애플리케이션에 관한 한 물리적 메모리 조각화와 같은 것이 없습니다. 애플리케이션에 의해 할당된 각 페이지는 실제 메모리의 어느 위치에나 위치할 수 있으며, 가상 메모리의 연속된 두 페이지는 실제 메모리에서 특정 근접성을 가질 필요가 없습니다.
메모리 조각화는 물리적 메모리 위치가 중요한 모든 상황 등 다양한 상황에서 문제가 됩니다. 여기에는 다음이 포함됩니다.
- 반가상화, 여기서 가상 머신은 한 페이지보다 더 대략적인 세부 수준으로 누가 어떤 물리적 페이지를 소유하는지 결정합니다.
- 비슷하게,무리여러 노드가 동일한 RAM 풀을 공유합니다.
- 주변 장치에서 사용하는 메모리에는 일반적으로 대규모 연속 버퍼가 필요합니다.
- 예를 들어 최적화큰 페이지.
"복잡한" 시나리오가 없으면 물리적 메모리 조각화로 인해 연속 메모리 풀이 필요한 새 장치를 연결할 때 문제가 발생할 수 있습니다. (커널은 이를 위해 이러한 풀을 예약하지만 드라이버가 갑자기 많은 양의 메모리를 생성하는 경우 이를 확장해야 할 수 있습니다.) 필요하다). 장치 사용량이 일정한 경우 물리적 조각화는 중요하지 않습니다. 특히 이로 인해 애플리케이션 실행 속도가 느려지거나 공간이 부족해지지 않는 경우에는 더욱 그렇습니다.
물리적 주소 공간의 단편화로 인해 사용 가능한 목록을 표시하기 위해 커널에서 더 많은 메모리가 사용될 수 있습니다. 나는 이것이 Linux의 경우라고 생각하지 않지만 메모리 관리 전문가와는 거리가 멀습니다.
요약하자면, 애플리케이션의 일부를 교체하도록 허용한다고 해서 애플리케이션이 더 많은 메모리를 할당하게 되는 것은 아니지만 특정 하드웨어 드라이버가 필요한 메모리를 할당하게 됩니다.
스왑을 추가해도 애플리케이션의 가상 메모리 공간에는 영향이 없습니다. 결국 이것이 교환의 핵심입니다. 이는 애플리케이션에 투명합니다.
그러나 머신에 스왑을 추가하면 애플리케이션의 가상 메모리 공간 내 조각화에 간접적인 영향을 미칠 수 있습니다. 시스템에 가상 메모리가 부족하면 애플리케이션은 보유한 메모리를 사용해야 합니다. 응용 프로그램이 운영 체제에서 할당된 메모리의 많은 부분을 사용하는 경우 시간이 지남에 따라 여기저기서 작은 청크가 해제되므로 해당 공간 내에서 조각화가 발생합니다. 애플리케이션에 더 많은 가상 메모리가 있는 경우(일부는 교체됨) 메모리 관리자에게 더 많은 작업 공간이 제공되므로 별도의 2kB 블록이 필요할 때 애플리케이션에 메모리가 부족해질 위험이 줄어듭니다. 사용됩니다. 4kB 객체.