조립식 컴퓨터를 맞출 때 많이 들어본 말이다. 과연 RAM이 128GB, 4096GB...가 되어도 여전히 좋을까? 그렇다면 어떤 부분에서 좋은 것이고 메모리가 엄청나게 많을 때의 한계는 무엇일까?
우리나라 최대 컴퓨터 커뮤니티인 퀘이사 존의 의견을 들어보자.


많은 글을 찾아보았지만 대다수의 사람들이 32G 이상으로는 큰 차이가 없다고 한다. 대부분의 질문들이 게임용 컴퓨터 견적에 초점이 맞추어저 있어서 그런지 최신 게임들을 안정적으로 돌릴 수 있는 사양으로 대답을 한 것이라고 추측해본다. 즉, 스팀 AAA 게임을 안정적으로 즐기고 싶다면 32G 이상은 사치라는 것이 주류 의견이라고 해석할 수 있다.

계속 서칭하다가 흥미로운 답변을 찾았다. 어떤 유저가 올린 자신의 커밋 메모리 사용량 설정 값에 대한 질문의 답변들이다.
커밋 메모리란 프로세스가 실제로 사용하기 위해 할당한 메모리를 의미한다. 프로세스들이 할당한 모든 보조 기억 장치에 스왑된 가상 페이지와 실제로 RAM에 올라가 있는 메모리의 합을 말한다. 따라서 첫번째 유저는 커밋 메모리(프로세스가 사용할 메모리) 가 부족할 경우 문제가 발생할 수 있다고 말하는 것이다.
다음으로 가상 메모리를 자동으로 늘린다는 부분이다. 간단히 설명하자면 OS는 프로그램의 모든 것을 RAM에 올려 실행하지 않고 필요한 부분만 로드하고 사용빈도 낮은 페이지를 선택하여 계속해서 교체해 가며 실행해간다. 이때 교체는 주로 페이지 단위로 이루어지고 교체가 일어나는 곳은 보조 기억 장치의 스왑 영역이다.
따라서 첫번째 유저의 주장은 요구 페이징이 일어나며 부족해지는 스왑 영역은 동적으로 늘어나므로 평소에는 괜찮은데 이 속도가 매우 빨라져 커밋 메모리의 증가량보다 빠른 경우 문제가 발생할 수 있다는 주장이다.
그렇다면 컴퓨터의 용도나 주로 사용하는 프로그램은 고려하지 않는다고 가정할 때 RAM이 크면 커밋 메모리의 용량이 커지고 페이지 폴트가 줄어드므로 스왑 영역을 자주 사용하지 않아도 되니 무조건 큰 램이 좋은 것일까?
다음으로 내가 가진 지식도 합쳐 정말 RAM이 클수록 좋은지 생각해보자.
다다익램을 알아보기 위해서는 직접 RAM을 사용하는 CPU가 RAM을 어떻게 구조화하고 사용하는지 생각해볼 필요가 있다. 멀티 코어 시스템에서는 NUMA라는 시스템을 사용한다.
NUMA란 특정 코어에서 빠르게 접근할 수 있는 로컬 메모리와 그렇지 않은 원격 메모리를 구분하여 사용하는 시스템이다. 따라서 나는 빠르게 접근할 수 있는 로컬 메모리가 RAM을 늘렸을 때 덩달아 커지면서 많은 성능 향상이 일어나리라 기대했었다.
하지만 그렇지 않았다. NUMA는 CPU에 종속적인 시스템이므로 CPU 구현에 달려있다. 즉, CPU의 아키텍처나 설계에 따라 메모리 노드의 수나 메모리 할당 방식이 달라질 수 있다.
메모리 용량이 크더라도, CPU와 연결된 메모리 노드의 수나 크기가 제한될 수 있는 것이므로 많은 양의 로컬 메모리를 사용하지 못한다.
결국 로컬 메모리의 양은 변하지 않으므로 RAM의 크기가 커짐에 따라 성능향상은 있겠지만 그 향상 폭은 작아질 것이라고 예측할 수 있다.
시스템에서는 페이징을 사용하여 가상 메모리로 메모리를 관리한다. 물리 메모리와 가상 메모리를 매핑하기 위해 페이지 테이블을 사용하는데 메모리의 크기가 늘어나면 페이지 테이블의 크기도 늘어날 것이다. 이 점을 극복하기 위해 최신 OS에는 여러가지 페이징 테이블 구조를 채택하여 사용한다.
가장 대표적으로 계층적 페이징이 있다.
하나의 페이지 테이블을 여러 개의 페이지 테이블로 나누는 것이다. 나눈 단계별로 N단계 페지징이라고 부른다. 즉, 첫번째 페이지 테이블에서 두번째 페이지 테이블을 페이징하면 다시 두번째 페이지 테이블에서 세번째 페이지 테이블을 페이징하는 분할 정복같은 느낌으로 구현한다고 생각하면 된다.
또 원래 페이지 테이블에서는 논리주소에 페이지 번호를 하나만 담았다면 N단계 페이징에서는 N단계의 페이지 번호를 담는다.
리눅스에서는 4단계 페이지 테이블을 사용한다.
메모리가 커져 늘어난 페이지 테이블은 다시 엄청난 용량의 메모리로 커버가 될 것이라는 생각이든다. 그렇다면 메모리가 엄청나게 많다면 페이지 테이블의 사이즈를 고려하지 않아도 되는 것인가?
페이지 테이블의 접근은 MMU라는 전용 하드웨어 유닛이 담당한다. MMU는 TLB라는 페이지 테이블 전용 캐시를 사용하므로 히트가 발생하면 매우 빠르게 주소 변환이 이루어진다. 그러나 메모리가 커지면 TLB미스도 많이 날 것이고 그에 따라 접근 속도도 많이 느려질 것이다.
TLB는 RAM과 관련이 없는 CPU에 존재하는 하드웨어이므로 RAM이 커진다고 같이 커지는 일은 없다. 따라서 RAM의 크기가 커짐에 따라 성능 향상은 있겠지만 그 향상 폭은 작아질 것이라고 예측할 수 있다.
메모리가 어떻게 장착되는지 생각해보면 메인보드의 슬롯에 각각의 메모리 모듈을 장착하는 방식이다. 만약 현재 기술을 기준으로 엄청나게 큰 용량의 램을 사용한다고 하면 현재 메인보드 슬롯에는 한계가 있으므로 많은 양의 모듈로 쪼개어 사용하게 될 것이다.
그러나 이렇게 되면 사용하는 모듈의 양이 많아진다. 즉, 많은 양의 모듈을 관리하고 유지하기 위한 전기가 많이 발생하는 것이다.
추가로 이 전력들이 발생하는 발열을 잡기 위해 더 좋은 쿨링 시스템을 필요로 할 것이고 이것들은 다시 더 많은 양의 전기나 더 좋은 인프라를 요구하게 될 것이다. 즉, 더 많은 램은 더 좋은 메인보드, 쿨러, 더 많은 돈을 요구한다.
물론 우리의 주제는 단순히 RAM이 많으면 좋나? 이므로 이 전력들을 관리하기 위한 돈은 신경쓰지 않는 것이 맞으나 한번 생각해 보면 좋을 듯 싶어서 기록해본다.
RAM이 커지면 페이지 폴트나 스왑 연산이 줄어드므로 전반적인 성능이 향상될거라는 점은 맞다고 생각한다. 그러나 이 성능 향상의 폭은 위에서 말한 부분들 때문에 점점 줄어들 것이고 무한히 확장하다보면 언젠가는 한계가 오지 않을까하는 개인적인 추측을 해본다.
출처
https://quasarzone.com/bbs/qf_cmr/views/2486820?amp%2525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525253Bcommid=2001731&page=730
https://quasarzone.com/bbs/qf_cmr/views/1853134
https://quasarzone.com/bbs/qf_cmr/views/2394971