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

他の2つのシステムでは、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ブラウザを使用してシステムをさらに強調しました。最初は83 MBのスワップスペースのみが使用されます。しかし、いくつかのタブを開いた後、スワップはほぼ最大にすばやく切り替えられ、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慎重に考慮する必要があります。共有メモリを多用するアプリケーションを使用する場合。

使用された参考資料:

おすすめ記事