ソフトウェア

macOSにおけるFirefoxのパフォーマンスを劇的に改善した方法とは?


ウェブブラウザ「Firefox」は、機能向上やバグ修正を含むアップデートを定期的に配信しています。2022年7月に公開された「Firefox 103」でmacOS環境における高負荷時のパフォーマンスを向上させた手法についてFirefox開発チームの一員であるガブリエラ・スヴェルト氏が解説しています。

Improving Firefox responsiveness on macOS - Mozilla Hacks - the Web developer blog
https://hacks.mozilla.org/2022/10/improving-firefox-responsiveness-on-macos/

Firefox 103より前のバージョンのFirefoxには「macOS環境において高負荷時のパフォーマンスが著しく落ちる」という問題が存在していました。スヴェルト氏によると、Firefox 103ではメモリ確保の仕組みを少し変更することでパフォーマンス低下を抑えることに成功したとのこと。


Firefoxでは、オープンソースで開発されているメモリアロケーター「jemalloc」を独自にカスタマイズしたアロケーターを用いてメモリ管理を行っています。Firefoxのアロケーターでは並列処理時のロックを効率的に行うためにOSごとにネイティブなAPIを使用しているとのこと。このロックAPIとして、macOSではOSSpinLockが用いられていました。

OSSpinLockは、ロックのサイクルが短い場合はアプリケーションを高速に動作させ、消費電力を抑えることも可能でした。しかし、ロックのサイクルが長くなるとパフォーマンスが悪化する傾向があり、高負荷な処理を実行する際はパフォーマンスが著しく低下することも知られています。この問題が影響し、旧来のFirefoxでは高負荷な処理を実行している際に応答が停止してしまうという問題を抱えていました。

OSSpinLockの問題点はAppleも認識しており、OSSpinLockの代替APIとして「os_unfair_lock」を提供しています。しかし、Firefoxにos_unfair_lockを導入した後に行った自動テストではパフォーマンスが約30%低下してしまいました。その後、パフォーマンス低下の原因を分析した結果、Appleがドキュメントに記載していない非公開関数「os_unfair_lock_with_options()」や非公開オプション「OS_UNFAIR_LOCK_DATA_SYNCHRONIZATION」「OS_UNFAIR_LOCK_ADAPTIVE_SPIN」が発見され、それらの非公開機能を用いることでパフォーマンスの低下を抑えられたとのことです。


スヴェルト氏はドキュメントに記載されていない非公開関数を使用することについて「非公開関数はmacOSの将来のバージョンで使用不能になる可能性があるため、macOSのベータ版で定期的なテストを実行してください」と述べ、Firefoxにおける解決策があくまで非公式な手法であることを強調しています。

なお、ニュース共有サイトのHackerNewsには「数日前にFirefoxを使ってみたら、高速化を実感できました。いくつかのサイトではChromeよりも高速に感じました。Firefox開発チームの適切な対処とChrome開発チームが提起するManifest V3のナンセンスさを比べると、Firefoxに移行しない理由は見つかりません」といったFirefoxの開発チームを称賛する意見が数多く投稿されています。

この記事のタイトルとURLをコピーする

・関連記事
「Firefox 105」正式版リリース、「現在のページのみ」の印刷に対応 - GIGAZINE

「Firefox 104」正式版リリース、スクロールのスナップをより柔軟に指定可能に - GIGAZINE

「Firefox 103」正式版リリース、キーボード入力によるツールバー操作など細かな利便性が向上 - GIGAZINE

悪名高いChromeの拡張機能新仕様「Manifest V3」の移行スケジュール発表、広告ブロッカーや競合ブラウザの対応は? - GIGAZINE

Appleによる「ブラウザ開発者へのWebKit強制」はセキュリティリスクを悪化させているという指摘 - GIGAZINE

in ソフトウェア, Posted by log1o_hf

You can read the machine translated English article here.