[x86-64] x86-64 시스템에 48 비트 가상 주소 공간 만있는 이유는 무엇입니까?

책에서 나는 다음을 읽었습니다.

32 비트 프로세서에는 2 ^ 32 개의 가능한 주소가있는 반면 현재 64 비트 프로세서에는 48 비트 주소 공간이 있습니다.

내 예상은 64 비트 프로세서라면 주소 공간도 2 ^ 64 여야한다는 것입니다.

그래서이 제한의 이유가 무엇인지 궁금합니다.



답변

그게 필요한 전부이기 때문입니다. 48 비트는 256 테라 바이트의 주소 공간을 제공합니다. 그것은 많은 것입니다. 곧 그 이상이 필요한 시스템을 보지 못할 것입니다.

그래서 CPU 제조업체는 지름길을 택했습니다. 전체 64 비트 주소 공간을 허용하는 명령어 세트를 사용하지만 현재 CPU는 하위 48 비트 만 사용합니다. 대안은 수년 동안 필요하지 않았던 더 큰 주소 공간을 처리하는 데 트랜지스터를 낭비하는 것이 었습니다.

따라서 48 비트 제한에 가까워지면 전체 주소 공간을 처리하는 CPU를 해제하는 문제 일 뿐이지 만 명령 집합을 변경할 필요가 없으며 호환성이 깨지지 않습니다.


답변

OP의 질문은 물리적 주소 공간이 아닌 가상 주소 공간 에 관한 것이기 때문에 버스 크기와 물리적 메모리에 관한 모든 대답은 약간 잘못되었습니다 . 예를 들어, 일부 386에 대한 유사한 제한은 항상 전체 32 비트 인 가상 주소 공간이 아니라 사용할 수있는 물리적 메모리의 제한이었습니다. 원칙적으로 몇 MB의 실제 메모리만으로도 전체 64 비트의 가상 주소 공간을 사용할 수 있습니다. 물론 스와핑을 통해 또는 대부분의 주소에서 동일한 페이지를 매핑하려는 특수 작업 (예 : 특정 희소 데이터 작업)을 수행 할 수 있습니다.

진짜 대답은 AMD가 단지 값이 싸고 아무도 관심을 갖지 않기를 바랬다는 것입니다.하지만 인용 할 참고 문헌이 없습니다.


답변

wikipedia 기사 의 제한 사항 섹션을 읽으십시오 .

PC는 4 페타 바이트의 메모리를 포함 할 수 없지만 (현재 메모리 칩의 크기로 인해) AMD는 대규모 서버, 공유 메모리 클러스터 및 가까운 미래에 이에 접근 할 수있는 물리적 주소 공간의 기타 사용을 구상했습니다. 비트 물리적 주소는 64 비트 물리적 주소 구현 비용을 발생시키지 않으면 서 확장을위한 충분한 공간을 제공합니다.

즉,이 시점에서 전체 64 비트 주소 지정을 구현할 필요가 없습니다. 이러한 주소 공간을 완전히 활용할 수있는 시스템을 구축 할 수 없기 때문에 현재 (그리고 미래의) 시스템에 실용적인 것을 선택합니다.


답변

내부 네이티브 레지스터 / 동작 폭은 외부 주소 버스 폭에 반영 할 필요 가 없습니다 .

1MB의 RAM에만 액세스하면되는 64 비트 프로세서가 있다고 가정 해 보겠습니다. 20 비트 주소 버스 만 있으면됩니다. 사용하지 않을 모든 추가 핀의 비용과 하드웨어 복잡성에 신경 쓰는 이유는 무엇입니까?

Motorola 68000은 이렇습니다. 내부적으로 32 비트이지만 23 비트 주소 버스 (및 16 비트 데이터 버스)가 있습니다. CPU는 16 메가 바이트의 RAM에 액세스 할 수 있으며 기본 데이터 유형 (32 비트)을로드하려면 두 번의 메모리 액세스 (각각 16 비트의 데이터 포함)가 필요했습니다.


답변

CPU 주소 경로에 트랜지스터를 저장하는 것보다 더 심각한 이유가 있습니다. 주소 공간의 크기를 늘리면 페이지 크기를 늘리거나 페이지 테이블의 크기를 늘리거나 더 깊은 페이지 테이블 구조를 가져야합니다. 더 많은 수준의 번역 테이블입니다). 이 모든 것들이 TLB 미스 비용을 증가시켜 성능을 저하시킵니다.


답변

내 관점에서 이것은 페이지 크기의 결과입니다. 각 페이지에는 최대 4096/8 = 512 페이지 테이블 항목이 포함됩니다. 그리고 2 ^ 9 = 512. 따라서 9 * 4 + 12 = 48입니다.


답변

원래 질문에 대한 답 : 48 비트 이상의 PA를 추가 할 필요가 없었습니다.

서버에는 최대 메모리가 필요하므로 더 자세히 살펴 보겠습니다.

