使用 apt-get build 編譯你的 firefox [論壇 - Ubuntu 套件打包]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊

(1) 2 3 4 ... 10 »


使用 apt-get build 編譯你的 firefox
Anon:
apt-build 是個非常好用的工具。

首先安裝 apt-build

sudo apt-get install apt-build

接著會出現畫面要你選 最佳化強度,一般來說 medium 就可以了,然後選擇你的CPU型號作指令集的最佳化。

裝好 apt-build 之後,就可以使用 apt-build 來安裝軟體了,他會自動幫你安裝需要的 dev 庫,然後自動幫你作 configure , make , make install 的動作。

sudo apt-build install firefox -y --force-yes

加上 -y --force-yes 默認,然後電腦放著給他跑。

重新用P4加O2 compile過之後,開啟firefox真的變快了,大概快了1-2秒吧。


apt-build的延伸閱讀:
http://julien.danjou.info/article-apt-build.html

2007/2/9 5:40
應用擴展 工具箱
回覆: 使用 apt-get build 編譯你的 firefox
會員五級
註冊日期:
2008/4/9 14:04
所屬群組:
已註冊使用者
等級: 31
HP : 0 / 765
MP : 447 / 34617
EXP: 60
離線
這幾天也在玩這個東西。發現好像apt-build的中文討論並不多,在下就稍微班門弄斧一下,有錯誤請指正。

apt-build 有個配置檔案,位置在

/etc/apt/apt-build.conf

這個檔案很重要,當你在安裝apt-build時詢問你的設定,如果不滿意,可以在這邊更改。
在下的設置檔
--------------------------------------------------------

build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
mtune = -mtune=prescott
options = "-mmmx -msse -msse2"
make_options = "-j2"

---------------------------------------------------

安裝apt-build時詢問的問題,主要是設置Olevel與mtune這兩個項目,options與make_options的預設都是空白。
其實可以加以設置讓最佳化跑的更好些。
options由於我的cpu有sse2,因此將這些功能加上去,讓最佳化編譯時可以使用。其次為make_option參數,-j2表示我有兩個cpu可以同時執行編譯動作。

apt-build.conf 的修改資料來源:
http://www.linuxquestions.org/questions/debian-26/apt-build.conf....file-options-294569/

請參考。
如果用-O3會不穩定的人,請用-O2。
如果不確定自己的CPU,請下以下的指令

cat /proc/cpuinfo

然後察看下列網址

http://en.gentoo-wiki.com/wiki/Safe_Cflags

最底下有超連結,針對您的CPU做選擇之後進入,就可以查了。
我的CPU為intel系列,察看cpuinfo時顯示的是
cpu family : 15
model : 4
model name : Genuine Intel(R) CPU 3.40GHz (我的cpu是工程開發ES版,所以沒有正式名稱,其他P4 HT的朋友不要以為有問題)
因此查詢上面的網頁,顯示的是可以用
Pentium 4 (Prescott) / Celeron D
的選擇,其最穩定cflags參數也列出,這可以參考使用。
另外,想了解-o2 -3等參數的意義是什麼,請參考

http://en.gentoo-wiki.com/wiki/CFLAGS

這個網址說明。

大家一起build吧!! Go Go Go!!!

2009/3/6 12:59
應用擴展 工具箱
回覆: 使用 apt-get build 編譯你的 firefox
會員五級
註冊日期:
2008/6/15 2:56
所屬群組:
已註冊使用者
等級: 38
HP : 0 / 945
MP : 757 / 42265
EXP: 81
離線
哈我也在編譯看能不能把效能提高,這是我的cpu資料,apt-build.conf這樣寫不知是否對Q_Q

rossiliu你openoffice3.0編好了嗎?我有試過可以編譯成功,不過真的花1x小時,雖說我很少用,但感覺開檔速度有提升說!
cat /proc/cpuinfo

processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 47
model name : AMD Athlon(tm) 64 Processor 3000+
stepping : 0
cpu MHz : 1809.239
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt lm 3dnowext 3dnow up pni lahf_lm
bogomips : 3618.47
clflush size : 64
power management: ts fid vid ttp tm stc

build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
mtune = "-march=k8 -O2 -pipe -fomit-frame-pointer"
options = " "
make_options = " "

2009/3/7 19:45
應用擴展 工具箱
詹謨澤
回覆: 使用 apt-get build 編譯你的 firefox
Anon:詹謨澤
對於 apt-get build 劣者一直有一個問題,就是這個工具它真的是聰明到利用這一台電腦的硬體特性資訊去編譯所指定的 package 嗎? 還是只是依照當初所安裝的 distribution 去編譯?

假設當初是安裝 i386 的 distribution, 但是我的機器是 Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz, 而我現在要 apt-get build 的是 firefox 這個程式

這個時候, apt-get build 是依照 i386 去編譯 firefox 還是依照 Core2Duo 去編譯 firefox?

2009/3/7 20:33 | 75878 66430 9b1e1 2165b
應用擴展 工具箱
回覆: 使用 apt-get build 編譯你的 firefox
會員五級
註冊日期:
2008/4/9 14:04
所屬群組:
已註冊使用者
等級: 31
HP : 0 / 765
MP : 447 / 34617
EXP: 60
離線
hepha大~~~~
在下認為你的apt-build.conf好像有那麼一點問題。
----------------------------------------------------
build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
mtune = "-march=k8 -O2 -pipe -fomit-frame-pointer"
options = " "
make_options = " "
--------------------------------------------------------
其中的mtune應該不是C編譯器的參數,C編譯器的參數要放在option選項裏面才對。

mtune是設定cpu等級的部份。以我來說是P4 HT prescott系列,因此設定為prescott而不是設定為pentium4。

Olevel則是設定要用-O1 / -O2 / -O3 / -Os 的地方。

另外依照您提供的cpuinfo資訊,對照
http://en.gentoo-wiki.com/wiki/Safe_Cflags/AMD
來看,參數方面似乎很安全,除了-O3 的宣告與mtune裏面的-O2宣告互相衝突之外。(苦笑....mtune並不是放這個參數的)

我是還沒有加上-pipe等後面的參數就是了,這兩天gateway掛了,想辦法恢復原狀當中。過幾天再測試吧。

您的option參數或許還可以加入-mmmx -msse -msse2參數來利用浮點運算,甚至於還可以加上-m3dnow(針對您的CPU)。關於參數的部份,我找到這個討論:

http://www.mail-archive.com/debian-user@lists.debian.org/msg127988.html

藉著這個討論我找到了man gcc的指令去了解通盤的參數。gcc的說明檔預設是沒有安裝的,必須要
apt-get install gcc-4.2-doc
才能夠用man來看說明檔案。
針對應該可能用得到的參數我剪貼上來
-----------------------------------
i386 and x86-64 Options
-mtune=cpu-type -march=cpu-type
-mfpmath=unit -masm=dialect -mno-fancy-math-387 -mno-fp-ret-in-387
-msoft-float -mno-wide-multiply -mrtd -malign-double
-mpreferred-stack-boundary=num -mcld -mcx16 -msahf -mrecip -mmmx
-msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -msse4a
-m3dnow -mpopcnt -mabm -msse5 -mthreads -mno-align-stringops
-minline-all-stringops -mpush-args -maccumulate-outgoing-args
-m128bit-long-double -m96bit-long-double -mregparm=num
-msseregparm -mveclibabi=type -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs
-mcmodel=code-model -m32 -m64 -mlarge-data-threshold=num
-mfused-madd -mno-fused-madd

