Uncategorized

Tweak Kernelのタスクスケジューラは、Android [パート1]

でパフォーマンスを向上させます。Androidは、カスタム構成のための多くのスペースを備えたオペレーティングシステムであることがよく理解されています。これは、そのコアでのLinuxカーネルの使用のために部分的にです。今日、Androidのカーネルの最低レベルの部分の1つであるタスクスケジューラの構成について説明します。適切なタスクスケジューラ構成を使用すると、Androidのパフォーマンスを向上させることができます。読み続けて、最大のパフォーマンスのためにガジェットを変更する方法を正確に発見してください。

しかし、カーネルのタスクスケジューラは正確には何ですか?

システムのタスクスケジューラは、多数の実行タスクにCPUを配布する責任があります。 CPUでの実行時間を各タスクに提供するだけでなく、特定の時間間隔でもう1つのタスクと交換することでそれを行います。一般に、2種類のタスクスケジューリングがあります。先制配置と協力的なスケジューリングです。

先制スケジューリングでは、カーネルは、実行中のタスクを先制する(=スワップ)するタイミングを決定します。複雑な配置アルゴリズムに基づいて、ほぼすべてのタイプの時間でそれを行うことができます。対照的に、協力的なスケジューリングでは、各タスクは、CPUを要求しなくなった場合にカーネルに通知することに責任を負います。したがって、交換することができます。この場合、カーネルは、CPUに配置するだけでなく、配置するのに最適な候補者を決定することに対してのみ責任があります。

また、Androidの神話と事実を参照してください:10のメトロポリタンの伝説をつぶす

Androidでアレンジするタスク

Androidは、先制カーネルであるLinuxの上で実行されます。タスクスケジューラは、ハードコーディングされた一定の間隔、配置間隔でトリガーされます。これは通常、Androidデバイスで10ミリ秒ごとに行われます。スケジューラが実行されると、実行中のタスクを先取りする必要があるかどうか、および実行するのを待っているタスクがCPUにその場所を取る必要があるかどうかが決定されます。バージョン2.6.23以来、Linux Kernelは非常に高度なタスクスケジューラである完全に公正なスケジューラ(CFS)を利用しています。 CFSは、タスクの重みや優先度など、多くの要因に基づいて、すべてのタスクにCPUでのかなりの実行時間を提供しようとします。このスケジューラのアルゴリズムは、理解するのがかなり複雑です。そのため、開発に貢献するカーネルデザイナーの数はかなり少ない理由です。

CFSスケジューラを微調整します

前提条件

ルートアクセス

ターミナルエミュレータアプリ

その複雑さにもかかわらず、CFSスケジューラはいくつかの構成オプションを提供します。これらの選択を微調整すると、システムのパフォーマンスに非常に影響する可能性があります。従来、SYSCTLコマンドラインツールは、スケジューラパラメーターを含む、実行時にカーネルパラメーターを調べたり変更したりするために利用されています。このツールは、ほとんどのAndroidでプリインストールされているため、このツールを使用します。ただし、最初に、少し紹介することを要求します。

sysctlの利用方法

リストパラメーターと現在の値
割り当てられた値を使用して提供されるすべてのカーネルパラメーターをリストするには、端末アプリ内のコマンドを遵守することを提供します。

sysctl -a
タスクスケジューラ関連のパラメーターのみを取得するには、コマンドを遵守することを提供する場合があります。

sysctl -a | grep “sched”
これにより、サンプルデバイスの出力が遵守されます。

パラメーターリストはかなり大きいです。以下のこれらのパラメーターのいくつかのみについて説明します。これは最も重要なパラメーターです。

パラメーターの変更
タイプSYSCTL -W [パラメーター] =値のコマンドを使用してパラメーターを変更できます。ここで、パラメーターはカーネルパラメーター名と値が新しい値です。例えば:

sysctl -w kernel.sched_scaling_enable = 1

SYSCTLの使用例については、以下をお読みください。変更は再起動を通じて行われないことに注意してください。 init.dスクリプトを使用して、あらゆる種類の必要な変更を起動時に適用できます。最後に、root特権でsysctlコマンドを実行していることを確認してください。コマンドを遵守することにより、端末アプリでルート特権を取得できます。

su
基本的なタスクスケジューラパラメーター

お見逃しなく:モバイルデバイス上のLinuxカーネルの過去と未来

kernel.sched_min_granularity_ns
プロセッサに縛られたタスクは、先制前にこの最低時間の間実行されることが保証されています。合計にかかる時間がプロセッサの速度のみに依存する場合、タスクはプロセッサバインドと考えられています。たとえば、Webに表示されるバンドルを待っているタスクは、プロセッサバインドタスクではありません。一般的に、この値を増やすと、システムのスループットが高まります。一方、値と高い場合は、ガジェットの応答性を低下させる可能性があります。このパラメーターは、ナノ秒単位で値を取得します。たとえば、それを4000000ナノ秒(4ミリ秒)に設定するには、順守するコマンドを提供できます。

sysctl -w kernel.sched_min_granularity_ns = 4000000
公式のLinuxカーネルのドキュメントによると、これは中央のCFSスケジューラチューナブルです。

kernel.sched_latency_ns
CFSの実行キューのすべてのタスクは、少なくともこの期間内に配置されることが保証されています。null