저는 RHCSA를 공부하고 있는데 일부 교육 자료에서 본 문장이 혼란스럽습니다.
실제 최대 RAM은 없으며 이론적으로 RHEL 6에서는 128TB RAM을 실행할 수 있습니다. 그러나 이것은 단지 이론일 뿐이다. RHEL 6에서 Red Hat이 지원하는 최대 RAM은 32비트 시스템에서 16GB, 64비트 시스템에서 2TB입니다.
128TB의 이론적 한계가 어디서 나오는지 설명해 줄 수 있나요? RHEL 6이 다른 최대 제한을 명확하게 정의하는 경우 작성자가 이론적 제한이 존재한다는 것을 어떻게 알았는지 혼란스럽습니다. 이것이 단지 64비트 아키텍처의 이론적 한계일까요? 아니면 여기에 또 다른 이유가 있는 걸까요?
답변1
커널 문서에서,Documentation/x86/x86_64/mm.txt
:
Virtual memory map with 4 level page tables:
0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm
2 47 바이트 = 128TiB
답변2
짧은 답변
각 Linux 프로세스는 최대 128TB를 처리할 수 있습니다.가상메모리. 그러나 이는 Linux 커널의 기능을 벗어납니다.물리적. 따라서 이 한계는 이론적입니다.
예측 가능한 "최악의 경우" 사용 시나리오를 기반으로 임의로 선택되었을 수도 있습니다.
자세한 답변
실제로는 하드웨어가 허용하는 것보다 더 많은 RAM을 사용할 수 없습니다(48비트 =256TB 흔한요즘), Linux 커널이 처리할 수 있는 물리적 메모리 양에 의해 제한됩니다.
예를 들어 인텔에서는x86 64비트Linux는 다음보다 오래 사용할 수 없습니다.64TB물리적 메모리(버전 이후2.6.30, 하지만그것은 16TB직전). RHEL 6은 다음을 사용합니다.2.6.32핵심.
64비트에서S390 아키텍처, 이것동일한 제한 사항적용 가능합니다 (왜냐하면2.6.28). 단, 32비트를 사용하는 경우에는 제한이 있습니다.4GB, 그러나 사용이상한트릭 콜PAE, 당신은64GB(일반적으로 x86에서 사용됨)
다른 64비트 아키텍처는 덜 제한적이라고 가정합니다.
레드햇 보기제한 테이블자세한 내용은 (감사합니다.호이겐스).
답변3
가상 메모리와 물리적 휘발성 메모리를 혼동해서는 안 됩니다. 전자는 CPU 아키텍처에만 적용되며 휘발성 및 비휘발성 메모리 모두에 매핑됩니다. RAM이라고도 불리는 후자는 커널 관점에서 CPU 아키텍처와 독립적이어야 합니다.
오늘날의 AMD 및 Intel x86_64 구현오직48비트 주소 지정이 가능한 가상 메모리를 지원합니다. 이는 커널이 프로세스 VM당 2^48 = 256TiB를 처리할 수 있음을 의미합니다.
x86_64 아키텍처의 Linux 커널은 주소 지정 가능한 VM 공간을 사용자 공간용 128TiB와 커널 공간용 128TiB의 두 부분으로 나눕니다. 따라서 이론적으로 프로세스는 총 128TiB의 가상 메모리를 처리할 수 있습니다.
커널이 처리할 수 있는 최대 휘발성 물리적 메모리는 다른 측면인데 그 정보는 모르겠습니다.
RHCSA 작성자 성명서 소개
"실제 최대 RAM은 없습니다. 이론적으로 RHEL 6에서는 128TB RAM을 실행할 수 있습니다."라는 설명의 작성자는 잘못되었거나 잘못 이해된 용어를 사용하고 있습니다.다음은 RHEL 3, 4, 5, 6의 기능을 요약한 Red Hat 웹사이트의 표입니다.. 그들은 명시적으로 "프로세스당 최대 x86_64 가상 주소 공간 [...] 128TB [RHEL 6의 경우]"라고 명시합니다.
페이지에는 RHEL 6이 최대 2TB/64TB RAM(물리적 휘발성 메모리)을 지원한다고 명시되어 있습니다. 이는 최대 2TB RAM에 대해 인증되었으며 이론적으로는 최대 64TB까지 가능하다는 것을 의미한다고 생각합니다.이와 관련하여 SLES가 훨씬 더 명확합니다..
답변4
단지 이론적인 것에 불과한 또 다른 이유는 구현 경험이 부족하기 때문입니다.
프로그래머는 종종 하드웨어 기능보다 훨씬 앞서 변수의 크기를 조정하여 커널에 위험한 "리프 앤 재시작" 프로그래밍이 필요하지 않도록 합니다. 이 기능을 갖춘 하드웨어는 10년 이상 사용할 수 없기 때문입니다.
그러나 가변 크기가 유일한 제한은 아닙니다. 데이터 구조와 해당 알고리즘에는 고유한 제한 사항이 있습니다. 128TB의 각 4KB 페이지를 설명하는 데이터 구조의 선형 순회를 상상해 보세요. 몇 가지 분명한 대답이 있습니다. 4KB 페이지를 사용하지 말고, 선형 데이터 구조를 사용하지 말고, 해당 데이터 구조에 너무 자주 액세스하지 말고, 로드를 가능한 한 하드웨어에 오프로드하세요. 그러나 우리가 직면하기 전까지는 알 수 없는 더 미묘한 데이터 구조 + 알고리즘 제한이 있습니다.
우리는 내일 마술처럼 128TB PC를 발견하고 그 PC에서 Linux를 부팅하려고 하면 성능이 끔찍할 것이고 어쩌면 너무 나빠서 부팅되지 않을 수도 있다는 것을 알고 있습니다. 그러나 알고리즘을 수정하는 것은 사소한 작업이며 데이터 구조를 수정하는 것은 일부 작업이지만 여전히 널리 이해되는 변수의 크기를 수정하는 것보다 훨씬 적습니다. 따라서 메모리 크기가 증가함에 따라 이러한 특성의 변화를 볼 수 있습니다.