the way to build PGO FX


編譯方法其實MDC(Mozilla Develop Center)就寫的很清楚
看完下面這篇可以編出一般版的FX
https://developer.mozilla.org/En/Build_Documentation

  1. For the impatient
  2. 2. Getting started
    1. 2.1. Build prerequisites
    2. 2.2. Get the source
    3. 2.3. Configuring build options
    4. 2.4. Build and install
  3. 3. Random FAQs and Developer Documentation
  4. 4. Hacking the Build System

但要編PGO版的 需要再看這篇
https://developer.mozilla.org/en/Building_with_Profile-Guided_Optimization#Introduction

1. Introduction
2. Build Configuration
3. The profile generation script
4. Building

整個看完要編自己PGO的FX 不會有太大問題
考慮到也許有人沒時間看,那就簡略大部分的說明直接進速成班

1.建立編譯環境
ubuntu的情形:

sudo apt-get build-dep firefox

2.下載FX 的source code 解壓縮到 『~/』下面

3.新增設定、執行文件
(因為wordpress會把 雙減號 改成單減號,正確的內容請下載回去看)
在『~/』下面新增 run-firefox.sh

#!/bin/sh make -f client.mk profiledbuild
export NO_EM_RESTART=1
mkdir $OBJDIR/_profileprofile
$OBJDIR/dist/bin/firefox -no-remote -profile $OBJDIR/_profileprofile

在『~/』下面新增 .mozconfig (注意下載回來的檔案要加上 .)

. $topsrcdir/browser/config/mozconfig CC=gcc-4.3 CXX=g++-4.3 CPP=cpp-4.3 #mk_add_options MOZ_MAKE_FLAGS=-j4 mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-@CONFIG_GUESS@ ac_add_options --disable-tests --disable-crashreporter --disable-debug --disable-tests --disable-javaxpcom --disable-updater ac_add_options --enable-application=browser --enable-libxul --enable-jemalloc ac_add_options --enable-optimize="-O3 -fforce-addr -march=native -mtune=native -pipe -fomit-frame-pointer" ac_add_options --enable-profile-guided-optimization mk_add_options PROFILE_GEN_SCRIPT="sh /home/orange/run-firefox.sh"

藍色指定要用哪個gcc版本進行編譯,如果不需要特別指定就
CC=gcc
CXX=g++
CPP=cpp

草綠色 是多核心CPU加速編譯使用的,如果是單核心CPU可以不用管
如果是四核心CPU 把前面的#去掉就好,雙核心除了去掉#還要 -j4 改成 -j2

紫色則是gcc 最佳化的程度,-O3 在大部分的使用情形下不會當掉
(如果要更穩定那可以改成 -O2)

橘色則是依據編譯系統的CPU進行最佳化,如果要指定編譯成其他CPU的把native改掉
譬如改成對athlon64最佳化,-march=athlon64 -mtune=athlon64
編譯上若有設定march(譬如athlon64) 卻把編譯出來的用在不同的cpu上(譬如P4)
有可能會出現程式錯誤
避免這個情形 可以只用mtune 而不用march這個參數 (不過最佳化程度會降低一些)

4.下指令進行編譯
.mozconfig 最後一行那個跟run-mozilla.sh 第1行 只是要提醒編譯該下的指令是什麼
切換到FX source code 的目錄,並下指令

cd ~/mozilla-1.9.1
make -f client.mk profiledbuild

接下來就是漫長的等待時間,在第一次編譯完之前能不用FX就不要用
因為第一次編譯完後需要進行調校,如果有舊版FX在執行就會出現問題

第一次編譯完後系統會自動跳出一個FX視窗,這個就是調校用的
要做的就是 到處逛網頁 如此而已,要PGO程度好 可以多逛逛技術性較多的網頁
建議逛的是
各javascirpt benchmark 網頁+平常測試速度的網頁+常去網頁+負載重的網頁…
逛完後關閉FX,這時候會自動開始第二次編譯

5.第二次編譯完後,切換到編譯完的目錄 把編完的東西壓縮起來
以我的.mozconfig的設定是

cd ~/mozilla-1.9.1/obj-i686-pc-linux-gnu
make package

這個過程不能省略是因為dist裡的東西多是用 link 連結
make package是為了去掉這個情形,等壓縮完後在 obj目錄下的dist就會出現
firefox-3.1b3.en-US.linux-i686.tar.bz2 這就是完整 PGO 最佳化的FX

