2009-07-22

Firefox 3.5.1 PGO自編譯版釋出!



自己編譯的FIrefox PGO終於出爐了
在經歷了無數次的失敗,還有日以繼夜的編譯與堅持
我終於編出不輸其它名人所編譯優化的Firefox PGO



PGO(Profile Guided Optimizations)它是一種優化編譯的過程
我們可以針對硬體的特性,編譯出執行性能更高的同款軟體
理論上我們可以獲得至少20%的性能提升
但是如果又加上編譯器的更新,例如gcc4.3到gcc4.4
再加上CPU優化參數等等的加強,實際上Firefox PGO可以比官方版
有更強大不只20%的性能提升!

在Linux上編譯Firefox PGO很簡單
大部分的Linux發行版幾乎不用特別搭建編譯環境
就可以進行程式的編譯了

如果是Windows上的編譯環境,就比較複雜些
需要花一些時間去搭建Mozilla推薦的編譯環境
而且你編譯出來的Firefox PGO也不太可能快過tete009以及綾川他們的版本
因為他們的版本不是單純的只進行PGO編譯而已
還針對CPU做了不同程度上的優化


目前在Linux上比較有名的PGO優化版Firefox
就屬SwiftfoxSwiftweasel這兩個較廣為人知
我自己編譯的版本經過測試後,在性能上明顯快過Swiftfox
Swiftweasel沒測,因為在我這裡無法正常執行
或許會比我的版本快也或許會慢上一點不過應該都在伯仲之間
同樣都是PGO優化,編譯差距都很細微



我目前編譯出來四個版本,它們分別為:

32bit i686,適合Pentium Pro與K6-ll之後的所有處理器,優化參數最鬆



32bit i686,適合Athlon, Duron, Sempron(Socket 462), Athlon MP, Athlon 64處理器
優化參數針對AMD處理器做最佳化



32bit i686,適合Phenom X3/X4處理器
優化參數針對AMD處理器做最佳化



32bit i686,適合Atom, Pentium 4/6XX, Core/2 Solo/Duo/Quad, Xeon
Prescott, Pentium D, Celeron D處理器,優化參數針對Intel處理器做最佳化



32bit i686,適合Pentium M Dothan, Celeron M處理器
優化參數針對Intel處理器做最佳化



以下為我的.mozconfig:
#
#make -f client.mk profiledbuild
#make package
#make distclean
#
#
#
#
#optimize
#ac_add_options --disable-optimize --enable-debug
ac_add_options --enable-optimize
ac_add_options --enable-profile-guided-optimization
ac_add_options --disable-pedantic
ac_add_options --disable-tests
ac_add_options --disable-xprint
ac_add_options --disable-mochitest
ac_add_options --enable-xterm-updates
ac_add_options --enable-optimize="-O2 -march=i686 -mtune=i686 -pipe -fomit-frame-pointer"
#ac_add_options --enable-optimize="-O2 -march=native -mtune=native -pipe -fomit-frame-pointer"

#linux build
ac_add_options --disable-installer
ac_add_options --disable-updater
ac_add_options --enable-official-branding
ac_add_options --enable-application=browser --enable-libxul --enable-jemalloc
#disable video for compatibility
#ac_add_options --disable-ogg

#Even more optimize
ac_add_options --enable-jemalloc
ac_add_options --enable-strip
ac_add_options --enable-install-strip
#disable print support
#ac_add_options --disable-printing

#remove unused/enable useful
ac_add_options --enable-places
ac_add_options --disable-crashreporter
ac_add_options --disable-parental-controls
ac_add_options --enable-safe-browsing

#experimental
#ac_add_options --enable-xpctools
ac_add_options --disable-jvaxpcom
#ac_add_options --enable-native-uconv
#ac_add_options --disable-xpcom-obsolete
#ac_add_options --with-libxul-sdk=/usr/lib/xulrunner-devel-1.9.1

