Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
阅读:10335回复:63

VC2010編譯Firefox 7.0 PGO卡在二次編譯(已解決)

楼主#
更多 发布于:2011-09-26 19:25
我的環境是win7 x32 4GB, VC++ 2010 Express
編譯Firefox 7.0 with PGO

目前的問題是我一次編譯可過
也就是編譯過程有到跳出Firefox跑sunspider這邊
跑完過了幾分鐘,編譯畫面停止刷新
make等相關進程不再佔用CPU資源
最後停在這裡

图片:2011-09-26_192152.png



查看dist目錄裡面一次編譯結速後的binary,是可以執行的
但就是二次編譯這樣卡住
請問有哪位大俠知道我的編譯出了什麼問題嗎?

這是我的mozconfig
. $topsrcdir/browser/config/mozconfig
#mk_add_options MOZ_PACKAGE_NSIS=1
ac_add_options --enable-application=browser
#ac_add_options --enable-optimize="-O2 -GL -arch:SSE2 -GS"
ac_add_options --enable-optimize="-O2 -GL -arch:SSE2"
#ac_add_options --enable-profile-guided-optimization
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --disable-installer --disable-updater --disable-update-channel
ac_add_options --disable-accessibility
#ac_add_options --enable-update-packaging
#ac_add_options --disable-vista-sdk-requirements
#ac_add_options --disable-static
#ac_add_options --with-l10n-base=/lang
#ac_add_options --enable-ui-locale=zh-TW
#ac_add_options --enable-official-branding
#
## form tete009
#ac_add_options --disable-auto-deps
#ac_add_options --disable-jemalloc
ac_add_options --disable-crashreporter
#ac_add_options --disable-activex-scripting
#ac_add_options --disable-activex
#
## PGO build
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/ff-pgo
mk_add_options PROFILE_GEN_SCRIPT='$(PYTHON) $(MOZ_OBJDIR)/_profile/pgo/profileserver.py'
#mk_add_options PYTHONPATH='$(OBJDIR)/_profile/pgo'
#mk_add_options MOZ_CO_PROJECT=browser
mk_add_options MOZ_MAKE_FLAGS="-j4"
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
1楼#
发布于:2011-09-26 19:25
Re: VC2010編譯Firerfox 7.0 PGO卡在二次編譯
剛在Mozilla US找到一個跟我有同樣問題的人
http://forums.mozillazine.org/viewtopic ... &t=2174999

問題描述跟我完全一樣
一次編譯成功,二次編譯卡住
make沒有佔用任何cpu資源,也沒有得到任何error
似乎跟mk_add_options MOZ_MAKE_FLAGS參數有關
我改成-j1重新編譯一次再回來
dongyuanxun
非常火狐
非常火狐
  • UID28632
  • 注册日期2009-04-19
  • 最后登录2013-02-14
  • 发帖数898
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2011-09-26 19:25
Re: VC2010編譯Firerfox 7.0 PGO卡在二次編譯
不好说
msys的make bug多多
主要表现在线程操作上

所以出问题就改为-j1
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
3楼#
发布于:2011-09-26 19:25
Re: VC2010編譯Firefox 7.0 PGO卡在二次編譯
改成-j1後還真的編譯成功了
只是同硬件下,linux用gcc 4.6.1 -O3 -j5
編譯PGO只要54分鐘
VS2010 -O2 -j1要148分鐘....

性能上比不上tete009跟PcX
接下來就要跟dongyuanxun您多多請教了
還請您包涵

謝謝!
dongyuanxun
非常火狐
非常火狐
  • UID28632
  • 注册日期2009-04-19
  • 最后登录2013-02-14
  • 发帖数898
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2011-09-26 19:25
Re: VC2010編譯Firefox 7.0 PGO卡在二次編譯
主要是windows的bash比linux要慢的多(和内核有关)
Linux下编译很快的

你的linux开关也很保守嘛,在linux下,lto可以尝试使用嘛,加上gold链接器和lto插件,性能不可同日而语
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
5楼#
发布于:2011-09-26 19:25
Re: VC2010編譯Firefox 7.0 PGO卡在二次編譯
不知道是sorce code的問題還是gcc的問題
我在Firefox 4以前用的參數是比較高的
但後來不知道怎麼搞的-march=i686會報錯
改成-march=core2就又正常,有幾個開關
-O3 -Ofast時好時壞,有的時候編譯會error
有的時候又可以過,但亦有時性能反而下降
反而打libjpeg-turbo patch,顯著提昇render性能
提速的感覺還比較明顯



我接著要來編譯您的betterpgo提速方法
http://code.google.com/p/pcxfirefox/wiki/firefox5VC2010

我將原本的老版本的sunspider去掉
添加了以下
<head>
              <meta http-equiv="refresh" content="0;url=https://krakenbenchmark.mozilla.org/kraken-1.1/driver.html" />

             </head>
<head>
              <meta http-equiv="refresh" content="0;url=
http://www.webkit.org/perf/sunspider-0.9.1/sunspider-0.9.1/driver.html" />
             </head>

<head>
              <meta http-equiv="refresh" content="0;url=http://v8.googlecode.com/svn/data/benchmarks/v6/run.html" />
             </head>


目前還沒有編譯
我對於ff-src/build/pgo/index.html內容有些疑問
看了其他帖,您有提高關於延遲時間
請問這個延遲時間是這個部分嗎?
var list =
     [
  "betterpgo/v8_suite.html",
  "betterpgo/sunspider_91.html",
  "betterpgo/Kraken_11.html"
     ];
 var interval = 100000; // 100000
 var idx = 0;
 var w;