IA-64 Options
-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld
-mno-pic -mvolatile-asm-stop -mregister-names -mno-sdata
-mconstant-gp -mauto-pic -minline-float-divide-min-latency
-minline-float-divide-max-throughput
-minline-int-divide-min-latency -minline-int-divide-max-throughput
-minline-sqrt-min-latency -minline-sqrt-max-throughput
-mno-dwarf2-asm -mearly-stop-bits -mfixed-range=register-range
-mtls-size=tls-size -mtune=cpu-type -mt -pthread -milp32 -mlp64
-mno-sched-br-data-spec -msched-ar-data-spec
-mno-sched-control-spec -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-ldc
-mno-sched-control-ldc -mno-sched-spec-verbose
-mno-sched-prefer-non-data-spec-insns
-mno-sched-prefer-non-control-spec-insns
-mno-sched-count-spec-in-critical-path


-pipe
Use pipes rather than temporary files for communication between the
various stages of compilation. This fails to work on some systems
where the assembler is unable to read from a pipe; but the GNU
assembler has no trouble.


-fomit-frame-pointer
Don't keep the frame pointer in a register for functions that don't
need one. This avoids the instructions to save, set up and restore
frame pointers; it also makes an extra register available in many
functions. It also makes debugging impossible on some machines.

On some machines, such as the VAX, this flag has no effect, because
the standard calling sequence automatically handles the frame
pointer and nothing is saved by pretending it doesn't exist. The
machine-description macro "FRAME_POINTER_REQUIRED" controls whether
a target machine supports this flag.

Enabled at levels -O, -O2, -O3, -Os.
----------------------------------
大致上這些參數應該就夠用了吧~~
所以了,要最佳化參數,要稍微研究一下個參數的意思與cpuinfo裏面的資訊代表的是什麼意思,一個參數一個參數的試嚕。
我打算先從編譯比較快的小軟體先嘗試吧,沒問題了會拿firefox開刀試試看。
至於openoffice.org,上次失敗以後就懶的跑了,也許這次把參數抓好之後,會再跑一次也不一定。

--------------------------------------------------------------
詹謨澤您好
在下認為,軟體並沒有辦法聰明到什麼都知道,有些必要的資訊還是得要人去設定。比如說cpu的等級,這在安裝apt-build的時候,就會詢問你了。請先察看cpuinfo這個資訊之後,確認您的cpu型式即可。其次,最佳化的程度預設值都是-O2,而不是-O3,如果想要效率盡可能的提高,請用-O3。但是這個參數在某些機種上面會有不穩定的情況發生,因此請先測試沒問題才大量使用。

再來,您把kernel與應用程式的最佳化搞混了,kernel選用的是32bit (i386),應用程式也會是32bit的,不管你怎麼樣最佳化編譯都是如此。
但是32bit的核心也可以支援Core2Duo,那麼應用程式在最佳化時也可以利用核心支援的特性來最佳化執行效率。
雖然我不會寫程式,不過程式有個東西叫作執行株的東西,他可以有兩個以上的數量,用非常非常簡單的概念來看就是說,一個執行株等於一個執行指令,如果有兩個執行株就等於同一個時間,有兩個指令在執行。如果沒有針對您的Core2Duo來最佳化,執行株假設只有一個。最佳化後假設變成了4個(4個cpu上面都同時放一個執行指令),那麼運算速度理論上可以增加接近3倍(不包含I/O的速度)。而最佳化的程式碼在I/O上面有佔有優勢,是因為程式碼會針對您的環境來打造,因此最後的bin可執行碼,體積大小可能會小於氾用版本。體積小的情況之下,硬碟或者記憶體之間的I/O所需頻寬與時間也會降低,就變成了另外一種加速的效果。
重新編譯就是有這種迷人之處,也因此有另外一套發行版gentoo會採取全部都以原始碼的方式進行編譯安裝。
在下沒打算玩這麼大,針對時常用而且感覺效能還可以提升的應用程式,來最佳化編譯就好了。

以上是在下的粗淺見視,其他朋友如有發現錯誤請多多指教。

