물리적 메모리 맵 알아보기

물리적 메모리 맵 알아보기

메모리 문제를 체계적으로 디버깅하고 싶습니다.

내 시스템 설정은 다음과 같습니다. 2개의 CPU(각각 다중 코어 포함)가 있는 (물리적) 서버가 있습니다. 각 CPU에는 해당 메모리 컨트롤러에 연결된 1TiB의 RAM(16개의 메모리 모듈, 각각 64GiB)이 있습니다. 따라서 시스템에는 총 2TiB RAM이 있습니다. 현재 저는 이 서버의 운영 체제로 Ubuntu 20.04를 사용하고 있습니다.

루트로 실행 하면 lsmem --output-all다음과 같은 결과가 나타납니다.

RANGE                                  SIZE  STATE REMOVABLE    BLOCK NODE  ZONES
0x0000000000000000-0x00000000ffffffff    4G online       yes      0-1    0   None
0x0000000100000000-0x000000fcffffffff 1008G online       yes    2-505    0 Normal
0x0000010000000000-0x000001007fffffff    2G online       yes      512    0   None
0x0000010080000000-0x000001ffffffffff 1022G online       yes 513-1023    1 Normal
0x0000020000000000-0x000002007fffffff    2G online       yes     1024    1   None

Memory block size:         2G
Total online memory:       2T
Total offline memory:      0B

보시다시피 커널은 메모리를 2GiB 청크로 "분할"하는데, 이는 이 정도 RAM 용량을 갖춘 시스템에서 예상되는 현상입니다. 그런데 1019개의 블록만 나열되어 있는 것이 이상합니다(1024개의 블록이어야 함). 노드 0(10GiB 메모리)의 5개 블록이 누락된 것 같습니다. (메모리가 2TiB인 다른 서버가 있는데 이 서버에서는 이 동작이 발생하지 않습니다.)

그 10GiB에 무슨 일이 일어났는지 알고 싶습니다. 이 메모리는 일부 장치에서 사용되지만 실행 중에는 lsmem --output-all실제로 cat /proc/iomem누락된 메모리 블록이 나열되지 않습니다. 마치 10GiB가 존재하지 않는 것과 같습니다.

내 질문은 다음과 같습니다.lsmem --output-all블록(나열된 대로 )에서 물리적 메모리(예: RAM 모듈)로의 매핑을 찾는 방법이 있습니까 ? 영향을 받은 RAM 모듈을 변경하고 해당 모듈에 물리적인 문제가 있는지 확인할 수 있기 때문에 이는 매우 도움이 될 것입니다.

난 이미 시도했어자세히 살펴보면 /sys/devices/system/edac/mc메모리 컨트롤러와 메모리 계층 구조를 찾았지만 메모리가 어떤 블록에 매핑되어 있는지는 찾지 못했습니다.

답변1

전체 메모리의 일부는 시스템 자체를 위해 예약되어 있습니다. 따라서 Linux에서 볼 수 있는 사용 가능한 메모리는 남은 메모리입니다. 이 5개 블록은 시스템 예약 메모리여야 합니다.

dmidecode --type memory설치된 실제 메모리의 양을 나열할 수 있습니다 .

sudo grep '^[^ ]' /proc/iomem시스템에 예약된 메모리 블록을 나열할 수 있습니다 .

원천

관련 정보