Android [パート2]

のパフォーマンスを改善するためのKernelのタスクスケジューラを調整して、Androidのもう1つのカーネルタスクスケジューラを調整します。前の記事では、基本的なタスクスケジューラ構成オプションについて説明しました。これは、あらゆるタイプのAndroidデバイスのパフォーマンスを向上させるために手動で調整できます。その記事をまだチェックしていない状況では、先に進む前にそうすることを強くお勧めします。これには、タスクスケジューラが実際にどのように機能するかをよりよく理解するための有益な情報と、カーネルのタスクスケジューラを修正する方法を正確に理解するためです。

カーネルのタスクスケジューラを調整します

前の記事で説明した基本的なパラメーターとは別に、Linuxタスクスケジューラは、処理能力の公正な分布を強化しようとするいくつかの特別な機能を実装しています。これらの機能は、すべてのシステムとユースケースでまったく同じ結果を作成するわけではないため、実行時に有効または無効にすることができます。カーネルデバッグが提供されています。ただし、すべてのカーネルパックスケジューラDebugFS機能のサポートがパックされているわけではありません。ターミナルアプリ内でコマンドを使用することにより、カーネルがこれらの機能を変更することをサポートするかどうかを発見できます(スーパーユーザーとして):

cat/sys/kernel/debug/sched_features
次のような出力を取得した場合、カーネルは実行時にデバッグ機能の変更をサポートします。

「そのようなデータまたはディレクトリ」エラー出力を取得した場合、カーネルDebUGFをインストールすることを試みることができます。

mount -t debugfs none/sys/kernel/debug
このコマンドがエラーを作成しない場合は、最初のコマンドをもう一度渡すことができます。

スケジューラデバッグ機能の切り替え

スケジューラデバッグ機能を許可するには、Sched_Featuresファイル内でその名前を作成する必要があります。例えば:

echo gentle_fair_sleepers>/sys/kernel/debug/sched_features
機能を無効にするには、同様に、まったく同じファイル内にその名前を作成する必要がありますが、「NO_」が前に「NO_」があります。例えば:

echo no_gentle_fair_sleepers>/sys/kernel/debug/sched_features

お見逃しなく
Android RAMの管理のアイデアとトリック

最も典型的なスケジューラデバッグ機能

特定のカーネルが以下で説明するすべてのタスクスケジューラ機能をサポートすることは保証されていません。機能のサポートは、カーネルバージョン間とガジェットの実装間で異なります。サポートされているすべての機能は、コマンド「CAT/SYS/KERNEL/DEBUG/SCHED_FEATURES」の出力に含まれるものです。 「NO_」で始まる機能は、現在無効になっているものです。

gentle_fair_sleepers

この関数は、寝台車の実行時間(長い間眠る傾向があるプロセス)を最小限に抑えようとします。その結果、アクティブなタスクに分配されるランタイムが増えます。一部の個人は、この機能を無効にするとローエンドデバイスの応答性が向上する可能性があると報告しています。

affine_wakeups

目が覚めたタスクとまったく同じCPUを目覚めさせるタスクを置きます。これは、新しいタスクが前のタスクとまったく同じデータで動作することを前提としています。まったく同じCPUに配置すると、キャッシュローカリティが強化されます(キャッシュローカリティの詳細については、以下をお読みください)。

rt_runtime_share

この機能を理解するために理解を整えるいくつかのより深いタスクを要求します。Linuxでは、優先順位を配置するさまざまなタスクがあります。タスクの配置は、そのタスクがどれだけ重要かを正確に定義し、スケジューラからどれだけのリソースを得るかを正確に定義します。 Sched_other(新しいカーネルのSched_normal)の優先順位を使用して、多くのタスクが実行されます。その他の優先順位は、sched_batch、sched_rr、sched_fifo、およびsched_deadlineです。これらの優先順位の最後の3つは、リアルタイムの優先順位であり、作成されたらすぐに実行することを要求するタスクのために作成されます。

タスクスケジューラは、各CPUに2つの特別なパラメーターを割り当てます。RT_RUNTIMEとRT_PERIOD。 RT_PERIODは、100%CPU帯域幅に相当する配置期間です。 rt_runtimeは、各CPUがリアルタイムタスクのみを実行する時間です。他のすべてのタスクは[rt_period – rt_runtime]時間のために実行されます。通常、カーネルタスクスケジューラは、CPUの時間の95%をリアルタイムのタスクに提供し、他のすべてに5%を提供します。

RT_RUNTIME_SHAREを有効にして、CPUは他のCPUからRT_Runtimeを借用することにより、100%の時間を100%実行できます。 RT_Runtimeを貸し出すCPUは、より時間のために非リアルタイムタスクを実行できます。一部のカスタムカーネルデザイナーは、CPUが非リアルタイムタスクに厳密に配置されていない場合、パフォーマンスを低下させることができないため、デフォルトでこの機能を無効にします。

next_buddy

一般に、Linuxでは、タスクが目覚めたとき、CPUで以前に実行されていたタスク(ウェイクアッププリエンプション)を先取りします(=の場所を取得します)。 next_buddyは、目覚めたタスクが先制を引き起こさない場合の状況を処理します。 next_buddyが有効になると、目が覚めたタスクは次のアレンジイベントで実行されます。同様に、この関数はキャッシュの局所性を強化します。

必読
Hackbench -Androidの最高のパフォーマンスカーネルを発見してください

last_buddy

wnull

Leave a Reply

Your email address will not be published. Required fields are marked *