2009/3/8 3:10
應用擴展 工具箱
回覆: 使用 apt-get build 編譯你的 firefox
會員五級
註冊日期:
2008/6/15 2:56
所屬群組:
已註冊使用者
等級: 38
HP : 0 / 945
MP : 757 / 42265
EXP: 81
離線
剛剛找文章發現了這個彩蛋…
http://jim.blogsome.com/2005/06/08/super-cow-powers/
apt-build moo

        (__)    ~
         (oo)   /
     _____\/___/
    /  /\ / /
   ~  /  * /
     / ___/
*----/\
    /  \
   /   /
  ~    ~
..."Have you danced today? Discow!"...

apt-get moo

         (__) 
         (oo) 
   /------\/ 
  / |    ||   
 *  /\---/\ 
    ~~   ~~   
...."Have you mooed today?"...


aptitude moo

此軟體沒有復活節彩蛋程式。
aptitude -v moo

此軟體真的沒有復活節彩蛋程式。
aptitude -vv moo

我不是已經告訴你這個軟體真的沒有復活節彩蛋程式了嗎?
aptitude -vvv moo

停啦!
aptitude -vvvv moo

好啦,好啦,如果我給你復活節彩蛋,你是不是就閃人?
aptitude -vvvvv moo

好啦,你贏了。

/----\
-------/ \
/ \
/ |
-----------------/ --------\
----------------------------------------------
aptitude -vvvvvv moo

這是什麼? 這當然是一隻大象被一隻蛇吞掉。
aptitude -vvvvvvv moo

這是什麼? 這當然是一隻大象被一隻蛇吞掉。
=======================
我不是大大…我一直跟隨你編譯的腳步前進呢!看到豆芽菜就頭大,我不認識他,他也不甩我…
話說回來我改這樣對嗎?
mtune = " "
options = "-march=k8 -O2 -pipe -fomit-frame-pointer"

翻到一篇不錯的可以參考
GCC編譯優化指南
http://forum.ubuntu.org.cn/viewtopic.php?f=56&t=104071

2009/3/8 11:45
應用擴展 工具箱
回覆: 使用 apt-get build 編譯你的 firefox
會員四級
註冊日期:
2008/9/17 14:25
所屬群組:
已註冊使用者
等級: 19
HP : 0 / 467
MP : 150 / 20567
EXP: 71
離線
hepha 寫到:話說回來我改這樣對嗎?
mtune = " "
options = "-march=k8 -O2 -pipe -fomit-frame-pointer"

翻到一篇不錯的可以參考
GCC編譯優化指南
http://forum.ubuntu.org.cn/viewtopic.php?f=56&t=104071

我用的參數
-O3 -fforce-addr -march=athlon64 -pipe -fomit-frame-pointer

只差一個 -fforce-addr 而已
(在考慮3.1beta3 要不要改回-O2)

要再快一點可以試試PGO 可以再快20%以上,步驟很簡單但需要兩倍的編譯時間
如果懶的編可以試試看 intel系forcefox
athlon64(k8)系 可以用看看orangefox

2009/3/8 12:53
應用擴展 工具箱
回覆: 使用 apt-get build 編譯你的 firefox
會員五級
註冊日期:
2008/4/9 14:04
所屬群組:
已註冊使用者
等級: 31
HP : 0 / 765
MP : 447 / 34617
EXP: 60
離線
哇嗚~~~
感覺高手平常都是躲起來,必要的時候說幾句話,實在厲害。
orange大您提到的PGO可以比較快,這個部份可以多做解釋嗎?
在下不是很懂這個意思,是指編譯的時候用PGO指令?????

hepha
大家互相討論啊,被你挖出了一個很強的文件資料可以參考,這真的很棒!雖然我有看英文的gcc編譯參數說明文件,但是沒有中文版的說明來的清楚。有了這個參數,就可以更放膽子下去下參數測試了。
不過,您的mtune是不是設定成為
mtune = "athlon64"
指定cpu等級,會比較正確些呢?