#Do we really need them?
ac_add_options --enable-default-toolkit=cairo-gtk2
ac_add_options --enable-pango
ac_add_options --enable-svg
ac_add_options --enable-canvas

#mk_add_options AUTOCONF=autoconf213
mk_add_options MOZ_MAKE_FLAGS=-j3
mk_add_options MOZ_CO_PROJECT=browser
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/Lawliet-firefox-pgo
mk_add_options PROFILE_GEN_SCRIPT='$(PYTHON) $(MOZ_OBJDIR)/_profile/pgo/profileserver.py'
export BUILD_OFFICIAL=1
export MOZILLA_OFFICIAL=1
mk_add_options BUILD_OFFICIAL=1
mk_add_options MOZILLA_OFFICIAL=1



有的時候不同平台之間可能會出現一些怪問題
針對error log,可以開啟.mozconfig內被註釋掉的選項
或許可以幫助編譯的成功率

其它優化參數可以參考gcc官方網站提供的手冊
Intel 386 and AMD x86-64 Options
Options That Control Optimization

12 則留言:

  1. 32bit i686,適合Atom, Pentium 4/6XX, Core/2 Solo/Duo/Quad, Xeon
    Prescott, Pentium D, Celeron D處理器,優化參數針對AMD處理器做最佳化
    =============================
    上面這個明明全是Intel的CPU,
    為什麼要針對AMD處理器做最佳化?

    回覆刪除
  2. 謝謝您的熱心~

    很厲害喔!!

    回覆刪除
  3. 最進去巴哈,發現Firefox完全不行,就算裝NoScript還是很慘。反而Konqueror跑的很順...
    因為我裝64-bit,所以只好自己編譯了,但是最後還是出錯誤,不曉得有誰知道要怎樣處理?
    .mozconfig是拿Lawliet的。

    下面是最後的訊息:
    INFO | (automation.py) | Application pid: 6318
    TEST-UNEXPECTED-FAIL | (automation.py) | Exited with code -11 during test run
    INFO | (automation.py) | Application ran for: 0:00:00.776408
    make: *** [profiledbuild] Error 245

    回覆刪除
  4. @Li

    換gcc版本,或者打上ldflags的patch

    回覆刪除
  5. 換gcc有點麻煩的樣子...
    至於"打上ldflags的patch",我不知道具體要怎樣做,基本上我只了解少數幾個參數而已。

    我剛剛去看你寫的"打造你自己的ArchLinux編譯環境",發現我有些參數打錯了,也許是這方面的問題吧?
    如果真的沒辦法再嘗試換gcc好了。

    回覆刪除
  6. @Li

    patch可以參考AUR上的作法
    http://aur.archlinux.org/packages/firefox-pgo/firefox-pgo/PKGBUILD


    其實我自己沒有打patch
    我遇到問題就換gcc版本
    幾乎都可以解決

    如果你跟我一樣用Arch
    那你可以j用gcc 4.5
    它可以跟目前的gcc共存
    我自己有時候出問題換gcc 4.5
    就可以完成編譯了
    給你參考看看‧‧
    http://aur.archlinux.org/packages.php?ID=16045

    回覆刪除
  7. 我第一次用yaourt去搜尋,大概是太多了,結我我居然沒看到4.5版的在哪...
    至少現在知道是哪個了,謝拉.

    回覆刪除
  8. 經過許多測試,還是不行...
    gcc4.5跟patch都試過了,那看來只剩下編譯參數的部份。
    我的CPU是很早以前的單核athlon64,我去arch的wiki看發現march要用k8,不曉得為什麼。(32-bit的OS反而要用athlon)
    不過也許是.mozconfig內的設定問題,因為我裝firefox-pgo沒有什麼問題。(沒有改參數,所以還是很慢)

    回覆刪除
  9. 雖然Mozilla已經採用PGO優化了,但我覺得還是不夠,希望未來版本Mozilla可以把PGO優化發揮到極致。

    回覆刪除