引用 | 編輯
aa
2005-04-30 10:22 |
樓主
▼ |
||
x0
轉載自 http://www.cnfug.org/journal/archives/000076.html關於FreeBSD 5優化的補充 Neo-Match <neo_match@hotmail.com> 還記得上一次看到關於FreeBSD 5優化的文章是1年前,也是我剛剛起步學UNIX的時候。時間飛駛,在這一年裡我學到了很多FreeBSD和UNIX的知識,我對FreeBSD如何性能最大化更是感興趣。如今FreeBSD已經替代了我的Windows2000,成為我電腦裡唯一個OS。經驗秘笈不敢獨享,在此願跟所有FreeBSD發燒友切磋,如有不當之處,歡迎指出批評。 ·本文假設讀者已經閱讀過FreeBSD安裝手冊。 ·閱讀本文時,請務必參考安裝優化文章。 ·本文遵循GPL協議。 ·本文遵循BSDL協議。 ·歡迎其他作者結合本文內容寫出各種FreeBSD優化文章。 一、安裝(sysinstall) 1、Distribution中,僅選擇minimal後,選擇Customization。添加man,出現問題時可以查看命令參數;添加src,之後cvsup可以加快速度,不必讀取重複的文件。 2、Users中,添加用戶後,把用戶路徑中的/home/abc改為/usr/abc。因為/usr的容量大。或者還可以通過增大/home的容量,不過比較麻煩。 然後,要把shell改為csh,為了使用方便(也為了本文第七部分的設置)。 二、編譯優化(make.conf) 注意:要屏蔽某個boolean選項,並不是標記no或false!而是整行刪掉! 1、編譯器選項 CPUTYPE=athlon-xp ##本人使用AthlonXP 2500+,不同的CPU請參考man make.conf CFLAGS+= -mfpmath=sse -mmmx -msse -m3dnow -maccumulate-outgoing-args -minline-all-stringops ## 不建議使用O2、O3、Os的優化,因為不是全部應用程序可以穩定工作於O2、O3、Os。況且最多僅獲得7%的額外性能。 ## CFLAGS的默認為"-O1 -pipe",不需要覆蓋,所以使用+=。 ## 不建議使用-f...系列優化,因為不是全部應用程序可以對此穩定工作。 ## -mfpmath=sse: PentiumIII兼容的CPU可以打開-mfpmath=sse來代替傳統i387的浮點運算,加快速度。參閱CPU產品手冊來確定CPU是否含有SSE功能。 ## -mfpmath=pni: Pentium4 Prescott兼容的CPU可以打開-mfpmath=pni來代替傳統i387的浮點運算,加快速度。參閱CPU產品手冊來確定CPU是否含有PNI功能。 ## -mmmx: 打開mmx指令來增加代碼性能。參閱CPU產品手冊來確定CPU是否含有MMX功能。適用於PentiumMMX兼容CPU。 ## -msse: 打開sse指令來增加代碼性能。參閱CPU產品手冊來確定CPU是否含有SSE功能。適用於PentiumIII兼容CPU。 ## -msse2: 打開sse2指令來增加代碼性能。參閱CPU產品手冊來確定CPU是否含有SSE2功能。適用於Pentium4兼容CPU。 ## -mpni: 打開pni指令來增加代碼性能。參閱CPU產品手冊來確定CPU是否含有PNI功能。適用於Pentium4 Prescott兼容CPU。 ## -m3dnow: 打開3DNow!指令來增加代碼性能。參閱CPU產品手冊來確定CPU是否含有3DNow!功能。適用於K6、Athlon兼容CPU。 ## -maccumulate-outgoing-args -minline-all-stringops 通過減少某些動作來實現加速,經作者實驗,比較穩定。 CXXFLAGS+= -fmemoize-lookups -fsave-memoized ## make.conf提到的C++代碼優化。 2、系統編譯選項 KERNCONF=(FILENAME) ## 內核配置文件名,將(FILENAME)更改為自己的內核文件名。 NOINET6=true ## 盡量不使用用IPV6協議。 NOATM=true ## 盡量不使用ATM,本選項僅適用於非ADSL用戶。 NO_SENDMAIL=true ## 盡量不使用SENDMAIL。 NOGAMES=true ## 不安裝所有遊戲 NO_I4B=true ## 盡量不使用ISDN For BSD。 NO_IPFILTER=true ## 盡量不使用IP Filter。 BATCH=yes ## 安靜編譯,編譯時跳過所有提問。適用於某些隔夜一次性編譯程序的用戶。 3、X-Window編譯選項 XFREE86_VERSION=4 ## 盡量使用4.3版本的X-Window WITH_SETUID_LUIT=yes ## 不使用本項的話,運行xterm會出現luit錯誤的問題. WITH_GTK2=yes ## 盡量使用GTK2為gtk應用程序的運行庫 USE_MMX_ASM=yes ## 編譯Xfree86時,盡量使用MMX代碼,僅適用於PentiumMMX兼容CPU. USE_3DNOW_ASM=yes ## 編譯Xfree86時,盡量使用3DNOW代碼,僅適用於K6、Athlon兼容CPU. WITHOUT_KDE_MENUS=yes ## 使用GNOME時,不添加KDE程序在菜單上。 4、多媒體編碼選項 WITH_CDPARANOIA=yes WITH_AALIB=yes WITH_ESOUND=yes WITH_FAAD=yes WITH_FLAC=yes WITH_FREETYPE=yes WITH_GDKPIXBUF=yes WITH_GSM=yes WITH_HERMES=yes WITH_JPEG=yes WITH_LADSPA=yes WITH_LAME=yes WITH_LIBA52=yes WITH_LIBAUDIOFILE=yes WITH_LIBCACA=yes WITH_LIBFAME=yes WITH_LIBMIKMOD=yes WITH_LIBMPEG2=yes WITH_LIBMUSICBRAINZ=yes WITH_LIBSHOUT=yes WITH_LIBSIDPLAY=yes WITH_LIBSNDFILE=yes WITH_LIBTHEORA=yes WITH_MAD=yes WITH_NAS=yes WITH_PANGO=yes WITH_PNG=yes WITH_SDL=yes WITH_SMOOTHWAVE=yes WITH_SPEEX=yes WITH_SWFDEC=yes WITH_VORBIS=yes WITH_VORBISIDEC=yes WITH_XINE=yes WITH_XVID=yes ## 以上所有多媒體選項僅在應用程序支持時打開。 4、應用程序編譯選項 WANT_HUGE_STACK_SIZE=yes ## 為Python代碼的應用程序提供巨大的Stack。 WITH_GDM=yes ## 為某些窗口管理器提供GDM鏈接。 WITHOUT_MAILNEWS=yes ## 取消Mozilla的郵件新聞功能,加快編譯時間。 WITHOUT_COMPOSER=yes ## 取消Mozilla的網頁編輯功能,加快編譯時間。 WITHOUT_LDAP=yes ## 取消Mozilla的LDAP功能,加快編譯時間。 WITHOUT_CHATZILLA=yes ## 取消Mozilla的IRC聊天功能,加快編譯時間。 WITHOUT_XMLTERM=yes ## 取消Mozilla的XML終端功能,加快編譯時間。 #WITH_RTC=yes ## 為某些應用程序提供實時時鐘支持,但可能會造成某些多媒體程序不穩定。 WITH_GLX=yes ## 為某些應用程序提供GLX加速繪圖支持。 WITH_TTF_BYTECODE_ENABLED=yes ## 為某些應用程序提供雙字節支持。 WITH_OPTIMIZED_CFLAGS=yes WITH_OPTIMIZED_CXXFLAGS=yes WITH_OPTIMIZE=yes ## 盡量使用更高級編譯優化 三、內核優化(make kernel) options PQ_HUGECACHE ## 為1024k二級緩存的CPU提供支持 options PQ_LARGECACHE ## 為512k二級緩存的CPU提供支持 options PQ_MEDIUMCACHE ## 為256k二級緩存的CPU提供支持 options PQ_SMALLCACHE ## 為128k二級緩存的CPU提供支持 options CPU_ATHLON_SSE_HACK options CPU_ENABLE_SSE ## 為Athlon系列CPU提供SSE支持 options CPU_SUSP_HLT ## 打開CPU空閒節能。 options CPU_UPGRADE_HW_CACHE options CPU_WT_ALLOC options NO_MEMORY_HOLE ## AMD系列CPU優化 ## 某些顯卡可以打開DRM支持來加快顯示速度,請參考/usr/src/sys/conf/NOTES和/usr/src/sys/i386/conf/NOTES,本文省略。 四、啟動優化(loader.conf) autoboot_delay="2" ## 設置啟動等待時間為2秒。 hw.ata.atapi_dma=1 ## 打開ATA33以上接口的硬盤的DMA傳輸,加快存取速度。 kern.ipc.maxsockets="16384" ## 增大線程間套接數量 net.inet.tcp.tcbhashsize="2048" ## 增大TCP控制塊數量 beastie_disable="YES" ## 關閉小惡魔圖像啟動菜單 五、系統首選項(rc.conf) background_dhclient="YES" ## 不等待DHCP執行完畢,加快啟動速度。 keyrate="fast" ## 最大化鍵盤速率 sendmail_enable="NONE" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" ## 關閉SENDMAIL clear_tmp_enable="YES" ## 按時清除/var/tmp文件 tcp_extensions="YES" ## 擴展TCP 六、系統資源優化(sysctl.conf) security.bsd.see_other_uids=0 ## 不允許用戶看到所有系統進程 kern.ipc.maxsockbuf=8388608 ## 線程套接字緩衝區 kern.ipc.shm_use_phys=1 ## 僅為線程提供物理內存支持,需要256兆以上內存。 kern.ipc.shmmax=67108864 ## 線程可使用的最大共享內存 kern.ipc.shmall=32768 ## 最大線程數量 kern.coredump=0 ## 程序崩潰時不記錄 net.local.stream.sendspace=65536 net.local.stream.recvspace=65536 ## 本地數據流接收和發送空間 net.local.dgram.maxdgram=16384 ## 本地數據包最大數量 net.local.dgram.recvspace=65536 ## 本地數據包接收空間 net.inet.tcp.rfc1644=1 net.inet.tcp.rfc3042=1 net.inet.tcp.rfc3390=1 ## 某些加快網絡性能的協議,請參考RFC文章。 net.inet.tcp.mssdflt=1460 ## 數據包數據段大小,ADSL為1452。 net.inet.tcp.sendspace=65536 net.inet.tcp.recvspace=1048576 ## 網絡數據接收和發送空間 net.inet.tcp.inflight_enable=1 ## 為網絡數據連接時提供緩衝 net.inet.tcp.minmss=1460 ## 數據包數據段最小值,ADSL為1452。 net.inet.raw.maxdgram=65536 ## 本地數據最大數量 net.inet.raw.recvspace=65536 ## 本地數據流接收空間 七、環境設置(.cshrc) alias ls ls -GF ## 彩色化ls setenv EDITOR ee ## 默認編輯器為ee setenv PAGER less ## 默認分頁器為less,比more要方便。 set nobeep set prompt = '%n@%/%# ' set filec set autolist ## 這幾行設置我先不解釋,不過我相信你肯定喜歡,自己去研究那是什麼吧。特別是最後一行。 八、編譯的緩存(ccache) CCACHE是為程序編譯提供緩存,通過減少重複代碼編譯次數,加快編譯時間。 安裝過程: su cd /usr/ports/devel/ccache/ make install clean cd /usr/ mkdir ccache cd /usr/sbin ln -s /usr/local/bin/ccache gcc ln -s /usr/local/bin/ccache cc ln -s /usr/local/bin/ccache c++ ln -s /usr/local/bin/ccache g++ ln -s /usr/local/bin/ccache cpp echo "setenv CCACHE_DIR /usr/ccache" >> /root/.cshrc rehash exit 最後可以通過運行ccache -s來觀看當前編譯狀況。 好了,現在就可以cvsup系統代碼和ports tree了。還不趕快開始編譯你的FreeBSD 5? 注:任何轉載或摘抄請保留作者信息和註明文章出處(中文FreeBSD用戶組 http://www.cnfug.org) 相關評論 -------------------------------------------------------------------------------- TOLLY 在 May 12, 2004 01:14 PM 說道: 六、系統資源優化(rc.conf) 是否應該為?: 六、系統資源優化(sysctl.conf) -------------------------------------------------------------------------------- Neo-Match 在 May 12, 2004 01:44 PM 說道: 是的,應該為sysctl.conf。 還有,WITH_RTC=yes可能會造成某些多媒體程序不穩定!請註釋掉! -------------------------------------------------------------------------------- Neo-Match 在 May 12, 2004 01:46 PM 說道: 另外,如果在普通的用戶環境下設置CCACHE_DIR=/usr/ccache,不用進入超級用戶模式就可以觀察當前編譯情況。 -------------------------------------------------------------------------------- Matthew 在 May 12, 2004 04:08 PM 說道: 好的,我把文章修改一下,感謝大家的意見。 -------------------------------------------------------------------------------- i2era 在 May 12, 2004 08:06 PM 說道: 剛裝完的系統沒有/home,可以建個/usr/home,然後ln -s /usr/home /home -------------------------------------------------------------------------------- newauh 在 May 12, 2004 08:53 PM 說道: sysctl.conf 好像有點問題 我改了後 ssh 登陸不上去了 -------------------------------------------------------------------------------- Gavin Mu 在 May 12, 2004 09:25 PM 說道: make.conf 中的 NO_SENDMAIL=true ## 盡量不使用SENDMAIL。 是這個含義麼?如果這樣的話,系統安裝不是沒有 sendmail 了?我的感覺應該是 make world 的時候不重新編譯 sendmail。 不是很確定,呵呵。 -------------------------------------------------------------------------------- Neo-Match 在 May 12, 2004 10:01 PM 說道: 歡迎大家提意見。大家一起修改拉,哈哈! -------------------------------------------------------------------------------- Neo-Match 在 May 12, 2004 10:08 PM 說道: "ls -GF"改成 "ls -FGw",可以幫助顯示中文。 還有,sysctl.conf修改後不能登陸SSH的情況我還沒有遇到,等我在做幾個測試。哪位朋友有建議的話,希望告訴我一下。 -------------------------------------------------------------------------------- Neo-Match 在 May 12, 2004 10:13 PM 說道: 關於sysctl.conf修改後不能登陸SSH的情況。我公佈一下我的sysctl.conf和loader.conf,看有沒有幫助。因為我的內存是1GB,所以有些設置的數值有點偏大。可以嘗試減小一下試試。 #sysctl.conf security.bsd.see_other_uids=0 kern.ipc.maxsockbuf=8388608 kern.ipc.shm_use_phys=1 kern.ipc.shmmax=67108864 kern.ipc.shmall=32768 kern.coredump=0 net.local.stream.sendspace=65536 net.local.stream.recvspace=65536 net.local.dgram.maxdgram=16384 net.local.dgram.recvspace=65536 net.inet.ip.intr_queue_maxlen=100 net.inet.tcp.rfc1644=1 net.inet.tcp.rfc3042=1 net.inet.tcp.rfc3390=1 net.inet.tcp.mssdflt=1460 net.inet.tcp.sendspace=65536 net.inet.tcp.recvspace=1048576 net.inet.tcp.inflight_enable=1 net.inet.tcp.minmss=1460 net.inet.raw.maxdgram=65536 net.inet.raw.recvspace=65536 vm.defer_swapspace_pageouts=1 vm.disable_swapspace_pageouts=1 vfs.usermount=1 #loader.conf autoboot_delay="2" hw.ata.atapi_dma=1 kern.ipc.maxsockets="16384" kern.ipc.nmbclusters="65536" kern.ipc.nmbufs="1024768" kern.ipc.nsfbufs="16384" net.inet.tcp.tcbhashsize="16384" beastie_disable="YES" -------------------------------------------------------------------------------- Gavin Mu 在 May 12, 2004 10:38 PM 說道: 又想到一個問題,很關鍵哦,嘿嘿 就是 make kernel 和 make world 時候的優化,應該和平時的是不一樣的,作者有沒有類似的經驗呢?呵呵。 -------------------------------------------------------------------------------- Neo-Match 在 May 12, 2004 11:06 PM 說道: 你說的那是COPTFLAG,是關於kernel的,所以我沒有改動。 那個參數最好不要優化,會造成系統不穩定。 -------------------------------------------------------------------------------- jeffgao 在 May 13, 2004 03:27 AM 說道: 在kernel的配置文件裡可以加上這一行。 makeoptions COPTFLAGS="-O2 -pipe -funroll-loops -ffast-math" 我實際的測試,在FreeBSD 5.2.1-RELEASE上以這樣的參數編譯的kernel沒有問題 -------------------------------------------------------------------------------- jeffgao 在 May 13, 2004 03:29 AM 說道: 此外,可以執行 ln -sf aj /etc/malloc.conf 這樣,在5.x上的malloc性能會有提高。 -------------------------------------------------------------------------------- Neo-Match 在 May 13, 2004 03:58 AM 說道: 我也試過"-O2"和"-ffast-math"到COPTFLAG,但是偶然會出現崩潰,所以沒有使用。 -------------------------------------------------------------------------------- Neo-Match 在 May 13, 2004 04:14 AM 說道: malloc的debugging選項在5.1以上的版本就已經disable了。 -------------------------------------------------------------------------------- Neo-Match 在 May 13, 2004 04:23 AM 說道: jeffgao,你是University of Calgary麼? 我在University of Waterloo,在安達略省。 -------------------------------------------------------------------------------- Neo-Match 在 May 13, 2004 07:43 AM 說道: #這是我的make.conf: ## Compiler Options CPUTYPE=athlon-xp CFLAGS+= -mfpmath=sse -mmmx -msse -m3dnow -maccumulate-outgoing-args -minline-all-stringops CXXFLAGS+= -fmemoize-lookups -fsave-memoized ## System Options KERNCONF=MACHINE NOINET6=true NOATM=true NO_SENDMAIL=true NOGAMES=true NO_I4B=true NO_IPFILTER=true NO_LPR=yes BATCH=yes ## X Options XFREE86_VERSION=4 WITH_SETUID_LUIT=yes WITH_GTK2=yes USE_X86_ASM=yes USE_MMX_ASM=yes USE_3DNOW_ASM=yes WITHOUT_KDE_MENUS=yes ## Multimedia Options WITH_CDPARANOIA=yes WITH_AALIB=yes WITH_ESOUND=yes WITH_FAAD=yes WITH_FLAC=yes WITH_FREETYPE=yes WITH_GDKPIXBUF=yes WITH_GSM=yes WITH_HERMES=yes WITH_JPEG=yes WITH_LADSPA=yes WITH_LAME=yes WITH_LIBA52=yes WITH_LIBAUDIOFILE=yes WITH_LIBCACA=yes WITH_LIBFAME=yes WITH_LIBMIKMOD=yes WITH_LIBMPEG2=yes WITH_LIBMUSICBRAINZ=yes WITH_LIBSHOUT=yes WITH_LIBSIDPLAY=yes WITH_LIBSNDFILE=yes WITH_LIBTHEORA=yes WITH_MAD=yes WITH_NAS=yes WITH_PANGO=yes WITH_PNG=yes WITH_SDL=yes WITH_SMOOTHWAVE=yes WITH_SPEEX=yes WITH_SWFDEC=yes WITH_VORBIS=yes WITH_VORBISIDEC=yes WITH_XINE=yes WITH_XVID=yes WITH_SVGALIB=yes WITH_REALPLAYER=yes ## Application Options WANT_HUGE_STACK_SIZE=yes WITH_GDM=yes WITHOUT_MAILNEWS=yes WITHOUT_COMPOSER=yes WITHOUT_LDAP=yes WITHOUT_CHATZILLA=yes WITHOUT_XMLTERM=yes WITH_GLX=yes WITH_TTF_BYTECODE_ENABLED=yes WITH_OPTIMIZED_CFLAGS=yes WITH_OPTIMIZED_CXXFLAGS=yes WITH_OPTIMIZE=yes WITHOUT_RUNTIME_CPUDETECTION=yes CUPS_OVERWRITE_BASE=yes WITH_GNUTLS=yes ## Perl Options PERL_VER=5.6.1 PERL_VERSION=5.6.1 PERL_ARCH=mach NOPERL=yo NO_PERL=yo NO_PERL_WRAPPER=yo x0
|