카테고리 없음

리눅스 페이징 - 가상메모리

흰색남자 2023. 6. 6. 23:23

[ 목적 ]

오라클 데이터베이스의 SGA에 대해 더 깊게 이해하기 위해 작성한다.

[ 목차 ]

 

 

[ 가상 메모리 & 페이지 ]

시스템 물리 메모리보다 큰 메모리 공간을 사용(프로세스에 제공)하기 위한 기술. 프로세스가 필요로 하는 모든 데이터와 명령을 메인 메모리와 동시에 로드하는 대신, 필요한 부분만 메모리에 올려두고 필요하지 않는 부분은 HDD, SSD에 저장하는 방식.

메인 메모리를 일정한 크기의 블록으로 분할하는데 이걸 페이지라고 하고, 페이지의 크기는 리눅스에서 4kb로 설정되어 있음. meminfo 파일에 메모리 정보를 살펴 볼 수 있고 huge page, 페이지 개수 등 다양한 정보 확인이 가능함.

huge 페이지는 일반적인 크기보다 훨씬 큰 크기로 설정된 페이지를 의미하고 4MB 1GB와 같이 큰 페이지 크기를 사용할 수 있음. 대규모 메모리 접근이 필요한 경우 성능 향상이 가능함. huge 페이지를 사용하면 페이지 테이블 크기가 작아짐.

페이지는 메모리 단편화 등의 문제를 해결하기 위해서 가상 메모리와 물리 메모리를 연속된 블록으로 나눈 것을 의미함.

[ 페이지 테이블 ]

페이지 테이블은 swap한 메모리와 물리 메모리 간 매핑 정보를 가지고 있는 데이터 구조임. 각 프로세스는 자체 페이지 테이블을 갖고 있으며, 페이지 테이블은 프로세스의 가장 주소를 해당 페이지의 물리 주소로 변환하는데 사용함. 페이지 테이블은 계층적인 구조를 가지고 있고 가상 주소의 일부 비트를 사용하여 페이지 테이블의 인덱스로 사용됨. 가상 메모리를 관리하기 위해 필요한 주요 데이터 구조.

물리 메모리 크기가 수 GB ~ 수 TB 이상 커지면서 페이지 테이블 관리를 위한 리소스가 커짐.

[ Huge 페이지 ]

메모리의 크기가 커질 수록 메모리 페이지 관리를 위한 오버헤드가 증가함.
Huge 페이지를 사용하게 되면 상대적으로 적은 수의 관리 정보를 가지고 메모리 페이지를 관리할 수 있고, 페이지 테이블 크기가 줄어서 좀 더 많은 물리 메모리를 확보할 수 있음. 또한 메모리 스왑이 되지 않음.