補充一下
看了您給的那份參數說明文件之後,我衝很大的設定很多參數。(不是殺很大)

--------------------------------

build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
mtune = -mtune=prescott
options = "-mmmx -msse -msse2 -pipe -fomit-frame-pointer -falign-functions=64 -mfpmath=sse -m128bit-long-double -fweb "
make_options = "-j2"

----------------------------------

嘗試編譯smplayer之後,一切正常沒有什麼問題,嘗試編譯w32codecs,看影片也很正常,所以呢......衝了,把先前編譯的東西重新再編譯一次,現在正在背景當中跑....

再補充:
增加了-pipe 等參數之後,重新編譯的速度真的變快很多。
我重新編譯xorg / firefox / wine / sun-java-6 / xulrunner 這幾個常用且體積比較大的軟體,原本大概要四到5個小時吧,現在3個多小時就編完了。
恩.....晚上讓他跑openoffice.org好了,也許不用十幾個鐘頭。

2009/3/8 18:33
應用擴展 工具箱
回覆: 使用 apt-get build 編譯你的 firefox
會員四級
註冊日期:
2008/9/17 14:25
所屬群組:
已註冊使用者
等級: 19
HP : 0 / 467
MP : 150 / 20567
EXP: 71
離線
rossiliu 寫到:
哇嗚~~~
感覺高手平常都是躲起來,必要的時候說幾句話,實在厲害。
orange大您提到的PGO可以比較快,這個部份可以多做解釋嗎?
在下不是很懂這個意思,是指編譯的時候用PGO指令?????
不過,您的mtune是不是設定成為
mtune = "athlon64"
指定cpu等級,會比較正確些呢?

不會 只是一個代名詞,athlon64=k8
mtune是不用特定cpu才可用的『東西』 下去做最佳化;march是用特定cpu才可用的『東西』 下去做最佳化

也就是說march理論上對特定cpu最佳化的程度會比mtune好,但march最佳化後轉到其他cpu使用可能會出現問題
(如果是自己編的話就用march,要編給別人用就用mtune)

PGO簡單的說 就是先編譯一次 然後跑過一次,讓程式分析有什麼地方可以跳過、省略、捷徑之類的 寫在profile裡 之後再依據profile編譯第二次

編PGO的過程很簡單,只要有設定好的.mozconfig跟run-mozilla.sh
從頭到尾只要下一個指令 就可以
接下來只要等 [第一次編譯]->[跑一次]->[第二次編譯]
.mozconfig 設定好後 編譯過程是很無腦的

只不過.mozconfig可用設定太多 再加上目前 我在gcc 4.2 才能正常編譯出來 所以才一直沒寫如何編譯pgo
(gcc 4.3 只有偶然成功過一次,到FX 3.1 beta 2都是如此
還沒試過force給的patch
通常出現問題的部份是在剛開始編譯第二次的時候出現segment fault)

如果有人要看的話 等整理過後會把需要的東西 po上來
(build的說明都寫在mozilla develop center那裡)

2009/3/9 1:04
應用擴展 工具箱
路人X
回覆: 使用 apt-get build 編譯你的 firefox
Anon:路人X
我倒是用 -march=athlon64-sse3 K8 3000+ E6 版
關於GCC4.3 我倒是編譯都成功了,8.10 12月那時更新後就能完成編譯
3.1B2 忘了有沒有PATCH過
3.1B3 已放出原碼-測試版-再過不久就有正式版

現在用9.04編譯 3.1B2-B3 也沒發生失敗過
我有設定PGO,編譯一次也非常久3~4小時以上
最近換硬體編譯PGO,不用50分鐘就能完成

2009/3/9 2:53 | 75878 66430 9b1e1 2165b
應用擴展 工具箱

(1) 2 3 4 ... 10 »

 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.