1) 가장 큰 (일반적으로 사용되는) 서버 구성은 8 소켓 시스템입니다. 8S 시스템은 단일 노드를 형성하기 위해 고속 코 히어 런트 인터커넥트 (또는 간단히 고속 “버스”)로 연결된 8 개의 서버 CPU에 불과합니다. 더 큰 클러스터가 있지만 그 사이에는 거의 없으며 여기서 일반적으로 사용되는 구성에 대해 이야기하고 있습니다. 실제 사용에서 2 소켓 시스템은 가장 일반적으로 사용되는 서버 중 하나이며 8S는 일반적으로 매우 하이 엔드로 간주됩니다.

2) 서버에서 사용하는 주요 메모리 유형은 바이트 주소 지정이 가능한 일반 DRAM 메모리 (예 : DDR3 / DDR4 메모리), 메모리 매핑 된 IO-MMIO (예 : 애드 인 카드에서 사용하는 메모리) 및 구성에 사용되는 구성 공간입니다. 시스템에있는 장치. 첫 번째 유형의 메모리는 일반적으로 가장 큰 메모리 (따라서 가장 많은 수의 주소 비트가 필요함)입니다. 일부 고급 서버는 시스템의 실제 구성에 따라 많은 양의 MMIO를 사용합니다.

3) 각 서버 CPU가 각 슬롯에 16 개의 DDR4 DIMM을 수용 할 수 있다고 가정합니다. 256GB의 최대 DDR4 DIMM 크기. (서버 버전에 따라 소켓 당 가능한이 DIMM 수는 실제로 16 개 미만의 DIMM이지만 예제를 위해 계속 읽으십시오).

따라서 각 소켓은 이론적으로 16 * 256GB = 4096GB = 4TB를 가질 수 있습니다. 예제 8S 시스템의 경우 DRAM 크기는 최대 4 * 8 = 32TB가 될 수 있습니다. 이는이 DRAM 공간을 처리하는 데 필요한 최대 비트 수가 45 개 (= log2 32TB / log2 2)임을 의미합니다.

다른 유형의 메모리 (MMIO, MMCFG 등)에 대해서는 자세히 설명하지 않겠습니다.하지만 여기서 요점은 현재 사용 가능한 가장 큰 유형의 DDR4 DIMM (256GB)을 사용하는 8 소켓 시스템에서 가장 “요구되는”유형의 메모리입니다. DIMM)은 45 비트 만 사용합니다.

48 비트 (예 : WS16)를 지원하는 OS의 경우 (48-45 =) 3 비트가 남아 있습니다. 즉, 32TB의 DRAM에만 하위 45 비트를 사용하더라도 총 256TB의 주소 지정 가능 공간에 대해 MMIO / MMCFG에 사용할 수있는 2 ^ 3 배의 주소 지정 가능 메모리가 있습니다.

따라서 요약하면 다음과 같습니다. 1) 48 비트의 물리적 주소는 많은 양의 DDR4와 MMIO 공간을 필요로하는 많은 다른 IO 장치로 “완전히로드 된”오늘날의 가장 큰 시스템을 지원하기에 충분한 비트입니다. 정확히 256TB입니다.

이 256TB 주소 공간 (= 48 비트의 물리적 주소)은 주소 맵의 일부가 아니기 때문에 SATA 드라이브와 같은 디스크 드라이브를 포함하지 않으며, 바이트 주소 지정이 가능하고 OS에 노출되는 메모리 만 포함합니다.

2) CPU 하드웨어는 서버 세대에 따라 46, 48 또는> 48 비트를 구현하도록 선택할 수 있습니다. 그러나 또 다른 중요한 요소는 OS가 인식하는 비트 수입니다. 현재 WS16은 48 비트 물리적 주소 (= 256TB)를 지원합니다.

이것이 사용자에게 의미하는 바는 48 비트 이상의 주소 지정을 지원할 수있는 초대형 서버 CPU를 가지고 있더라도 48 비트 PA 만 지원하는 OS를 실행하면 256TB 만 활용할 수 있다는 것입니다. .

3) 대체로 더 많은 수의 주소 비트 (= 더 많은 메모리 용량)를 활용하는 데는 두 가지 주요 요소가 있습니다.

a) CPU HW는 몇 비트를 지원합니까? (이는 Intel CPU의 CPUID 명령에 의해 결정될 수 있습니다).

b) 실행중인 OS 버전 및 PA가 인식 / 지원하는 비트 수.

(a, b)의 최소값은 궁극적으로 시스템에서 활용할 수있는 주소 지정 가능 공간의 양을 결정합니다.

다른 답변을 자세히 살펴 보지 않고이 답변을 작성했습니다. 또한 MMIO, MMCFG의 뉘앙스 및 주소 맵 구성 전체에 대해 자세히 설명하지 않았습니다. 그러나 이것이 도움이되기를 바랍니다.

감사합니다. Anand K Enamandram, 서버 플랫폼 설계자 Intel Corporation