특정 프로세스에 메모리가 할당되는 위치를 조사하고 싶습니다.
더 구체적으로 말하자면, 저는 두 개의 물리적 CPU가 있는 ccNUMA 시스템에서 OpenMP 병렬 포트란 바이너리를 실행하고 있습니다. 제가 우려하는 점은 이 프로그램이 변수를 초기화할 때 첫 번째 터치 규칙을 위반한다는 것입니다. 이로 인해 메모리가 불균형한 방식으로 할당됩니다. 즉, 대부분의 메모리가 두 CPU 간에 균형을 맞추는 대신 단 하나의 물리적 CPU 주소 공간에 할당됩니다. 결과적으로 메모리 대역폭이 제한된 애플리케이션의 확장성이 저하됩니다.
아쉽게도 소스코드에 접근할 수는 없습니다. 따라서 메모리 할당을 살펴보는 것이 좋은 방법인 것 같습니다. 다른 아이디어도 환영합니다.
의견을 기반으로 편집: OpenSUSE Leap 42.3, 커널 버전 4.4.103-36-default
답변1
Linux에서는 다음 명령을 사용하여 프로세스의 가상 주소 공간을 쿼리할 수 있습니다.공정(5)&매핑(1).
따라서 프로세스 1234의 경우 cat /proc/1234/maps
,,를 실행합니다 pmap 1234
.cat /proc/1234/numa_maps
당신은 또한 볼 수 있습니다누마(7),numa_maps(5),메모리 정책 설정(2),디지털화(8).