この記事は The Qt Blog の Fast-Booting Qt Devices, Part 1: Automotive Instrument Cluster を翻訳したものです。
執筆: Risto Avila, 2016年4月20日
組み込み機器を開発する場合にユーザー体験として重要となるものの一つに、システムの起動時間ががります。自動車をはじめとした多くの業界において、起動時間は必須条件という場合もあります。
これに関して「Qt で開発した端末でどのくらい高速に起動ができますか?」「システムと Qt アプリケーションを2秒以内に起動するのは可能ですか?」「Qt アプリケーションを起動するのに最低限必要なシステムは何秒で起動できますか?」といった問い合わせを数多くいただいてきました。
これらの質問に対する唯一の回答は残念ながら存在しません。その代わりに、Qt で作る組み込みシステムの最適化に関して3つのブログ記事を書くことにしました。最初の記事では車載のインストルメントクラスタを例に、私たちが開発した高速起動デモのベンチマーク結果を紹介します。次の記事では実際に「どのように」Qt や Qt Quick アプリケーションを最適化したのかを紹介し、最後の記事ではハードウェアに関わる起動時間の短縮について書く予定です。
自動車業界では、起動時間に関する明確な要求が存在します。たとえば、デジタルインストルメントクラスタでは、できる限り高速に起動することが重要です。車の起動とほぼ同時にインストルメントクラスタが起動し、適切に動作する必要があります。これはユーザー体験としてだけではなく、安全性に関する要件という側面もあります。と同時に、計器類の表示のデジタル化はどんどん進み、3D 表示のようなリッチな表現に変わっていきます。プラットフォームやフレームワークといったソフトウェアの設計的にここは注意深く行う必要があります。Qt ではこのようなインストルメントクラスタの高速起動が可能で、Embedded world 2016 instrument cluster demo で最適化されたデモを実際に作成しました。
以下の動画で結果をご覧ください。
https://youtu.be/QbEYhQIjlQc
最適化以前の起動時間は23秒でしたが、様々な最適化の結果、起動直後のスクリーンの表示までの時間を 1.5 秒に短縮することに成功しました。この時間はシステムに必要とされるものに依存します。
起動時間の分析
この動画をもとに解析し数値化した結果が以下の図になります。
コールドブートで最初の画面の描画が表示されるまでにかかった時間は 1500 ms です。ご覧のように、多くの時間は Qt アプリ以外の部分に費やされています。その部分に関してはハードウェア的に高速に起動するものを選択する事でさらに短縮できるのではないかと思っています。ボードはメモリとメモリバスが高速である必要があります。u-boot はのさらなる最適化や、別のブートローダーを導入することでもう少し高速化できる可能性がありますが、特に Qt Quick のアプリケーションを中心に、基本的な最適化はほぼ行いました。
表示のプライオリティ
最適化において一番重要なことは、ユーザーに対して一番最初に表示したいものを考えることです。それを元に、それだけを表示するアプリケーションを書いて、それ以外の部分は動的に遅延ロードするようにします。今回は計器類の外枠を最初に表示することにし、それの描画が完了してから残りの要素を動的にロードするようにしました。ゲージ類をロードしてから、3D の自動車のモデルをロードするような作りにしています。
起動タイミングのトリック
ユーザー体験を向上させる秘訣の一つに実際の起動のタイミングを前倒しするテクニックがあります。これは起動時間自体を高速化するよりも効果が高いことが多いです。今回のケースでは、システムの起動自体を運転手がドアのロックを解除したタイミングや、ドアを開けたタイミングで行うことが考えられます。これにより運転手が運転席に座った時点で既にシステムが起動している状態になり、スイッチをONにしたタイミングですることは計器類のバックライトの制御のみとなります。
具体的な Qt に関わる部分の最適化は?
Qt Quick アプリケーションの具体的な最適化については、次回の記事までお待たせすることになります。パート2では、Qt アプリケーションまわりの様々な工夫について紹介する予定です。
それではお楽しみに!