カーネルはどのくらいのRAMを使用しますか?


46

この質問は、Mac OS Xカーネルが750MBのRAMを使用していることを発見したときのショックに動機付けられています

私は20年間Linuxを使用してきましたが、カーネルRAMの使用量がXによってd小化されることを常に「知っていました」(本当ですか?本当ですか?)。

だから、いくつかのグーグルの後、私はslabtop言った:

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

これは、私のカーネルが〜72MBのRAMを使用しているということですか?

(RSSを17Mとしてtop報告することを考えるとXorg、カーネルは今ではXを小人化し、その逆ではありません)。

ラップトップの「通常の」カーネルRAM使用量(範囲)とは何ですか?

MacOSがLinuxよりも桁違いに多くのRAMを使用するのはなぜですか?

PS。ここでの最後の質問に対する回答はありません。関連する質問をご覧ください。


私のマシンでは、ほぼ2GBと報告されています...しかし、詳細を見ると、すべてファイルシステムキャッシュに関連しています。
デロバート

2
実際、を実行するとecho 3 > /proc/sys/vm/drop_caches、80MBしか使用されません。
デロバート

提供するリンクのコメントによると、統合グラフィックスハードウェアで使用されるメモリはkernel_taskアカウンティングに含まれています。
ラッセルボロゴーブ

回答:


38

カーネルは少し誤った呼び名です。Linuxカーネルはいくつかのプロセス/スレッド+モジュール(lsmod)で構成されているため、完全な図を取得するには、単一のコンポーネントだけでなくボール全体を見る必要があります。

ちなみに私のショーslabtop

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

のmanページにslabtopも次のように書かれています:

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を送信すると、次のことが行われます。無料のページキャッシュ、デントリ、iノード。これについては、このU&Lに関するQ&Aで詳しく説明します。メモリキャッシュとバッファをダンプする方法やツールはありますか?"。だから、ページキャッシュ、歯、iノードに関する情報を維持するだけで、110MBのスペースが使用されていました。

追加情報

それでは、カーネルはどのくらいのRAMを使用していますか?

この写真は私にとっては少しぼやけていますが、ここに私が知っている「考える」ものを示します。

スラブ

この手法を使用して、スラブの使用状況のスナップショットを取得できます。基本的に、この情報をから引き出すことができます/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

ドメス

システムが起動すると、Linuxカーネルがロードされた直後のメモリ使用量を報告する行があります。

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

参照資料


1
とにかく完全な画像を取得する方法はありますか?
ジル

@Gilles-使用中のメモリの量ですよね?以前、それに関するQを覚えているようですね。
slm

@Gilles-これはあなたが尋ねているものに近いと思いますgrep Slab /proc/meminfo
slm

@Gilles-これもあります。/proc/slabinfoこれはのソースでslabtopあるように見えるため、ここから金額を計算して、より正確な合計数を計算できます。
slm

1
の列2は、/proc/modulesディスク上のモジュールが通常圧縮されているため(たとえばFedora 27ではxz)、メモリ上のモジュールサイズでロードされる可能性が高く、tg3NICドライバーをチェックしました。に表示されるバイトサイズと一致しません/proc/modules
テリー王

7

これはどう:

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

これは、通常のカーネルでヘッドレスで実行されている、新しく起動された非常に小さなマシン上にあります。 したがって、それほど必要ありません。

derobertが示唆するように、カーネルはキャッシュに利用可能なメモリを利用しますslabtop。これはで見られるものの多くです。これは、ファイルキャッシュに加えて、使用されなくなったユーザー空間プロセスの共有可能メモリに関係しています。カーネルは、同じものが再び必要になるか、何かが積極的にRAMを必要とするまでそこに残します。その場合、それは忘れられます。たとえば、本を棚から取り出して、テーブルで読むために開いたままにすることです。読み終わったら、もう一度見る必要がある場合に備えて、テーブルで本を開いたままにしておくことができます。


4

Solarisを実行しているこの512 GB RAMサーバーでは、カーネルは25 GBを使用します。

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は、echo ::memstat | mdb -kアップデート10/09より前の一部のSolaris 10実稼働サーバーで実行します。
jlliagre
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.