自己編譯的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
就屬Swiftfox跟Swiftweasel這兩個較廣為人知
我自己編譯的版本經過測試後,在性能上明顯快過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
少林功夫真是好呀
回覆刪除少林功夫真是好呀
回覆刪除32bit i686,適合Atom, Pentium 4/6XX, Core/2 Solo/Duo/Quad, Xeon
回覆刪除Prescott, Pentium D, Celeron D處理器,優化參數針對AMD處理器做最佳化
=============================
上面這個明明全是Intel的CPU,
為什麼要針對AMD處理器做最佳化?
Win32
回覆刪除還有 pigfoot 版 ,也不賴 :D
http://weblog.pigfoot.org/pigfoot/2009/07/20/firefox-3-5-1-release-optimized-build/
謝謝您的熱心~
回覆刪除很厲害喔!!
最進去巴哈,發現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
@Li
回覆刪除換gcc版本,或者打上ldflags的patch
換gcc有點麻煩的樣子...
回覆刪除至於"打上ldflags的patch",我不知道具體要怎樣做,基本上我只了解少數幾個參數而已。
我剛剛去看你寫的"打造你自己的ArchLinux編譯環境",發現我有些參數打錯了,也許是這方面的問題吧?
如果真的沒辦法再嘗試換gcc好了。
@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
我第一次用yaourt去搜尋,大概是太多了,結我我居然沒看到4.5版的在哪...
回覆刪除至少現在知道是哪個了,謝拉.
經過許多測試,還是不行...
回覆刪除gcc4.5跟patch都試過了,那看來只剩下編譯參數的部份。
我的CPU是很早以前的單核athlon64,我去arch的wiki看發現march要用k8,不曉得為什麼。(32-bit的OS反而要用athlon)
不過也許是.mozconfig內的設定問題,因為我裝firefox-pgo沒有什麼問題。(沒有改參數,所以還是很慢)
雖然Mozilla已經採用PGO優化了,但我覺得還是不夠,希望未來版本Mozilla可以把PGO優化發揮到極致。
回覆刪除