2013-10-31 7 views
7

Linuxでは、解放されたメモリページをゼロにして、VM スナップショットのサイズを小さくするにはどうすればよいですか?未使用メモリをゼロにしてVMスナップショットのサイズを小さくする方法

ゼロ以外のメモリは、そのメモリが解放されても になっても使用されなくてもスナップショットに格納されます。彼らはゼロにされていないので、例えば、

sync && echo 3 > /proc/sys/vm/drop_caches 

でファイルシステムのキャッシュ から解放されたメモリページは、不スナップショットに保存されます。 OOMキラーがでキックまで

更新が動作しているように見えます本当に恐ろしいソリューションは、ループ内のmalloc + memsetのメモリにある。これは、私が400MB程度の約800メガバイトからテスト1つのVMのスナップショットのサイズが小さくなります。より良い解決策はありますか?仮想マシンのサイズ減らすために

+0

(削除の答えを編集した後、私はあなたが本当に欲しいものを誤解と思われるので) – Damon

+0

私はこれも可能ではないと思います。 LinuxはCOWゼロのページが1つあり、新しい割り当てで返され、最初の書き込みアクセス時にコピーされます(ゼロでいっぱいのページを作成しますが、これは技術的にはゼロページではありません)。したがって、大量のメモリを割り当て、すべてのページの先頭に ''\ 0''を書き込むことで、理論上のすべての物理メモリをゼロにすることができます。しかし、その後はデータを含むページになります。ゼロページではありません。そしてそれらをもう一度解放すれば、あなたはとにかくあなたが持っていたゼロ以外の解放されたページと同じになります - それらにはゼロだけが含まれます。 – Damon

+0

これをやってみると(たくさんのメモリが割り当てられ、物理的にゼロにされます)、その後は全体で 'MADV_MERGEABLE'となります。おそらくカーネルの同じページのマージがそのトリックをするでしょう。これは、正確には自由な操作(CPU単位)ではないことに注意してください。 – Damon

答えて

1

:仮想マシンに

  1. ログを。ターミナルを開き、仮想マシンをシャットダウンし

    cd /home/ 
    
    sudo dd if=/dev/zero of=foo bs=4096 
    
    sudo rm foo 
    
  2. を入力し、VMware社/ VmPlayerメニューに入り、

    のVMwareに行く - > [仮想マシンの設定 - > HD - >ユーティリティ - >コンパクト

    と仮想マシンをコンパクトにする

さらにサイズを小さくしたい場合は、7-zipを使用します。例えば、Linux上で、次のように入力します。このような

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z directory 
+1

これは、仮想RAMではなく、仮想ハードディスクを保護することに影響します。問題は、ハードディスクデータとRAMデータを含むスナップショットについてです。 – glglgl

3

何かがDDを使用して(スワップを打つ避けるためにヘッドルームとして、マイナス32メガバイト)、その後& memsetの空きメモリの量をALLOC、ディスクキャッシュを解放します。たとえば、KSMの場合は一時的にVMを非CoWメモリにしますが、(割り当てられていない)メモリブロックはゼロで埋められ、他のVMと(KSMを使用して)共有/削除するか、簡単に圧縮できます。

#!/bin/bash 

echo 3 > /proc/sys/vm/drop_caches 
memfree=$(free -m | awk '/^Mem/ {print $4-32}') 
if [ $memfree -gt 0 ]; then 
     dd if=/dev/zero of=/dev/null bs=${memfree}M count=1 
fi 
関連する問題