커널은 얼마나 많은 RAM을 사용합니까?


46

이 질문은 Mac OS X 커널이 750MB 의 RAM을 사용한다는 사실을 알게되었을 때 충격을 받았습니다 .

저는 20 년 동안 Linux를 사용해 왔으며 커널 RAM 사용이 X에 의해 왜소하다는 것을 항상 "알고 있습니다"(그렇지 않습니까?

그래서, 인터넷 검색 후, 나는 slabtop나에게 말했다 :

Active / Total Size (% used)       : 68112.73K / 72009.73K (94.6%)

이것은 현재 커널이 ~ 72MB의 RAM을 사용하고 있다는 것을 의미합니까?

( 의 RSS를 17M으로 top보고 Xorg한 커널은 이제 다른 방법이 아닌 X를 왜소하게 만듭니다).

랩탑의 "일반"커널 RAM 사용량 (범위)은 무엇입니까?

MacOS가 Linux보다 훨씬 더 많은 RAM을 사용하는 이유는 무엇입니까?

추신. 여기에 마지막 질문에 대한 답변이 없으므로 관련 질문을 참조하십시오.


내 컴퓨터에서는 거의 2GB를보고하지만 세부 정보를 볼 때 파일 시스템 캐시와 관련이 있습니다.
derobert

2
실제로을 수행하면 echo 3 > /proc/sys/vm/drop_caches80MB 만 사용합니다.
derobert

제공하는 링크의 의견에 따르면 통합 그래픽 하드웨어에서 사용하는 메모리는 kernel_task 계정에 포함되어 있습니다.
Russell Borogove

답변:


38

커널은 약간 잘못된 것입니다. Linux 커널은 여러 프로세스 / 스레드 + 모듈 ( lsmod)로 구성되어 있으므로 전체 그림을 보려면 단일 구성 요소가 아닌 전체 볼을 확인해야합니다.

부수적으로 광산 쇼 slabtop:

 Active / Total Size (% used)       : 173428.30K / 204497.61K (84.8%)

에 대한 맨 페이지 slabtop도 다음과 같이 말했습니다.

슬랩 탑 통계 헤더는 사용중인 슬래브의 바이트 수를 추적하며 실제 메모리의 척도는 아닙니다. / proc / meminfo 파일의 'Slab'필드는 사용 된 슬랩 물리적 메모리에 대한 정보를 추적합니다.

캐시 삭제

귀하의 질문에 대한 의견에서 @derobert이 제안한 대로 내 캐시를 삭제 하면 다음과 같이됩니다.

$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$

 Active / Total Size (% used)       : 61858.78K / 90524.77K (68.3%)

3을 보내면 무료 pagecache, dentries 및 inode가 수행됩니다. 이 U & L Q & A에서 제목 : 메모리 캐시와 버퍼를 덤프하는 방법이나 도구가 있습니까? ". 따라서 페이지 캐시, 덴 트리 및 inode에 관한 정보를 유지함으로써 110MB의 공간이 사용되었습니다.

추가 정보

  • 관심이 있으시면 slabtop조금 더 자세히 설명하는이 블로그 게시물을 찾았습니다 . 제목 : 오늘의 Linux 명령 : slabtop .
  • 슬랩 캐시는 Wikipedia에서 제목 : 슬랩 할당 에 대해 자세히 설명합니다 .

커널에서 사용하는 RAM 용량은 얼마입니까?

이 사진은 나에게는 조금 안개가 낀 것이지만 여기에 내가 우리가 알고있는 것들이 있습니다.

투수판

이 기술을 사용하여 Slab 사용량의 스냅 샷을 얻을 수 있습니다. 기본적으로 우리는이 정보를 꺼낼 수 있습니다 /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

모듈

또한 다음에서이 값을 가져와 커널 모듈의 크기 값을 얻을 수 있습니다 (디스크에서 크기인지 RAM인지 확실하지 않음) /proc/modules.

$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758

슬라브 정보

SLAB에 대한 자세한 내용은이 proc 구조에서 액세스 할 수 있습니다 /proc/slabinfo.

$ less /proc/slabinfo | head -5
slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_ffff8801f2b30000      0      0    320   25    2 : tunables    0    0    0 : slabdata      0      0      0
fuse_request         100    125    632   25    4 : tunables    0    0    0 : slabdata      5      5      0
fuse_inode            21     21    768   21    4 : tunables    0    0    0 : slabdata      1      1      0

Dmesg

시스템이 부팅되면 Linux 커널이로드 된 직후 메모리 사용량을보고하는 줄이 있습니다.

$ dmesg |grep Memory:
[    0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)

참고 문헌


1
어쨌든 완전한 그림을 얻을 수 있습니까?
Gilles

@Gilles-사용중인 메모리가 얼마나됩니까? 나는 당신에 대해 Q에 대해 기억하는 것 같습니다.
slm

@Gilles-나는 이것이 당신이 요구하는 것에 가깝다고 생각합니다 : grep Slab /proc/meminfo.
slm

@Gilles-이 있습니다 :. /proc/slabinfo의 소스 인 것으로 보이 slabtop므로 여기에서 더 정확한 총 개수를 계산할 수 있습니다.
slm

1
열이의 /proc/modules에 디스크 모듈은 일반적으로 압축으로 메모리에로드 된 모듈 크기가 될 가능성이 높습니다 (페도라 27 그것의 XZ에 예를 들면), 내가 확인 한 tg3NIC 드라이버는이 디스크 크기 (압축되거나 원래의 파일 크기가) 수행 에 표시되는 바이트 크기와 일치하지 않습니다 /proc/modules.
Terry Wang

7

이것은 어떤가요:

Active / Total Size (% used)       : 4709.24K / 5062.03K

일반 커널로 헤드리스로 실행되는 새로 부팅 된 매우 작은 시스템에 있습니다. 따라서 많이 필요하지 않습니다.

derobert 힌트에서 알 수 있듯이 커널은 캐싱에 사용 가능한 메모리를 사용하며이 내용은에서 많이 볼 수 있습니다 slabtop. 파일 캐시 외에도 더 이상 사용하지 않는 사용자 공간 프로세스의 공유 가능 메모리와 관련이 있습니다. 커널은 동일한 것들이 다시 필요할 때까지 또는 RAM이 필요할 때까지 그것을 남겨두고 잊어 버립니다. 비유는 책을 선반에서 꺼내 테이블 위에 놓아 두는 것입니다. 책을 다 읽었을 때 책을 다시보아야 할 경우에 대비하여 책을 열어 놓을 수 있습니다.


4

Solaris를 실행하는이 512GB RAM 서버에서 커널은 25GB를 사용합니다.

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    3210102             25078    5%
Anon                     15266226            119267   23%
Exec and libs               41457               323    0%
Page cache                3539331             27651    5%
Free (cachelist)         13799571            107809   21%
Free (freelist)          30093164            235102   46%

Total                    65949851            515233
Physical                 65927406            515057

이 작은 것에는 커널이 사용하는 RAM의 절반 이상이 있습니다.

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    2149699             16794   52%
Anon                       517016              4039   13%
Exec and libs               15420               120    0%
Page cache                  21840               170    1%
Free (cachelist)             8768                68    0%
Free (freelist)           1404862             10975   34%

Total                     4117605             32168
Physical                  4096002             32000

걱정할 것은 없습니다. 사용하지 않는 RAM은 RAM 낭비입니다.


1
당신이 당신의 출력을 달성 한 방법을 설명하십시오.
Maus

@Maus는 echo ::memstat | mdb -k업데이트 10/09 이전의 일부 Solaris 10 프로덕션 서버에서 실행 합니다.
jlliagre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.