추가 정보

추가 정보

나는 만약 내가 그렇게 한다면cat /proc/meminfo

나는 다음을 얻습니다


HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      662864 kB
DirectMap2M:     7643136 kB
DirectMap1G:     1048576 kB

1G byte 페이지가 할당된 것을 볼 수 있다. 그런데 ksysguard를 살펴보니 메모리가 125M/213M(rss) 이상인 프로세스는 발견되지 않았습니다.

어떤 프로세스가 이를 사용하고 있는지 어떻게 알 수 있나요?


추가 정보

#> cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

답변1

DirectMap항목은 메모리를 반영하지 않습니다.사용, 이는 물리적 메모리의 페이지 맵 또는 페이지 항목을 반영합니다. DirectMap1GPUD 수준 페이지 테이블 매핑을 사용하여 매핑된 메모리 양을 계산합니다.

부팅 중에 매핑이 설정됩니다.arch/x86/mm/init_64.c그리고 phys_pud_init및 를 찾으세요 phys_p4d_init. /proc/meminfo개별 항목에 표시된 값의 합계는 DirectMap시스템의 실제 RAM 총량과 유사해야 하며, 공유는 변경되더라도 총계는 절대 변경되지 않습니다(예: PUD 수준 맵은 다음과 같이 분할될 수 있음). PMD 수준 맵은 에 표시된 값을 줄이고 DirectMap1G)에 표시된 값을 증가시킵니다 DirectMap2M.

답변2

나는 이것이 질문에 완전히 대답한다고 생각하지 않지만 부분적으로 대답합니다.

조사하는 동안 실수로 재부팅했습니다. 재부팅 후 DirectMap1G5GB가 아닌 것을 발견했습니다 . 나는 영구 구성으로 아무 것도 하지 않았다는 것을 깨닫고 난 후에. 나는 세 가지 페이지 크기의 합이 대략 내 RAM의 8GB 크기와 같다는 것을 알았습니다. 올바르게 추가했는데 8G9(8.9G)입니다. [아마도 다른 메모리 매핑 항목: vRAM 및 기타 하드웨어, MMU는 RAM만을 위한 것이 아닙니다]. 그런 다음 큰 프로세스를 시작하고 다시 측정했는데 총계는 여전히 약 8G9였습니다(약간 움직였습니다). 다른 프로세스를 열고, 측정하고, 다른 프로세스를 열면 항상 8G9가 됩니다.

답변3

DirectMap은 커널 공간과 관련된 측정항목입니다. 사용자 공간에서 사용할 수 있는 거대한 페이지처럼 생각하는 것 같습니다.

나는 인용한다:

DirectMap은 x86 전용이며 메모리 사용량보다는 TLB 로드(변환 참조 버퍼)를 표시합니다. 이는 4KB 페이지, 2MB/4MB 페이지 및 1GB 페이지(지원 및 사용되는 경우)로 매핑된 페이지 수를 계산합니다.

하드웨어 손상의 의미, /proc/mem의 directmap 필드

관련 정보