[번역] How is Virtual Memory Translated to Physical Memory?

출처 : https://blogs.vmware.com/vsphere/2020/03/how-is-virtual-memory-translated-to-physical-memory.html

메모리는 가장 중요한 호스트 자원 중 하나이다. 워크로드가 글로벌 시스템 메모리(Global System Memory)에 액세스하기 위한 경우 가상 메모리 주소가 물리적 주소에 매핑되었는지 확인해야 한다. 이러한 변환을 가능한 효율적으로 수행하기 위해 함께 작용하는 몇 가지 구성 요소가 있다. 이 블로그 게시물은 가상 메모리 주소가 번역되는 방법에 대한 기본 사항을 다룰 것이다.

메모리 변환

물리적 주소 공간은 ESXi 호스트 내의 메모리 모듈인 시스템 RAM으로 글로벌 시스템 메모리라고도 한다. 가상 메모리에 대해 이야기할 때, 우리는 운영 체제나 vSphere ESXi와 같은 하이퍼바이저에 의해 제어되는 메모리에 대해 이야기하고 있다. 워크로드가 메모리의 데이터에 액세스할 때마다 시스템은 가상 주소와 일치하는 물리적 메모리 주소를 조회해야 한다. 이것은 우리가 메모리 변환 또는 매핑이라고 부르는 것이다.

가상 메모리 주소를 물리적 메모리 주소에 매핑하기 위해 페이지 테이블을 사용한다. 페이지 테이블은 수많은 페이지 테이블 항목(PTE : Page Table Entires)으로 구성된다.

virt-to-phy-basics.png

PTE의 한 메모리 페이지는 서로 다른 크기의 'words'로 구성된 데이터 구조를 포함하고 있다. 워드의 각 유형에는 여러 바이트의 데이터(Word(16비트/2바이트), DWORD(32비트/4바이트), QWORD(64비트/8바이트))가 포함되어 있다. 가능한 모든 단어 또는 가상 메모리 페이지에 대한 메모리 변환을 물리적 메모리 주소로 실행하는 것은 잠재적으로 수십억 PTE의 것일 수 있기 때문에 매우 효율적이지 않다. 우리는 시스템의 글로벌 메모리에서 물리적인 주소 공간을 찾기 위해 PTE의 것이 필요하기 때문에 그들 주변에는 방법이 없다.

메모리 변환을 더 효율적으로 만들기 위해, 우리는 페이지 테이블을 사용하여 하나의 매핑으로 메모리 주소의 청크를 그룹화한다. 4바이트의 DWORD 항목의 예를 보면, 페이지 테이블은 한 페이지 항목에서 4바이트의 데이터 대신 4킬로바이트를 차지한다. 예를 들어, 페이지 테이블을 사용하여 가상 주소 공간을 0에서 4095까지 변환할 수 있으며, 물리적 주소 공간 4096에서 8191까지에서 찾을 수 있다고 말할 수 있다. 이제 우리는 더 이상 모든 PTE를 따로 매핑할 필요가 없으며, 페이지 테이블을 사용하여 훨씬 더 효율적이다.

mmu-tlb-esxi.png

MMU(Memory Management Unit)는 TLB(Translation Lookaside Buffer)와 함께 작동하여 가상 메모리 주소를 물리적 메모리 계층에 매핑한다. 페이지 테이블은 항상 물리적 메모리에 존재하며, 물리적 메모리에서 메모리 페이지를 직접 검색해야 하는 것은 대기 시간을 도입하기 때문에 MMU에 있어 비용이 많이 드는 연습이 될 수 있다. 그것이 TLB가 작용하는 부분이다.

TLB 상세 정보

TLB는 물리적 메모리에 액세스하는 데 걸리는 시간을 줄이는 데 사용되는 MMU의 캐시 역할을 한다. TLB는 MMU의 일부분이다. CPU의 제조사와 모델에 따라 TLB의 미스(miss)를 피하고 가능한 낮은 메모리 지연 시간을 보장하기 위해 메모리 캐시와 같은 TLB가 하나 이상 있다.

본질적으로, TLB는 가상에서 물리적까지의 최근의 메모리 변환을 저장한다. 그것은 페이지 테이블을 위한 캐시다. 그것은 MMU의 일부분이기 때문에 TLB는 CPU 패키지 안에 위치한다. TLB가 페이지 테이블이 존재하는 메인 메모리보다 빠른 이유다. 일반적으로 TLB의 액세스 시간은 ~10ns로 메인 메모리 액세스 시간은 약 100ns이다.