把這個copy出來後,別忘了要清理編完的東西 要不然下次編譯會出現難以預知的問題

cd ~/mozilla-1.9.1/obj-i686-pc-linux-gnu
make distclean

編譯部份大概就這樣 看起來雖然落落長,但只要run-firefox.sh、.mozconfig 搞定後
之後只要下一次指令 所以PGO編譯起來老實說沒什麼難度

附註:CFLAGS參數不要用 -mfpmath 這個參數會讓FX當掉

9 則迴響 (+add yours?)

  1. nasofe
    三月 28, 2009 @ 20:35:28

    感覺上只要在 run-firefox.sh 裡面隨便寫點類似 kate smplayer 之類的內容讓腳本停下來就可以了。然後手動運行 firefox 跑 PGO ,關掉 kate 和 smplayer ,讓腳本繼續。不知道這樣做有什麼問題麼?
    有一個奇怪的問題是編譯的時候既會使用 .mozconfig 裡面的 FLAGS ,又會使用環境變量裡面 export 過的 FLAGS ,真是奇怪。

    回覆

  2. orange
    三月 28, 2009 @ 23:42:52

    > 不知道這樣做有什麼問題麼?
    不清楚,這些只是參考MDC上面的
    如果這樣也可以正常作用 那就ok
    主要是不清楚使用自己平常就在用的profile編 會不會出現問題
    用空白的會比較好

    回覆

  3. nasofe
    三月 29, 2009 @ 12:24:01

    換了若干種編譯方式,都發現在第二次編譯 xpcom/io/nsPipe3.cpp 的時候出現問題,也不知道是怎麼回事,通過使用保守的 CFLAS 和空白配置文件跑 pgo 均無效(出現同樣的錯誤),可能是 .mozconfig 裡面 disable 了一些東西。我的是 Intel prescoot 的 CPU ,gcc 4.3 on debian,不知道你有沒有遇到這些問題。

    回覆

  4. orange
    三月 29, 2009 @ 13:17:39

    沒碰過這類問題
    能給的建議就只有到obj資料夾 清一清(make distclean)
    或者你可以用 gcc 4.2來編看看

    回覆

  5. nasofe
    四月 03, 2009 @ 19:55:16

    換了 gcc 4.2 出現類似的問題。
    發現好像是如果跑 pgo 的時間越長,出現這個問題的幾率越大,我試過馬上關掉,結果沒問題。
    問題的原因在於某個模塊的執行次數被記為負數,也不知道是不是溢出導致的。
    其中最有可能出現問題的是 nsSubstring.cpp:314 和 nsPipe3.cpp:1333 者兩個位置(估計是非常繁忙的位置了),執行次數不是被記為 -1 ,就是 -2 。如果執行次數超過了數值的定義範圍,或者說上一個數據過大,可能會出現這種問題吧。
    希望你可能跑 pgo 跑得久一些,或者直接用目前的配置文件來跑(可以大大的加大執行次數),看看會不會遇到這種問題。我每次跑 40 分鐘,算是比較極端了,而且磁盤緩存開得很大,歷史記錄保持 90 天(這樣應該會有很多的 io 操作吧,特別在搜索歷史記錄的時候)。
    不可以做極致的優化,我還是覺得挺不爽的。

    回覆

  6. Lawliet
    五月 06, 2009 @ 19:42:06

    您好

    請教一下,如果要改圖標還有名字
    然後再整和一些擴充套件應該怎麼做?
    謝謝!

    回覆

    • orange
      六月 01, 2009 @ 13:27:31

      你在Firefox 裡面搜尋一下 *.png (沒錯圖標FX用的是png檔)
      會出現一些檔案實際上用哪些檔案是依據你的設定,你可以自己試試看
      整合套件我不清楚 你可以到moztw.org詢問

      回覆

  7. Trackback: Firefox3.5PGO手动编译笔记 | Wandsea.com
  8. nasofe
    十二月 02, 2009 @ 23:16:23

    换上了比较新的机器来尝试用自己的配置文件编译,结果发现只要不让程序的某一部分运行过多使得运行计数溢出就好了。
    用自己的配置文件去跑 pgo 可以获得客观的性能提升,在实际使用上可以感受到。

    回覆

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: