메모리 - 스왑 , Huge Page

Do_It·2023년 12월 5일

스왑

리눅스에서 메모리 부족시 실행되는 메모리 구제 방식

어떻게?

스왑은 저장 장치의 일부를 일시적으로 메모리 대신 사용함
시스템의 물리 메모리가 부족한 상태가 되어 물리 메모를 획들할 때에, 기존에 사용하던 물리 메모리의 일부분을 저장 장치에 저장 하여 빈 공간을 만들어냄
이 때 메몰의 내용이 저장 장치에 저장된 영역을 스왑 영역이라고 함

스왑 아웃 : 물리 메모리에 빈 공간이 없을 때, 커널은 사용 중인 물리 메모리의 일부 내용을 스왑 영역에 임시 보관하는 것

스왑 인 : 스왑 영역에 임시 보관했던 데이터를 물리 메모리에 되돌리는 것

스와핑 : 스왑 아웃 + 스왑 인

어느 영역이 스왑 아웃 될 것인가? 는 앞으로 한동안 사용되지. 않을 듯한 커널이 특정한 알고리즘을 통해 결정됨

스왑의 동작 방식은 시스템이 사용할 수 있는 메모리의 양이 '실제로 탑재된 메모리 + 스왑 영역' 처럼 보이게 합니다. 그러나 여기에는 커다란 맹점이 존재하는데, 저장 장치에 접근하는 속도가 메모리에 접근하는 속도에 비해 너무나도 느리다는 점이다.

스레싱 : 시스템의 메모리 부족이 일시적인 현상이 아니라 만성적으로 부족하다면 메모리에 접근할 때마다 스왑 인, 스왑 아웃이 반복되는 상태가 되는 것

Huge Page

프로세스의 가상 메모리 사용 사이즈가 증가하면 이에 따라 프로세스의 페이지 테이블에 사용되는 물리 메모리양도 증가

이 경우 메모리 사용량의 증가뿐만 아니라 fork() 시스템 콜도 늦어짐.
왜냐하면 fork() 시스템 콜은 Copy on Write로 최소한의 메모리만 복사하고 있지만, 페이지 테이블은 부모의 프로세스와 같은 사이즈로 새로 만들기 때문, 이러한 문제를 해결하기 위해 리눅스에는 Huge Page 기능이 있음

Huge Page는 이름 그대로 커다란 사이즈의 페이지임.
이것을 사용함으로써 프로세스의 페이지 테이블에 필요한 메모리의 양을 줄일 수 있음

Huge Page를 사용하면 가상 메모리를 많이 사용하는 프로세스에 대해서 페이지 테이블에 필요한 메모리의 양이 줄어든다는 것

profile
오늘의 노력이 내일의 성장으로 이어지고 있음을

0개의 댓글