이제 메모리 변환의 기본을 다루었으니, TLB의 몇 가지 예시 시나리오를 살펴보자.

TLB 히트(hit)

가상 메모리 주소가 입력되면, 물리적 주소로 변환해야 한다. 첫 번째 단계는 항상 가상 주소를 가상 페이지 번호와 페이지 오프셋으로 분해하는 것이다. 오프셋은 가상 주소의 마지막 비트로 구성된다. 오프셋 비트는 변환되어 물리적 메모리 주소로 전달되지 않는다. 오프셋에는 페이지 테이블의 모든 메모리 주소를 나타낼 수 있는 비트가 포함되어 있다.

따라서 오프셋은 물리적 메모리 계층에 직접 매핑되며 가상 페이지 번호는 TLB에 이미 있는 태그와 일치한다. MMU는 이제 글로벌 메모리를 조사할 필요 없이 어떤 물리적 메모리 페이지를 액세스해야 하는지 즉시 알고 있다.

tlb-example1c-hit.png

TLB 미스(miss)

TLB에서 가상 페이지 번호를 찾을 수 없는 경우(TLB 누락이라고도 함)는 어떻게 되는가? TLB는 어떤 물리적 페이지 번호가 사용되는지 시스템의 글로벌 메모리를 참조할 필요가 있다. 물리적 메모리에 도달하는 것은 TLB 적중 시 대비 대기 시간이 더 길다는 것을 의미한다. TLB가 가득 차서 TLB가 누락된 경우, 가장 최근의 TLB 항목이 플러시되고, 그 대신 새로운 항목이 배치된다. 다음 예에서는 TLB에서 가상 페이지 번호를 찾을 수 없으며, TLB는 페이지 번호를 얻기 위해 메모리를 조사할 필요가 있다.

tlb-example2c-miss.png

  1. 가상 주소는 가상 페이지 번호와 페이지 오프셋에서 분리된다.
  2. 페이지 오프셋은 번역되지 않아 통과된다.
  3. 가상 페이지 번호는 TLB에서 조회되며, 해당 번호가 있는 태그를 찾는다. 이 예에서 TLB는 아직 유효한 항목을 가지고 있지 않다.
  4. TLB는 3페이지(가상 페이지 번호에서 파생된 태그 때문에)를 찾기 위해 메모리에 손을 뻗는다. 3페이지의 값은 0x0006으로 메모리에서 검색된다.
  5. 메모리 변환이 완료되고 항목이 TLB에 캐시된다.

스토리지(storage)에서 검색

TLB 미스는 이상적이지 않지만 최악의 시나리오는 메모리가 아닌 저장 미디어(플래시 또는 디스크)에 상주하는 데이터다. 캐시나 글로벌 메모리의 데이터를 검색하기 위해 나노초를 사용하는 경우, 사용된 미디어에 따라 스토리지 미디어에서 데이터를 가져오는 작업은 밀리초 또는 초로 빠르게 실행될 것이다.

tlb-example3c-storage.png

  1. 가상 주소는 가상 페이지 번호와 페이지 오프셋에서 분리된다.
  2. 페이지 오프셋은 번역되지 않아 통과된다.
  3. 가상 페이지 번호는 TLB에서 조회되며, 해당 번호가 있는 태그를 찾는다. 이 예에서 TLB는 아직 유효한 항목을 가지고 있지 않다.
  4. TLB는 0페이지 번호를 찾기 위해 메모리에 손을 뻗는다(가상 페이지 번호에서 파생된 태그 때문에). 페이지 번호 0은 메모리에서 검색되지만 데이터가 메모리에 있는 것이 아니라 저장소에 있는 것을 발견한다. 메모리에 없는 데이터의 메모리 페이지를 변환할 수 없기 때문에 페이지 장애가 트리거된다. 우리는 저장소의 데이터를 기다릴 필요가 있다.

마치면서

우리는 기억 번역이 어떻게 작동하는지 기본적인 것만 다루었다. 우리가 논의한 정보는 메모리 액세스와 관련하여 가상 시스템과 ESXi 호스트의 후드에서 어떤 일이 일어나고 있는지에 대한 기본적인 이해를 제공할 것이다.

MMU 및 TLB가 메모리 액세스를 어떻게 처리하는지 이해하려면 vMotion과 같은 메모리 중심의 vSphere 기능에 필수적이다. vMotion은 PTE와 TLB와 같은 메모리 구성을 사용한다. vMotion 작업 중에 PTE는 읽기 전용 액세스로 설정되고 TLB는 플러시된다. 향후 블로그 게시물에서 자세히 알아보십시오. 채널을 고정하십시오!