Snap版Firefoxのパフォーマンス改善に向けた取り組み
Snap版「Firefox」の起動時間含むパフォーマンスの改善に向けた取り組みが行われています。Snap版Firefoxに切り替わった
「Ubuntu 21.10」でデフォルトのブラウザーがdeb版「Firefox」からSnap版「Firefox」に切り替わりました。Snap版「Firefox」に移行することで「Mozilla」は直接Ubuntuユーザーに「Firefox」を提供できるようになりました。
と同時にSnapは特定のLinuxディストリビューションに依存しないため、「Mozilla」は41のLinuxディストリビューションに直接「Firefox」を提供できます。
「Ubuntu 22.04 LTS」でも「Ubuntu 21.10」と同様にデフォルトのブラウザーにSnap版「Firefox」を採用しています。
起動に時間がかかる
Snap版「Firefox」に限った話ではありませんが、Snapアプリはdebアプリに比べ起動時間が長くなる傾向にあります。もちろんアプリの種類やアプリが起動する状況に応じその程度には差がありますが、特にPCの起動直後のようにアプリがキャッシュされていない状況でSnapアプリを起動すると、起動時間に大きな差が出やすくなります。
Snap版Firefoxのパフォーマンスを改善していきたい
CanonicalはSnap及びSnapアプリの起動時間を含むパフォーマンスの改善に何年も前から継続的に取り組んできました。そしてここでも何度か紹介していますが実際に改善作業が行われています。
しかしユーザーから見るとそれでも起動時間の遅さに目が行くでしょう。
Snap版「Firefox」に関してはまずは起動時間(コールドスタート)の改善に焦点があてられています。
どのハードウェアが一番影響を与えるのか
ハードウェアの面から見ればSnapアプリの起動時間に一番影響を与えうるハードウェアは、ストレージです。Snapアプリは圧縮されたイメージとして提供されるため、ディスクI/Oの速さは重要です。
NVMe SSDのような高速なストレージを搭載しているPCでは、特にHDDと比較するとSnapアプリでも明らかに起動時間は短くなります。
また圧縮されたデータを展開するため、CPUの性能も大切です。
3つの性能指標
パフォーマンスの計測や改善にあたり、3種類の性能指標が立てられました。1.コールドスタート
アプリに必要なデータやファイル群がメモリー上にキャッシュされていない状態でアプリを起動するケースです。PC起動後に初めて「Firefox」を起動するケースがこれにあたります。
またアプリインストール後初めてアプリを起動する場合、ユーザーデータの生成など一度だけ実行される処理があります。
例えば「Firefox」ではユーザープロファイルの生成処理が行われます。
パフォーマンスを計測する際この状況をコールドパージと表現しています。
コールドパージが一番アプリの起動時間がかかるケースになります。
2.ウォームスタート
アプリに必要なデータやファイル群がメモリー上にキャッシュされている状態でアプリを起動するケースです。ログイン後2回目以降に「Firefox」を起動するケースがこれにあたります。
アプリがキャッシュされているため、非常に高速にアプリが起動します。
3.ランタイム
アプリ実行中のアプリのパフォーマンスです。パフォーマンスの計測
Snap版「Firefox」の起動時に関するパフォーマンスが計測されました。ケース | Dell XPS 13(2019) | Thinkpad X240 | Raspberry Pi 400 (SDカード) |
---|---|---|---|
コールドパージ | 7.67 秒 | 15.07 秒 | 38.23 秒 |
コールドスタート | 3.09 秒 | 15.16 秒 | 22.92 秒 |
ウォームスタート | 0.86 秒 | 1.39 秒 | 8.11 秒 |
特に「Raspberry Pi 400」では起動に時間がかかりますね。
パフォーマンスの改善点
さて上記だけでなく様々な観点からパフォーマンスの計測や調査が行われました。その結果に基づきコールドスタートを改善するため、課題や調査事項がピックアップされました。
1.squashfsのシーク性能改善
Snapアプリは圧縮されたsquashfsで提供されるため、特に「Raspberry Pi」のようなハードウェアリソースに制限がある環境では、ボトルネックになります。「Firefox」は起動時にsquashfs内のファイルを検索するため、大量のディスクI/Oが発生します。
squashfsに収めるコンテンツの順番を最適化することで、このシークタイムを改善できないか調査が行われています。
2.ソフトウェアレンダリング
現在のSnap版「Firefox」では、「Raspberry Pi」で「glxtest」で使用するGPUドライバーの検出がうまくいかないケースがあります。「Firefox」がソフトウェアレンダリングで起動する場合、シェーダーのコンパイルに大きな時間がかかります。
「AMD GPU」でもこの現象が確認されています。
しかしこの問題はSnapで修正されたため、今後のアップデートで改善されるでしょう。
3.拡張機能の処理
「Firefox」の初回起動時、「Firefox」に同梱されている拡張機能はすべてユーザー固有のディレクトリーにコピーされます。Snap版「Firefox」では98種の言語パックを同梱しているため、これらのコピーに時間がかかります。
またこれらの言語パックは圧縮されたsquashfs内にありそこから読み込まれるため、起動時間に影響を与えています。
4.フォントとアイコンの処理
利用可能なすべてのアイコンテーマやフォント及びフォント設定の検出に時間がかかっています。その他の改善
Snap版「Firefox」ではコールドスタート以外の改善作業も行われています。1.ランタイムパフォーマンスの改善
「Firefox 100.0」からPGOとLTOが有効になりました。これによりランタイムパフォーマンスが有意に改善されています。
また起動時間の短縮にも多少貢献しています。
2.ネイティブメッセージ
ネイティブメッセージのサポート作業が行われています。これにより2要素認証(2FA)デバイスのサポートやGNOME Shell拡張のサポートが有効になります。
来月にもこの機能に対応した「Firefox」が登場する予定です。