smem에서 보고한 "커널 동적 메모리"란 무엇입니까?

smem에서 보고한 "커널 동적 메모리"란 무엇입니까?

데스크탑 메모리 부족 문제를 진단하는 동안(추가 정보U&L에서) 캐시되지 않은 "커널 동적 메모리"가:

# smem -twk
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory          1.1G     369.3M     801.7M 
userspace memory               2.0G     133.3M       1.9G 
free memory                  734.1M     734.1M          0 
----------------------------------------------------------
                               3.9G       1.2G       2.7G

다른 두 시스템에서는 150MiB(데스크톱도 있지만 8GiB 또는 RAM 포함)와 29MiB인지 확인했습니다. 내 데스크탑의 20% 미만입니다.

무엇이 그렇게 큰지 어떻게 알 수 있나요?

참고: 소스를 확인해 보니 smem기본적으로 이렇습니다(memtotal - 사용자 공간 - 무료 - 캐시).

/proc/meminfo:

#고양이/proc/meminfo
총 메모리: 4051956kB
사용 가능한 메모리: 508276kB
버퍼: 35232kB
캐시: 651052KB
스왑 캐시: 121380kB
활성: 1358008kB
비활성: 1351596kB
활성(익명): 1184616kB
비활성(익명): 886904kB
활동(파일): 173392kB
비활성(파일): 464692kB
제거 불가능: 8616kB
잠김: 8616kB
총 교환량: 4051952kB
익일이자 없음: 3815780 kB
더티: 348kB
다시 쓰기: 0kB
익명 페이지: 1971164 kB
지도: 140108kB
메모리: 44656kB
태블릿: 176564kB
재활용 가능: 62080kB
S 회수 취소: 114484 kB
커널 스택: 3352kB
페이지 테이블: 43012kB
NFS_불안정: 0kB
바운스: 0kB
Tmp에 다시 쓰기: 0kB
커밋 제한: 6077928kB
커밋됨_AS: 3681164kB
총 Vmalloc: 34359738367kB
Vmalloc 사용량: 139780kB
VmallocChunk: 34359570976kB
하드웨어 손상: 0kB
AnonHuge페이지:448512 kB
HugePages_Total: 0
HugePages_Free:0
HugePages_Rsvd: 0
HugePages_Surp: 0
큰 페이지 크기: 2048kB
DirectMap4k: 2536128kB
DirectMap2M: 1656832kB

답변1

다른 글을 보니 zram을 사용하고 계시는 것 같네요. 그게 내 가정이다.

저는 zram을 설치하고 많은 메모리를 소비한 경험이 있으며 smem귀하와 동일한 결과를 얻습니다.smemzram그 수 와 상관없이, 값을 계산하는 데만 사용됩니다 /proc/meminfo. 코드를 보고 이해하려고 하면 zram RAM 점유가 궁극적으로 다음에서 계산된다는 것을 알 수 있습니다.캐시되지 않은커널 동적 메모리철사.

추가 조사

이 동작의 배후에는 zram이 있다는 직감에 따라 귀하의 컴퓨터와 비슷한 사양(4GB RAM 및 2GB zram 스왑, 스왑 파일 없음)으로 가상 머신을 설정했습니다.

중량급 애플리케이션을 가상 머신에 로드했는데 다음과 같은 상태가 표시되었습니다.

huygens@ubuntu:~$ smem -wt -K ~/vmlinuz-3.2.0-38-generic.unpacked -R 4096M
Area                           Used      Cache   Noncache 
firmware/hardware            130717          0     130717 
kernel image                  13951          0      13951 
kernel dynamic memory       1063520     922172     141348 
userspace memory            2534684     257136    2277548 
free memory                  451432     451432          0 
----------------------------------------------------------
                            4194304    1630740    2563564 
huygens@ubuntu:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3954       3528        426          0         79        858
-/+ buffers/cache:       2589       1365
Swap:         1977          0       1977

