Snap版Firefoxのパフォーマンス改善に向けた取り組み
以前紹介したように引き続きSnap版Firefoxのパフォーマンス改善に向けた取り組みが行われています。その現状と進捗が以下で紹介されています。
前回の取り組み内容
以前紹介した内容は、以下を参照してください。Snap版Firefoxのパフォーマンスにおける大きな課題の1つが、コールドスタート時にFirefoxの起動に時間がかかることです。
1.Jupyter Notebookのサポート
「Jupyter Notebook」の対応作業が完了しました。ローカルファイルにアクセスできない
「Jupyter Notebook」ではNotebook起動時、以下のいずれかの方法でNotebookにアクセスします。- ローカルファイルを開く(~/.local/share/jupyter/...)
- URL経由で開く(http://localhost/...)
「2.」の方法は問題ありませんが「1.」の方法はFirefoxから「~/.local」にアクセスできないため、「1.」の方法でNotebookを開くことができません。
「Jupyter Notebook」では「1.」の方法がデフォルトですが、Snapはデフォルトで「.」で始まるフォルダーにアクセスできないように制限されています。
対応方針
そこでSnapではこの問題に対応するため、デフォルトで「~/.local/share/jupyter」にアクセスできるよう回避策が取られました。またアップストリームに対して「2.」の方法をデフォルトにするよう要望をあげています。
2.ソフトウェアレンダリングになる問題
前回も課題にあげられていましたが、Firefoxが使用するGPUドライバーを適切に検出できず、ソフトウェアレンダリングになってしまう問題です。特に「Raspberry Pi」のようなデバイスでこの問題が発生すると、パフォーマンスに大きな影響を与えます。
対応方針
Snapから「Raspberry Pi」が搭載しているGPUも含め、より多くのPCIデバイスIDにアクセスできるようにSnapが修正されました。それでもまだ完全な解決には至っておらず、適切に検出できないケースも存在します。
引き続き問題の解決に向け調査が行われています。
この問題に関する詳細は、以下を参照してください。
3.拡張機能の処理
前回も課題にあげられていましたがFirefoxが初めて起動する時、大量の言語パックがコピーされます。これがFirefoxの起動時間に大きな影響を与えています。
対応方針
Firefoxがシステムのロケールに基づき、1つの言語パックのみ読み込むように修正される予定です。この問題に関する詳細は、以下を参照してください。
4.ネイティブメッセージのサポート
ネイティブメッセージのサポート作業が行われています。これにより2要素認証(2FA)デバイスのサポートやGNOME Shell拡張のサポートが有効になります。
進捗は良好であり、そのうちネイティブメッセージに対応したFirefoxが登場する予定です。
5.ネットワークボリュームへのアクセス
現状Snapはネットワークボリュームにアクセスできません。(Flatpakも同様)この問題の対応作業が進められています。
回避策
この問題が修正されるまで「gvfs-fuse」を利用し「/var/run/user/ユーザーID/gvfs」経由でアクセスする方法があります。6.フォントとアイコンの処理
新しく作成したベンチマーク結果によれば、アイコンやテーマフォントキャッシュの構築はそれほどリソースを消費する処理ではありませんでした。Firefoxでも同様ですがChromiumではそうでもなく、このキャッシュの構築に0.3秒、「Raspberry Pi」だと6〜7秒程時間がかかっています。
キャッシュ構築時にI/Oに処理が集中し、遅いストレージを搭載するデバイスでは処理に時間がかかっています。
これも引き続き調査が行われています。
7.futexシステムコールにかかる時間
非Snap版Firefoxと比較してSnap版Firefoxのfutexシステムコールにかかる時間が、最大で1000倍もかかっていることが分かりました。さらにSnap版Firefoxでは非Snap版Firefoxよりもfutexシステムコールを呼ぶ機会が多いことも分かりました。
ただ後者に関してはSnapは隔離された環境で実行されるため、ある程度予期されたものです。他のSnapアプリでも同様の傾向が見て取れます。
これも引き続き調査が行われています。