CyanogenMod の Wiki がありますのでご紹介。
Cyanogenmod-5 V5.0.7 安定版の環境作りの為にWebページ翻訳して参考にさせて頂いたので、
ついでに掲載しときます。
Swapパーティションを有効にする為の Userinit.sh の作り方、設置方法について記述してあります。
今回はその2回目。
内容
1 Swapとは、何ですか?
2 Compcacheとは、何ですか?
3 Android Process Management 対 Swap
4 私は、SwapやCompcacheを使わなければなりませんか?
5 Swap によるメモリカードの消耗
6 あなたのmicroSDカードの上で交スワップパーティションをつくる方法
7 設定方法
7.1 Compcache
7.1.1 Builtのメニュー
7.1.2 userinitスクリプト
7.2 Swap
7.2.1 簡単な方法
7.2.2 従来の方法
7.3 Compcache + 支援Swap
8 無効にする方法
8.1 Compcache
8.1.1 Builtのメニュー
8.1.2 userinitスクリプト
8.2 Swap
8.3 支援Swap
9 どうしたら、私はSwap/compcacheが動作しているかどうか見分けることができますか?
Swapとは、何ですか?
Swapは要するに、仮想RAMです。
言い換 えると、それがRAMであったように、コンピュータはハードディスクまたはSDカードの小さな部分をとっておいて、それを使います。
一般的に、RAMが いっぱいになるまで、コンピュータはRAMにできるだけ多くの情報を保ちます。
その時、コンピュータはメモリのアクティブでないブロック(ページと呼ばれる)をディスクの方へ動かし始めます。
そして、実行中のプロセスのためにRAMを開放します。
そして、実行中のプロセスのためにRAMを開放します。
ディスクのページのうちの1つが再びアクセスされる必要があるならば、 それはRAMに書きもどされます。
そして必要に応じて、RAMの中の何かがディスク上に動かされます(Swapされる)。
そして必要に応じて、RAMの中の何かがディスク上に動かされます(Swapされる)。
ディスクとSDカードは物理メモリよりかなり遅いながらも、あなたがこれ以上の物理メモリを設置できないけど、より多くのメモリーを必要、あるいは欲しいときに、Swapは役に立ちます。
Compcacheとは、何ですか?
Compcache(圧縮キャッシュ) は、圧縮SwapとしてRAMの一部を使う能力を提供します。
言い換えると、あなたは一部(初期値 25%)のRAMを確保できて、Swapとしてそれを使うことができます。
そして、Swapへ移す前にデータを圧縮し、Swapから取り出す時にそれを解凍できます。
これは、古典的な時 間とスペースのトレードオフです。
あなたは効果的により多くのメモリーを得ます。
しかし、それのいくつかはSwapページを圧縮、解凍するのにCPUタイムを要求される為、通常のRAMより遅いです。
しかし、それのいくつかはSwapページを圧縮、解凍するのにCPUタイムを要求される為、通常のRAMより遅いです。
Android Process Management対Swap
Androidは空きメモリが不足してくると、システムはアクティブでないプロセスに殺されようとしていること伝えます。
そのプロセスはその状態に関する情報の小さな欠片を書き出します。
(たとえば、 Google Mapsは、地図表示の座標を書き出すでしょう。
ブラウザーは、見ているページのURLを書きます。)
その後、プロセスは終了します。
ブラウザーは、見ているページのURLを書きます。)
その後、プロセスは終了します。
あなたが 次にそのアプリケーションにアクセスするとき、アプリは再開します:
アプリケーションはストレージからロードされて、それが最後に閉じられた時の状態の情報をたぐり寄せます。
アプリケーションはストレージからロードされて、それが最後に閉じられた時の状態の情報をたぐり寄せます。
若干のアプリケーションでは、まるでアプリケーションが全然終了してないように思わされます。
これは、基本的にSwapとそれほど異なりません。
Androidのプロセス管理と交Swapの違いは、
Swapが、どの様な情報がそれらのページに含まれるかに関係なく、どんなアクティブでないメモリーのページでも書き出すのに対して、
Androidプロセスは、アプリケーションが設計された方法によって閉じ られるとき、非常に特定の情報しか書き出さないということです。
Swapが、どの様な情報がそれらのページに含まれるかに関係なく、どんなアクティブでないメモリーのページでも書き出すのに対して、
Androidプロセスは、アプリケーションが設計された方法によって閉じ られるとき、非常に特定の情報しか書き出さないということです。
理論的には、これはAndroidsのメモリーマネージャは伝統的なSwap/compcacheより効率的です。
しかしながら、実際には若干のアプリは閉 じられた同じ状態には回復するというわけではありません。
また、他のものは、Swapから状態をロードするより、アプリ再開してから以前の状態に復帰するためにより長い時間かかります。
たとえば、ブラウザーは再開するとき、表示するウェブページを再読込みします。
また、他のものは、Swapから状態をロードするより、アプリ再開してから以前の状態に復帰するためにより長い時間かかります。
たとえば、ブラウザーは再開するとき、表示するウェブページを再読込みします。
そして、それはSwapから、すでに ロードしたウェブページを読込むより非常に長かかります。
私は、SwapやCompcacheを使わなければなりませんか?
各々の構成は、それ自身の賛否があります。
どんな構成でも、パフォーマンスはユーザーの使用パターンによります。
●標準
+意図された操作パラメータ
+複雑でない=壊れにくい
-若干の構成に対して遅くて貧弱なパフォーマンス(例として、多くのウィジット、または大きなアプリの間での切替)
●Compcache
+より利用可能なメモリー
+場合により、より良いパフォーマンス
-より複雑 = より壊れやすい
-利用可能RAMが25%減少
-ブートした後に速いパフォーマンスが出るが、時間とともに失速する
●Swap
+より利用可能な『RAM』
+場合により、より良いパフォーマンス
-より複雑 = より壊れやすい
-カスタムUserinit.shスクリプトが必要
-Swapパーティションを切ったSDカードが必要、(最高のパフォーマンスと信頼性のためにはClass6のSDカードを)
●Compcache + 支援Swap
+より利用可能なメモリー
+場合により、より良いパフォーマンス
+Compcache と比べて割り当てるRAMが少なくて済む
-最も複雑 = 最も壊れやすい
-カスタムUserinit.shスクリプトが必要
-Swapパーティションを切ったSDカードが必要(最高のパフォーマンスと信頼性のためのClass6のSDカードを)
-利用可能なRAMが15%減少
xda-開発者フォーラムで聞いた記録では、Class6のmicroSDHCカード上への直Swapがこれらの4つの構成の中で最高のパフォーマンスを提供するらしい。
Swapによるメモリカードの消耗
フラッシュメモリカードの各々の場所は、正常動作をしなくなるまでに、それほど多くない回数を書き込みすることができるだけです。
Swapは、Swapパーティションに繰り返し書き込みするので、メモリカードの一部をすり減らす潜在的問題があります。
Swapを使っている間カードが消耗すれば、あなたのシステムは壊れて、暴走するでしょう。
Swapは、Swapパーティションに繰り返し書き込みするので、メモリカードの一部をすり減らす潜在的問題があります。
Swapを使っている間カードが消耗すれば、あなたのシステムは壊れて、暴走するでしょう。
Wear levelingは、時間とともに動的に論理メモリーブロックを、異なる物理メモリーブロックへ再配置することによって、すべてのメモリーカード上に、書き込み消耗を一様に分配するメカニズムです。
何度も同じメモリーブロックに書き込む傾向があるSwapのようなアプリケーションを使用するとき、これは主にカードの消耗の問題を軽減します。
何度も同じメモリーブロックに書き込む傾向があるSwapのようなアプリケーションを使用するとき、これは主にカードの消耗の問題を軽減します。
ネット上の不確かなレポートは、大部分のClass6 microSDHCがハードウェアウェアwear leveling機能を持っているが、Class4と下位のカードは一般的に持っていない、ということを示しています。
A-DataとTranscend Class 6カードは、明確にハードウェアウェアwear leveling機能を持っているとしてあげられていました。
多くの人々は、問題なくSwapのためにこれらのカードを使っています。
A-DataとTranscend Class 6カードは、明確にハードウェアウェアwear leveling機能を持っているとしてあげられていました。
多くの人々は、問題なくSwapのためにこれらのカードを使っています。
microSDカードの上でSwapパーティションをつくる方法
(SwapまたはSwap支援compcacheのために必要; compcacheだけのためには必要でない)
Apps2SDインストールを見てください。
あなたが新しいパーティションにもっと大きなスペースをつくる必要があるなら、
パーティションのコンテンツをバックアップし、別のカードに移す方法についての説明が必要なら、
パーティションのコンテンツをバックアップし、別のカードに移す方法についての説明が必要なら、
Apps2SDページにも既存のパーティション(Wipeする必要なしで)の大きさを変更するための説明があります。
可能にする方法...
●Compcache
ビルトインメニュー
Spare Partsへ行ってください、そしてcompcache enabledにチェックを入れてください。
必要条件:
何もない
userinitスクリプト
Spare Partsの代わりにcompcacheを可能にするためにuserinit.shスクリプトを使用したいならば、カスタムuserinit.shファイルを作成する必要があります。
あなたは、手動でしたのフォルダにファイルをコピーする必要があります。
/system/sd/
例:
あなたは、手動でしたのフォルダにファイルをコピーする必要があります。
/system/sd/
例:
#!/system/bin/bash
#
disk_size=24480 #default 24480 (25%). Range: 0 - ~97932, larger number = less 'normal' RAM, more 'swap' RAM
swappy=30 #swappiness. Range: 0 - 100, larger number = more likely to swap
modprobe ramzswap;
rzscontrol /dev/block/ramzswap0 --disksize_kb=$disk_size --init;
swapon /dev/block/ramzswap0;
sysctl -w vm.swappiness=$swappy;
exit 0;
必要条件:
userinit.shスクリプト
apps2SD(あるいは、/system/sd/ へ手動でコピーする。)
●Swap
単純な方法
「DroidSwap」ア プリをインストールして、Onにします。
(でも、多分最初にSwappinessはセッティングで変わります。)
これは、ブートで始まりません。
しかし、あなたが必要とする時だけ、Swapが働いているか見たり手動でOnにするのにこの方法を使うのみにして下さい。
(でも、多分最初にSwappinessはセッティングで変わります。)
これは、ブートで始まりません。
しかし、あなたが必要とする時だけ、Swapが働いているか見たり手動でOnにするのにこの方法を使うのみにして下さい。
また、その代わりに「Swapper」をインストールすることができました?
従来の方法
伝統的なSwapを可能にするために、あなたはカスタムuserinit.shファイルを作成する必要があります。
あなたは手動で下のフォルダにファイルをコピーする必要があります。
/system/sd/
例:
あなたは手動で下のフォルダにファイルをコピーする必要があります。
/system/sd/
例:
#!/system/bin/bash
#
partition=3 #partition number of swap partition. Change if swap is not partition 3.
swappy=30 #swappiness. larger number = more likely to swap, smaller number = less likely to swap
swapon /dev/block/mmcblk0p$partition;
sysctl -w vm.swappiness=$swappy;
exit 0;
注:下にした がって「partition=?」を変えて下さい。
あなたがリカバリーでパーティションをフォーマット化したならば、partition=3にして下さい。
[あなたのセットアップは、たぶん次の通りです: vfat; ext2/3/4; swap ]
もし、あなたが手動で分割したなら(_あなた自身でapp2sd partitionをセットアップしてない)[あなたのセットアップは、 vfat; swap ]、後に partion= 2をpartition=3の代わりにします。
あなたがリカバリーでパーティションをフォーマット化したならば、partition=3にして下さい。
[あなたのセットアップは、たぶん次の通りです: vfat; ext2/3/4; swap ]
もし、あなたが手動で分割したなら(_あなた自身でapp2sd partitionをセットアップしてない)[あなたのセットアップは、 vfat; swap ]、後に partion= 2をpartition=3の代わりにします。
必要条件:
userinit.shスクリプト
Swapパーティション
apps2SD(あるいは、 /system/sd に手動でコピー)
●Compcacheさらに支援Swap
支援Swapは、Compcacheと伝統的なSwapを結合します。
Compcacheが、最初に使われます。
一旦Compacheがいっぱいであるならば、伝統的なSwapが使われます。
一旦 Compcacheと伝統的なSwapがいっぱいであるならば、Androidはプロセスをそのネイティブメモリマネージャを使用してつぶし始めます。
Compcacheが、最初に使われます。
一旦Compacheがいっぱいであるならば、伝統的なSwapが使われます。
一旦 Compcacheと伝統的なSwapがいっぱいであるならば、Androidはプロセスをそのネイティブメモリマネージャを使用してつぶし始めます。
支援Swapを可能にするために、あなたはカスタムuserinit.shを つくる必要があります。
あなたがapps2SDを使うならば、あなたはスクリプトをあなたのSDカードのrootに置く必要があります。
あなたがapps2SDを使わないならば、あなたは手で下のフォルダにファイルをコピーする必要があります。
/system/sd/
さらに、partition=2 に変える。
例:
あなたがapps2SDを使うならば、あなたはスクリプトをあなたのSDカードのrootに置く必要があります。
あなたがapps2SDを使わないならば、あなたは手で下のフォルダにファイルをコピーする必要があります。
/system/sd/
さらに、partition=2 に変える。
例:
#!/system/bin/bash
#
partition=3 #partition number of swap partition. Change if swap is not partition 3.
mem_limit_kb=14688 #default 14688 (15%). Range 0 - [size of swap partition], larger number = less 'normal' RAM, more 'swap' RAM
swappy=30 #swappiness. larger number = more likely to swap, smaller number = less likely to swap
modprobe ramzswap;
rzscontrol /dev/block/ramzswap0 --backing_swap=/dev/block/mmcblk0p$partition --memlimit_kb=$mem_limit_kb --init;
swapon /dev/block/ramzswap0;
sysctl -w vm.swappiness=$swappy;
exit 0;
警告:
Spare Partsへ行ってください、そして、最初に必ずcompcacheが使用不能なようにするために、チェックしてください、さもなければ、支援Swapは働きません
必要条件:
userinit.shスクリプト
Swapパーティション
apps2SD(あるいは、/system/sd/ に手動でコピーする)
不能にする方法...
●Compcache
ビルトインメニュー
Spare Partsへ行ってください、そして、compcacheを可能にするのチェックをはずしてください。
userinitスクリプト
あなたがuserinit.shスクリプトを使っているならば、以下のような行を削除あるいはコメントアウトして下さい:
#modprobe ramzswap;
#rzscontrol /dev/block/ramzswap0 --disksize_kb=24480 --init;
#swapon /dev/block/ramzswap0;
#sysctl -w vm.swappiness=30;
または、スクリプトがcompcacheのために使われているだけであるならば、全userinit.shスクリプトを削除してください。
●Swap
あなたがuserinit.shスクリプトを使っているならば、以下のような行を削除あるいはコメントアウトして下さい:
#swapon /dev/block/mmcblk0p3;
#sysctl -w vm.swappiness=30;
●支援Swap
あなたがuserinit.shスクリプトを使っているならば、以下のような行を削除あるいはコメントアウトして下さい:
#modprobe ramzswap;
#rzscontrol /dev/block/ramzswap0 --backing_swap=/dev/block/mmcblk0p3 --memlimit_kb=14688 --init;
#swapon /dev/block/ramzswap0;
#sysctl -w vm.swappiness=30;
Swap/compcacheが走っているかどうか、どのように見分けることができますか?
ターミナルエミュレータへ行ってください - または、adb shell を開いてください - そして、『free』と入力してください。
ターミナルエミュレータへ行ってください - または、adb shell を開いてください - そして、『free』と入力してください。
もし、このように(スワップの列がゼロ)見えるならば、あなたはSwap/compacheがありません:
total used free shared buffers
Mem: 97932 96640 1292 0 272
Swap: 0 0 0
Total: 97932 96640 1292
もし、このように(スワップの列がゼロでない)見えるならば、あなたはSwap/compacheを持っています:
total used free shared buffers
Mem: 97932 96004 1928 0 332
Swap: 24472 0 24472
Total: 122404 96004 26400