보시다시피 free858MB의 캐시 메모리가 보고되는데, 이는 smem캐시 커널 동적 메모리에서도 보고되는 것으로 보입니다.

그런 다음 Chromium 브라우저를 사용하여 시스템을 더욱 강조했습니다. 처음에는 83MB의 스왑 공간만 사용됩니다. 하지만 몇 개의 탭을 연 후 스왑이 거의 최대로 빠르게 전환되었고 OOM을 경험했습니다! zram위험한 측면이 있습니다. 잘못 구성하면(너무 크면) 투석기처럼 돌아올 수 있습니다.

당시 나는 다음과 같은 결과를 얻었습니다.

huygens@ubuntu:~$ smem -wt -K ~/vmlinuz-3.2.0-38-generic.unpacked -R 4096M
Area                           Used      Cache   Noncache 
firmware/hardware            130717          0     130717 
kernel image                  13951          0      13951 
kernel dynamic memory       1355344     124072    1231272 
userspace memory             961004      36456     924548 
free memory                 1733288    1733288          0 
----------------------------------------------------------
                            4194304    1893816    2300488 
huygens@ubuntu:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          3954       2256       1698          0          4        132
-/+ buffers/cache:       2118       1835
Swap:         1977       1750        227

커널 동적 메모리(캐시된 열과 캐시되지 않은 열)를 보면 거꾸로 된 것처럼 보입니까? 이는 첫 번째 경우 커널에 보고된 것과 같은 "캐시" 메모리가 있지만 계산 방법을 모르는 스왑 메모리가 있기 때문입니다(smem 소스 코드를 확인하면 zram 점유가 /proc/에 보고되지 않음 ) free. meminfo ), 이는 단순한 "총 커널 메모리"로 계산되지 않습니다. - "내가 알고 있는 meminfo에 의해 보고된 메모리 유형이 캐시되어 있습니다." 계산된 총 커널 메모리에 RAM에 있는 스왑을 추가한다는 사실은 알 수 없습니다. 가운데! )zramsmemsmem

이 상태에서 hdd 스왑을 활성화하고 zram 스왑을 끄고 zram 장치를 재설정했습니다 echo 1 > /sys/block/zram0/reset.

그 후에는 캐시되지 않은 커널 메모리가 여름 눈처럼 녹아 "정상" 값으로 돌아갑니다.

결론적으로

smemzram아직이라서 그럴지도 모르지분할불따라서 /proc/meminfo전역 매개변수(예: 활성 페이지 크기, 총 메모리)는 보고되지 않으며 일부 특정 매개변수만 보고됩니다. smem이러한 특정 매개변수 중 일부를 "캐시"로 식별하고 이를 합산하여 총 메모리와 비교합니다. 이로 인해 zram사용된 메모리가 계산됩니다.캐시되지 않은기둥.

참고: 그런데 최신 커널에서는 meminfo소비된 공유 메모리도 보고됩니다. 이는 아직 고려되지 않았으므로 smemno의 zram출력 도 smem신중하게 고려해야 합니다. 공유 메모리를 많이 사용하는 애플리케이션을 사용하는 경우.

사용된 참고자료:

답변2

쉽게 회수할 수 있는 메모리가 많아서 제 눈에는 괜찮아 보입니다. 정확히 작동하지 않는 것은 무엇입니까("오, 끔찍합니다. <무작위 프로그램>이 제공하는 숫자를 보세요!")? 프로그램 충돌(OOM, 메모리 부족, 핸들러 시작)? 프로그램을 시작할 수 없나요? 감각 시스템이 부진합니까? 지속적인 디스크 활동? 로그에 단서가 있나요?

리눅스~ 할 것이다사용 가능한 메모리를 모두 채우고 그대로 유지하는 것이 메모리를 적극적으로 지우고 나중에 다시 사용하는 것보다 더 저렴합니다. 정지된(또는 시작된 직후) 기계는 활발하게 사용되는 기계와 매우 다른 숫자를 제공합니다.

관련 정보