Android
Androidカーネルの最適化
サーチ…
低RAM構成
現在、Androidは512MBのRAMを搭載したデバイスをサポートしています。このドキュメントは、OEMがメモリ不足のためにAndroid 4.4を最適化および設定するのに役立つものです。これらの最適化のいくつかは、以前のリリースにも適用できるほど一般的です。
低RAMデバイスフラグを有効にする
アプリケーションが低メモリデバイスで機能しない特定のメモリ集約機能をオフにする必要があるかどうかを判断するために、ActivityManager.isLowRamDevice()という新しいAPIを導入しています。
512MBデバイスの場合、このAPIは "true"を返すことが期待されます。これは、デバイスのmakefileの次のシステムプロパティで有効にすることができます。
PRODUCT_PROPERTY_OVERRIDES += ro.config.low_ram=true
JITを無効にする
システム全体のJITメモリ使用量は、実行中のアプリケーションの数とそれらのアプリケーションのコードフットプリントに依存します。 JITは最大変換コードキャッシュサイズを確立し、必要に応じてその中のページにアクセスします。 JITのコストは、典型的な実行システム全体で3Mから6Mの間です。
大規模なアプリケーションは、コードキャッシュをかなり速く(デフォルトでは1Mである)最大限に活用する傾向があります。平均して、JITキャッシュの使用率はアプリあたり100K〜200Kバイトの間で実行されます。キャッシュの最大サイズを小さくするとメモリ使用量に多少なりとも役立ちますが、小さすぎるとJITがスラッシングモードになります。実際にメモリが少ないデバイスでは、JITを完全に無効にすることをお勧めします。
これは、製品のmakefileに次の行を追加することで実現できます。
PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.jit.codecachesize=0
CPUガバナーを追加する方法
CPUガバナ自体は1 Cファイルで、kernel_source / drivers / cpufreq /にあります(例:cpufreq_smartass2.c)。あなたはガバナを見つけることに責任があります(あなたのデバイスのための既存のカーネルレポを見てください)。しかし、このファイルをカーネルに正常にコールしてコンパイルするには、以下の変更を加える必要があります:
- ガバナーファイル(cpufreq_govname.c)をコピーし、kernel_source / drivers / cpufreqを参照して貼り付けます。
- カーネルを追加するときにKconfig(これは設定メニューのレイアウトのインターフェースです)を開き、あなたの設定に表示します。ガバナーの選択を追加することでそれを行うことができます。
config CPU_FREQ_GOV_GOVNAMEHERE
tristate "'gov_name_lowercase' cpufreq governor"
depends on CPU_FREQ
help
governor' - a custom governor!
たとえば、smartassV2の場合。
config CPU_FREQ_GOV_SMARTASS2
tristate "'smartassV2' cpufreq governor"
depends on CPU_FREQ
help
'smartassV2' - a "smart" optimized governor!
選択肢を追加する次に、ガバナーがデフォルトガバナーとして選ばれる可能性も宣言しなければなりません。
config CPU_FREQ_DEFAULT_GOV_GOVNAMEHERE
bool "gov_name_lowercase"
select CPU_FREQ_GOV_GOVNAMEHERE
help
Use the CPUFreq governor 'govname' as default.
たとえば、smartassV2の場合。
config CPU_FREQ_DEFAULT_GOV_SMARTASS2
bool "smartass2"
select CPU_FREQ_GOV_SMARTASS2
help
Use the CPUFreq governor 'smartassV2' as default.
- それを置くための適切な場所を見つけることができないのですか? “CPU_FREQ_GOV_CONSERVATIVE”
検索し、その下にコードを置きます。同じことが“CPU_FREQ_DEFAULT_GOV_CONSERVATIVE”
Kconfigが終了したので、ファイルを保存して閉じることができます。
- まだ
/drivers/cpufreq
フォルダにある間は、Makefileを開きます。 Makefileに、CPU Governorに対応する行を追加します。例えば:
obj-$(CONFIG_CPU_FREQ_GOV_SMARTASS2) += cpufreq_smartass2.o
ネイティブCファイルではなく、Oファイルを呼び出してください!これはコンパイルされたCファイルです。ファイルを保存します。
- 移動先:
kernel_source/includes/linux
。cpufreq.h
開きます。次のようなcpufreq.h
表示されるまで下にスクロールします。
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND)
extern struct cpufreq_governor cpufreq_gov_ondemand;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_ondemand)
(他のCPUガバナーもそこに記載されている)
次に、選択したCPUガバナを使用してエントリを追加します。
#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_SMARTASS2)
extern struct cpufreq_governor cpufreq_gov_smartass2;
#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_smartass2)
ファイルを保存して閉じます。
CPUガバナの初期設定が完了しました。あなたが成功したすべてのステップをやったとき、あなたはメニュー(からあなた知事を選ぶことができるはずmenuconfig
、 xconfig
、 gconfig
、 nconfig
)。メニューにチェックインすると、カーネルに組み込まれます。
上記の手順とほぼ同じです: smartassV2とLulzactiveガバナーコミットを追加してください
I / Oスケジューラ
必要に応じて新しいI / Oスケジューラを追加することによって、カーネルを拡張することができます。世界的には、ガバナーとスケジューラは同じです。それらは両方ともシステムがどのように動作すべきかを提供します。ただし、スケジューラの場合は、CPUの設定を除き、すべて入出力データストリームに関するものです。 I / Oスケジューラは、予定されているI / Oアクティビティのスケジュール方法を決定します。 noopやcfqなどの標準的なスケジューラは非常に合理的に動作しています。
I / Oスケジューラはkernel_source / blockにあります。
I / Oスケジューラファイル(たとえば、 sio-iosched.c )をコピーし、 kernel_source / blockを参照してください 。スケジューラーファイルをそこに貼り付けます。
Kconfig.ioschedを開いてKconfigにあなたの選択肢を追加します。例えば、 SIO :
config IOSCHED_SIO tristate "Simple I/O scheduler" default y ---help--- The Simple I/O scheduler is an extremely simple scheduler, based on noop and deadline, that relies on deadlines to ensure fairness. The algorithm does not do any sorting but basic merging, trying to keep a minimum overhead. It is aimed mainly for aleatory access devices (eg: flash devices).
次に、デフォルトの選択肢オプションを次のように設定します。
default "sio" if DEFAULT_SIO
ファイルを保存します。
kernel_source / block /で Makefileを開き、 SIOに次の行を追加するだけです:
obj-$(CONFIG_IOSCHED_SIO) += sio-iosched.o
ファイルを保存して、完了です! I / Oスケジューラがメニュー設定でポップアップするはずです。
GitHubでの同様のコミット: Simple I / Oスケジューラが追加されました 。