タスクを有効にスケジュールしてパフォーマンスを最適化
2015年7月2日木曜日
[この記事は シニア タスク マスターの Sami Kyostila、Ross McIlroy による Chromium Blog の記事 "Scheduling tasks intelligently for optimized performance" を元に、北村が翻訳・加筆したものです。詳しくは元記事をご覧ください。]
4 月のはじめ、Chrome ではユーザーに迅速に早くページを表示する新しい技術を導入しました。これはパフォーマンスを向上する重要な技術ですが、そのための取り組みのうちの 1 つではありました。ページが完全に読み込まれた後でも、アニメーションがすみやかに表示され、スクロールやクリックへの反応が迅速であることをユーザーは求めるでしょう。Chrome 41 ではレンダリング エンジンにタスク スケジューラを実装し、こうした優先順位の高いタスクがすみやかに処理されるようにしています。これでさらに Chrome の動作が軽快になり、滑らかな 1 秒間に 60 フレームの動きに近づきます。
この大きな目標を前提として、Chrome ではフレームの生成をミリ秒単位で行っています。ただし、画面にグラフィックを描画するタスクは Chrome で完結するものではなく、1 つのプロセッサで複数のタスクが同時に処理されます。かつて Chrome では、ちょうど銀行がお客様の列を処理するように、並び順で先頭から、画像のアニメーション、クリックへの応答、メモリ処理など複数のタスクが実行されていました。このやり方はシンプルで簡単ですが、パフォーマンスの効率化という意味では必ずしも最適なものではありません。次のフレームを画面に描画するなどの優先度の高いタスクも、キューの最後尾に並ばなければならない可能性があります。これでは毎秒 60 フレームという目標は達成できません。
Chrome 41 から、「Blink」レンダリング エンジンに統合するタスク スケジューラを作成しました。スケジューラは処理待ちのタスクを検証し、ユーザー アクションに対するアニメーションや応答などの優先度の高いタスクを先に表示する機能を備えます。使用されていないメモリの解放など優先度の低いタスクは、プロセッサに余裕ができるまで処理を遅らせられます。実際これによって、Chrome でフレームの描画を集中的に処理している際のユーザー入力への応答が 40% 早まるという結果が生じています。
ただし、どんなに高度なスケジューラでも、その後に何が発生するか不明なものについては、適切に優先順位を付けることはできません。この問題に対処するため、「Blink」スケジューラは Chrome のグラフィック エンジンにも統合されます。このエンジンではグラフィックを画面に描画するため、Chrome で他のタスクの優先順位を下げる必要があるタイミングを正確に認識します。これによってスケジューラは、Chrome で次のフレームを描画する必要が生じる前の「アイドル」タイムを有効に活用して、優先度の低いタスクを処理できるようになります。優先度の低いタスクは原則的に、毎秒 60 フレームのアニメーションに何の影響も与えずに処理されます。
Posted by Eiji Kitamura - Developer Relations Team
4 月のはじめ、Chrome ではユーザーに迅速に早くページを表示する新しい技術を導入しました。これはパフォーマンスを向上する重要な技術ですが、そのための取り組みのうちの 1 つではありました。ページが完全に読み込まれた後でも、アニメーションがすみやかに表示され、スクロールやクリックへの反応が迅速であることをユーザーは求めるでしょう。Chrome 41 ではレンダリング エンジンにタスク スケジューラを実装し、こうした優先順位の高いタスクがすみやかに処理されるようにしています。これでさらに Chrome の動作が軽快になり、滑らかな 1 秒間に 60 フレームの動きに近づきます。
この大きな目標を前提として、Chrome ではフレームの生成をミリ秒単位で行っています。ただし、画面にグラフィックを描画するタスクは Chrome で完結するものではなく、1 つのプロセッサで複数のタスクが同時に処理されます。かつて Chrome では、ちょうど銀行がお客様の列を処理するように、並び順で先頭から、画像のアニメーション、クリックへの応答、メモリ処理など複数のタスクが実行されていました。このやり方はシンプルで簡単ですが、パフォーマンスの効率化という意味では必ずしも最適なものではありません。次のフレームを画面に描画するなどの優先度の高いタスクも、キューの最後尾に並ばなければならない可能性があります。これでは毎秒 60 フレームという目標は達成できません。


最新の Chrome で負荷の高いウェブサイトをスクロールした様子。
スケジューラが有効(左)、無効(右)。
この変更で示しているのは、パフォーマンスとは単に物事を早く行うことだけでなく、よりスマートに、適切な順序で、適切なタイミングで行う、ということを意味するということです。Chrome のスケジューラを使ってさらにパフォーマンスを向上させる試みについて、今後もご期待ください。スケジューラが有効(左)、無効(右)。
Posted by Eiji Kitamura - Developer Relations Team