큰 메모리 영역에 광범위하게 간격을 둔 임의 액세스를 수행 할 때 성능에서 가장 큰 차이가 발생합니다. "큰"은 작은 영역의 모든 작은 페이지 항목으로 매핑 할 수있는 범위보다 훨씬 큰 의미입니다. TLB (일반적으로 현대 프로세서에서 여러 레벨을 가짐).
더 복잡한 작업을 수행하기 위해 4KB 페이지의 TLB 항목 수는 2MB 페이지의 항목 수보다 많지만 프로세서에 따라 많이 다릅니다. 레벨 2 TLB에서 얼마나 많은 "대형 페이지"항목을 사용할 수 있는지에 많은 차이가 있습니다.예를 들어
, AMD의 옵테론 가족 10H 개정 D ("이스탄불") 시스템, CPUID 보고서에 :
- L1 DTLB : 4kB의 페이지 : 48 개 항목; 2MB 페이지 : 48 개 항목; 1GB 페이지 : 48 개 항목
- L2 TLB : 4KB 페이지 : 512 항목; 2MB 페이지 : 128 항목; 기가 바이트 페이지 : 16 개 항목
동안 인텔 제온 56xx ("웨스트 미어 (Westmere)") 시스템에서, CPUID 보고서 :
- L1 DTLB : 4kB의 페이지 : 64 개 항목; 2MB 페이지 : 32 항목
- L2 TLB : 4kB 페이지 : 512 항목; 2 메가 바이트 페이지 : 없음
모두 웨스트 미어 시스템이 32 개 2메가바이트 TLB 항목을 사용하여 64MB의 매핑 할 수 있습니다 및 AMD 시스템 사용 352메가바이트를 매핑 할 수 있지만, 레벨 TLB 미스이 고통을하기 전에 작은 페이지를 사용 2메가바이트 (512 * 킬로바이트)를 매핑 할 수 있습니다 L1 및 L2 TLB에있는 176 개의 2MB TLB 항목 두 시스템 모두 2MB보다 크고 64MB보다 작은 메모리 범위에서 무작위로 액세스 할 수 있도록 대형 페이지를 사용하여 속도가 크게 향상됩니다. AMD 시스템은 훨씬 더 큰 메모리 범위를 위해 대형 페이지를 사용하여 우수한 성능을 계속 나타내야합니다.
이러한 모든 경우에 피하려고하는 것은 x86_64 계층 구조 주소 변환의 네 가지 수준을 모두 통과하는 최악의 경우입니다 (참고 1).
주소 변환 캐시 메커니즘 중 누구도 일 (주 2 없음) 경우, 필요 4KB의 페이지에 매핑 된 데이터를로드 메모리에
- 5 여행, 메모리
- 4 여행에 매핑 된 데이터를로드 할 수 2MB 페이지 및
- 1GB 페이지에 매핑 된 데이터를로드하기 위해 메모리를 3 번 트립합니다.
각각의 경우에 메모리로의 마지막 이동은 요청 된 데이터를 얻는 것이고, 다른 이동은 페이지 변환 정보의 다양한 부분을 얻는 것이 요구된다. 내가 본 가장 좋은 설명은 AMD의의 5.3 절에 위의 그림은 정말 최악의를 구분하지 않습니다 "AMD64 아키텍처 프로그래머의 설명서 제 2 권 : 시스템 프로그래밍"(출판 24,593) http://support.amd.com/us/Embedded_TechDocs/24593.pdf
주 1. 가상 컴퓨터에서 실행하면이 숫자가 더 나 빠지게됩니다. 페이지 테이블의 다양한 레벨을 유지하는 메모리가 디스크로 스왑되도록하는 환경에서 실행하면 성능이 으로 악화됩니다.
참고 2 : 불행히도 모든 현대 프로세서에는 페이지 변환 계층의 상위 수준에 대한 추가 캐시가 있기 때문에이 수준의 수준을 알면 충분하지 않습니다. 내가 알 수있는 한, 이것들은 공개적으로 잘 기록되어 있지 않습니다.
하드웨어 프리 페칭은 4k 페이지 경계를 넘지 않지만 직선으로 볼 수있는 것은 페이지 테이블 액세스가 매우 예측 가능하기 때문에 TLB에 놓친 페이지 방문이 발생할 가능성이있는 페이지 방문입니다. 모두 L1에 있습니다 (이 페이지 항목은 실제로 프리 페치를 통해 가져온 것일 수 있음). – BeeOnRope