紅色的部份預設是3000; // 15000
我的理解是3秒間隔,跟每個減隔最常有15秒可供測試
不知我的理解是否正確?
dongyuanxun
非常火狐
非常火狐
  • UID28632
  • 注册日期2009-04-19
  • 最后登录2013-02-14
  • 发帖数898
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
6楼#
发布于:2011-09-26 19:25
因为gcc的lto有sse2的bug嘛,所以一般加入-msse2就行了,其他情形具体情况具体分析。

不知道你说的libjpeg-turbo patch是什么,能提供吗?

interval那个建议改个较大的数,3000就是3s,跑比较长的测试我估计15s都跑不完……

ps:FF7已经在FTP上了,我会等tete009编译完再进行编译,这样我容易比对
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
7楼#
发布于:2011-09-26 19:25
libjpeg-turbo可以加速linux上圖檔的渲染
貌似在windows下是不起作用的

這是AUR上的Firefox-PGO
我的linux自編譯版就是基於這個套件的patch及它最初的.mozconfig
https://aur.archlinux.org/packages.php?ID=22296
http://libjpeg-turbo.virtualgl.org/
https://bbs.archlinux.org/viewtopic.php?id=73422&p=1


另外再請教下幾個問題
我用您的betterpgo編譯成功
但性能貌似只有小幅提昇(或心理作用?)
sunspider成績持平
V8 benchmark及Kraken小幅度提昇
但依然不及您的6.0.2版的性能
性能提昇不顯著,體積反而卻增加了不少
http://www.4shared.com/file/k6s_XUGG/fi ... -sse2.html?

第一次編譯結束後彈出窗口
貌似我的批次編寫錯誤
並沒有進行自動測試我所安排的三個測試
後來這三個測試,我是在緊張的情況下手動進行
三個測試均被中段一次,但後來還是有完整跑完測試一次

是否改用您編寫的這個腳本
在進行一次編譯
就可在獲得性能提昇?
http://code.google.com/p/pcxfirefox/sou ... Fbetterpgo

謝謝!
dongyuanxun
非常火狐
非常火狐
  • UID28632
  • 注册日期2009-04-19
  • 最后登录2013-02-14
  • 发帖数898
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
8楼#
发布于:2011-09-26 19:25
其实改interval的那个是我在FF5编译时采用的方法,这个好处是能够自动化编译,缺点就是测试不均衡,有的跑完还有一大堆时间,有的时间到了还没跑完,而且不要修改source code的,要改obj文件夹的pgo部分,因为他原来有个复制操作,我不知道在哪个makefile.in里体现的,没去认真找。所以我编译6的时候就使用vbs强制中断,然后自行运行测试了。
体积变大的话增加链接消去开关试试,即加入
export MOZ_OPTIMIZE_LDFLAGS="-opt:ref,icf"
mk_add_options MOZ_OPTIMIZE_LDFLAGS="-opt:ref,icf"

一般不会变得太大
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
9楼#
发布于:2011-09-26 19:25
謝謝指教

在linux上可以自行編寫腳本,暫停老版本sunspider測試
運行自己想要的測試

.mozconfig裡PGO的地方修改為
mk_add_options PROFILE_GEN_SCRIPT="sh /home/lawliet/run-firefox.sh"


然後新增腳本,內容為
export NO_EM_RESTART=1
mkdir $OBJDIR/_profileprofile
$OBJDIR/dist/bin/firefox -no-remote -profile $OBJDIR/_profileprofile


我在linux下編譯的firefox已經應用您的betterpgo
晚一點繼續折騰win平台的betterpgo
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
10楼#
发布于:2011-09-26 19:25
請問一次編譯後,手動開啟調教的那個firefox究竟是哪個目錄的才對?
在@TOPSRCDIR@/dist/bin跟@TOPSRCDIR@/dist/chrome裡面都有firefox
也都可以執行

我開啟@TOPSRCDIR@/dist/bin裡頭的firefox進行手動調教
編譯完後,調教的項目似乎沒有任何性能提昇(至少分數上看不出來)
與您的自編譯版有顯著的差距
請問我還有什麼地方沒有做到?

謝謝
dongyuanxun
非常火狐
非常火狐
  • UID28632
  • 注册日期2009-04-19
  • 最后登录2013-02-14
  • 发帖数898
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
11楼#
发布于:2011-09-26 19:25
应该是/dist/bin
奇怪,你看看历史记录,pgo信息是否进行合并了

有时pgomerge会有这样的bug,你可能需要把采集到的pgo信息复制到各个文件的编译obj目录里去

我过一会儿开始编译FF7,暂时先用的tete009的
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
12楼#
发布于:2011-09-26 19:25
我剛剛用舊版本sunspider測試
也就是自動開窗運行腳本
我追蹤了那個自動開啟的firefox窗口
目錄是在/dist/firefox/firefox.exe

請問如果是因為bug因素影響
想請問我應該從哪裡提取pgo採集的信息?
又應該將這些信息複製到哪一個目錄內?
謝謝!
dongyuanxun
非常火狐
非常火狐
  • UID28632
  • 注册日期2009-04-19
  • 最后登录2013-02-14
  • 发帖数898
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
13楼#
发布于:2011-09-26 19:25
pgo信息即pgc扩展名的那些
pgc一般要放到pgd一起的地方
比如
firefox?.pgc就放到firefox.pgd的目录里
其他信息以此类推

所以你用dist/bin或者dist/firefox都是一样的
Lawliet
火狐狸
火狐狸
  • UID34414
  • 注册日期2010-11-03
  • 最后登录2017-04-02
  • 发帖数201
  • 经验13枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
  • 忠实会员
14楼#
发布于:2011-09-26 19:25
編譯前再請教一下
tete009的那噱補丁,跟您wiki上的那個添加jemalloc
這些會提高性能嗎?
上一页
游客

返回顶部