全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1495
推到 Plurk!
推到 Facebook!

FreeBSD下的系統性能調優

 
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-01 11:15:29 IP:61.221.xxx.xxx 未訂閱
http://linux.computersci.net/forum/showthreaded.php?Cat=&Board=UBB31&Number=2510&page=0&view=expanded&sb=5&o=&fpart=1 FreeBSD下的系統性能調優 02/29/04 12:52 AM 發佈日期:2003-06-24 文摘內容: -------------------------------------------------------------------------------- 文摘出處:http://chinaunix.net/forum/viewtopic.php?t=98645 SYSTEM SETUP - DISKLABEL,NEWFS,TUNEFS,SWAP 當用disklabel(8)在你的硬碟上佈局文件系統時,重要的是要記住硬碟在傳送 資料時外磁軌比內磁軌快。d了利用這個特點,你應該把較小的文件系統和交 換區靠近外磁軌,隨後是較大的文件系統,最後是最大的文件系統。還有重要 的是把標準文件系統大小確定在當你要增加這台機器負荷時也不需要重定他 們的大小。我經常建立的文件系統的次序是128M的root,1G的swap,128M的 /var/tmp,3G的/usr,其餘的空間留給/home。 典型地,你應該把交換區大小定d2倍的記憶體大小。如果你沒有很多記憶體,那樣 的話,你將需要更多的交換區空間。不建議將交換區定在小於256M,當你確定 交換區大小的時候,你要考慮到將來可能要延伸記憶體。內核的VM(虛擬記憶體)換頁 演算法性能是准對交換區至少是記憶體大小2倍的條件進行優化的。配置太小的交換 區會導致VM頁面掃描的低效率,當記憶體擴充後,隨之也會導致問題。最後在一個 有多個SCSI硬碟的大系統上(或者有多個IDE磁片工作在多個IDE 控制器上), 我們強烈建議在每個驅動器上配置交換分區,每個交換分區的大小應該是幾乎 一樣的,內核能處理任意大小的交換區,但是內部資料結構放大到最大分區的4 倍大小。保持交換分區同樣的大小允許內核優化地將交換空間交叉分佈在N個 磁片上。不要擔心這樣做有點過份,交換區是UNIX的救星,甚至於你雖然通常不用 那l多交換區,在被迫重新妍吨妨e,它也可以給你時間去從一個出軌的程式中 把系統恢復過來。 怎樣d你的/var分區定大小主要依賴於你將怎樣使用這台機器。這個分區主要 存放郵箱,列印緩衝區和日誌文件。有些人甚至於把/var/log作d一個獨立的 分區(但是除非有特別的情況,這樣做不值得,只會浪費一個分區ID)。如果你這 台機器主要用做郵件或印表伺服器,或者運行一個大訪問量的WEB伺服器,你應 該考慮把這個分區建的更大一點,可能1G或更多。很容易低估日誌文件的存儲需 求。 確定/var/tmp的大小依賴於你將需要怎樣使用你的暫存檔案。128M是建議的最 小的尺寸。注意sysinstall將建立一個/tmp目錄,但是通常把/tmp作d/var/tmp 的連接是個好注意。d暫存檔案建立一個分區有兩個重要的原因: 首先,它減少 了系統崩潰後文件系統損壞的可能性,再就是減少一個出軌程式填滿[/var]/tmp 時影響其他重要子系統(mail,logging等等)的機會。填滿[/var]/tmp是經常發 生的問題。 在以前/tmp和/var/tmp是不同的東西,但是引入/var(和/var/tmp)是被程式師 引起的大迷惑,今天的程式間或使用一個或另一個,它們兩者變的沒有區別。 所以把它們變成一個臨時目錄是有道理的.然而,當你處理/tmp時,有一件事 情是你不想做的,就是把/tmp駐留在根分區上,導致根分區被填滿或崩潰後重 妙氻憟顙t統損壞. /usr分區存放大量用於支援系統的文件,子目錄/usr/local存放大量從ports(7) 安裝的文件.如果你不那l多使用ports,也不將系統源代碼(/usr/src)存放在 機器上,你可以d/usr節省1G的磁碟空間.相反,如果你安裝大量的ports(特 別是視窗管理和Linux仿真)建議你至少2G的/usr,如果你還要將系統源代碼放 在機器上,我們建議你3G的/usr,不要低估所需的空間,它會慢慢爬起來,讓你 大吃一驚. /home分區存放用戶自己的資料,我通常把餘下的空間留給這個分區. d什l要分區? d什l不建一個大的/分區就行了? 那樣我就不需要考慮分區大 小問題。有幾個原因顯示這不是個好注意。首先,每個分區都有不同的操作特徵, 分開它們有利於文件系統准對這些特徵調整它自己.例如,根和/usr分區主要是 讀操作,只有少量的寫,而大量的讀和寫可以發生在/var在/var/tmp。把小的但 是具有更繁忙的寫操作的分區分開,就不會影響讀操作居多的分區.再就是,把 寫操作居多的分區靠近磁片外側(例如,不是在一個大分區前,而是分區表後)有 利於對你經常需要的分區增加性能。你可能也需要在大分區中的I/O性能,但是 它們是那樣的大以至於把它們移到磁片外側也不會顯著增加性能,但是把/var移 到磁片外側會有顯著的不同. 正確分區你的系統允許你調整newfs(8)和tunefs(8)的參數。調整newfs(8)需要更 多的經驗,但是會帶來顯著的性能提高。有三個參數可以相對安全的調整: blocksize(塊尺寸),bytes/inode(每i節點位元組數)和cylinders/group(每組柱面 數). 當塊尺寸是8K或16K時,FreeBSD運行的最好.缺省的文件系統塊尺寸是8K。對於 一個大的分區使用16K塊尺寸是個好注意.這同樣需要你指定碎片(Fragment)大小。 我們建議碎片總是塊大小的1/8(其他的碎片尺寸測的不多)。newfs(8)選項是 newfs -f 2048 -b 16384。。。。使用更大的塊尺寸將導致緩衝區碎塊,降低性能. 如果大分區主要趨向於使用少量的大文件,例如資料庫文件。你可以增加 bytes/inode比例,它減少該分區的i節點的數量(最大可被建立的文件和目錄數量 )。減少文件系統i節點數量可以大大減少fsck(8)在系統崩潰後恢復的時間。不要 使用這個選項,除非你確實在這個分區存放大文件.如果你過度這樣做,你可能 會被文件系統依然有大量的空間而不能創建文件的事情所困擾。使用32768, 65536或262144 bytes/inode是建議的值。你可以調的更高,但是那只影響fsck的 恢復時間.例如,newfs -i 32768... 最後,增加cylinders/group比例可把i節點間距放的更近。這樣可以增加目錄性能 和減少fsck的是時間.如果你使用這個選項,我建議最大化。使用newfs -c999, 然後newfs報錯會告訴你最大可能的值. tunefs(8)可以進一步調整文件系統。這個命令可以運行在單用戶方式而不用重 新格式化文件系統。然而,這個程式可能是系統中最容易被濫用的程式。許多人 企圖通過把最小自由空間百份比設置d0來增加可使用的文件系統空間,這可 導致嚴重的文件系統碎片,我們不建議這樣做。實際上唯一值得使用的tunefs 選項是使用tunefs -n enable /filesystem 打開softupdates開關(注意:在5.x中, 可以用newfs -U選項打開)。softupdates戲劇性地提高meta-data的性能,主要 是文件創建和刪除。我們建議對所有的文件系統都打開softupdates開關。 softupdates有兩個副作用你必須知道: 首先softupdats保證當系統崩潰時文件 系統狀態的一致性的,但是更新磁片可能要延時幾秒種。如果系統崩潰,可能 丟失更多的資料。第二,softupdates延時文件系統自由塊的釋放,如果你的文 件系統將要滿了(例如,根文件系統),對系統做一次升級,例如,make insta- llworld,可能導致空間不夠而失敗. 大量的運行時mount選項可以幫你調整系統。最明顯最危險的是async。不要嘗試 使用它,這太危險了.一個危險性更少但是很有用的選項是noatime。UNIX文件 系統通常更新文件或目錄的最近存取時間,這個操作在FreeBSD內部被延時寫處 理,通常不會成d系統的負擔.如果你的系統連續存取巨量的文件,緩衝區會被 更新atime而弄髒變的緊張,成d系統負擔. 例如,你正在運行一個高負載的web伺服器,或者一個有大量讀者的news伺服器, 你可以考慮在大分區上關掉atime更新的mount選項.不要無理由的在任何地方關 掉atime更新選項,例如,你最好在那些以讀居多的分區上保持打開這個選項, 例如/和/usr。(特別是/,因d很多系統工具使用atime欄位報告系統狀況)。 STRIPING DISKS 在一個更大的系統上,你可能把一個分區分佈(strip)到幾個驅動器上去以建立 一個更大的分區。striping可以通過把操作分開到不同的磁片上去而提高文件 系統性能。vinum(8)和ccd(4)可以建立strip化的文件系統。通常的說,strip 化一個小的分區例如根和/var/tmp或以讀居多的分區例如/usr是徹底浪費時間。 你應該strip化那些需要嚴重的I/O性能的分區,典型的是/var,/home和定制的 用來存放資料庫和web頁的分區。選擇正確的strip尺寸是同樣重要的。文件系 統企圖把meta-data放在2的倍數邊界上,你總是希望減少查找而不是增加查找。 這意味著你要使用大的離心strip大小例如1152個磁區,使得順序I/O不用查找 幾個磁片而meta-data將分佈在不同的磁片上而不是集中在一個磁片上。如果 你真的很老練,我們建議你使用FreeBSD支援的控制器列表中的真正的硬體raid 控制器。 SYSCTL TUNING 在系統中有幾百個sysctl(8)變數,包括那些看起來可以調整但是實際上不是 的那些。在這個文檔中我們將只是涵蓋那些會最大地影響系統的sysctl。 kern.ipc.shm_use_phys缺省是0,可以被設置成0(off)或1。把它設置1引起 SysV共用記憶體段被映射到不可交換的實體記憶體上。這個功能只影響那些或者 (A)映射少量記憶體並在很多進程間共用或(B)映射大量記憶體並在任意數量的進 程間共用記憶體的情況。這個功能允許內核通過將共用記憶體頁鎖定在核心存儲 中而消除大量的內部記憶體管理和頁面跟蹤的開銷,使得它們不可被換出。 vfs。vmiodirenable缺省是0(不久將改d1)可以設置d0(off)或1(on)。這個 參數控制目錄怎樣被緩存。大多數目錄是小的而且只使用在文件系統中的一 個碎塊(典型的是1K)甚至在緩衝區中更小(典型的是512位元組)。然而,在缺省 的操作模式中,緩衝取只緩衝固定數量的目錄哪怕你有巨量記憶體。把這個 sysctl打開就允許緩衝區利用虛擬記憶體頁緩衝來緩衝目錄。這樣做的一個缺 點是最少也要用去一個物理頁面(典型的是4K)而不是512位元組。如果正在你正 在運行一個需要操作大量文件的服務,我們建議你打開這個選項。這些服務 包括web頁緩衝,大mail系統,news系統。打開這個選項通常情況下不會導致 性能下降哪怕甚至記憶體浪費,但是你要嘗試去發現。 有幾個和buffer-cache及VM page cache相關的sysctl。我們不建議去弄亂 它們。從FreeBSD 4.3開始,VM 子系統能很好的對自己做調整。 如果你在運行面向網路的應用,net.inet.tcp.sendspace和net.inet.tcp. recvspace是特別令人感興趣sysctl。它們控制任何一個tcp連接允許的發送 和接收緩衝區的大小。缺省是16K。通過增加缺省值犧牲更多內核記憶體你總能 夠獲得更高的帶寬利用率。如果你正在服務成百上千個連接,我們不建議你 增加缺省值,因d那樣很容易因d滯留的連接累積起來後用完記憶體。 但是如果你需要高帶寬甚於更少的連接數量,特別是你有千兆乙太網,增加 缺省值將會得到完全不同的結果。你可以分開調整接收和發送緩衝區的大小。 例如,如果你的機器主要是做web服務的,那l你可以減少接收緩衝區的大小 用來增加發送緩衝區的大小而不用吃掉更多的內核記憶體。注意路由表(參見 route(8))能用於與路由相關的發送和接收緩衝去的缺省大小。另外一 個工具是你能用防火牆規則中的管道(pipe)限制從某個IP地址或埠區出去 或進來的流量。 例如,如果你有T1線路,你可能想要限制web流量d整個T1線路的70%而把餘 下的帶寬留給mail和對話模式的使用。通常一個被繁忙地訪問的web伺服器 不會顯著的增加對其他服務的時延,但是強制這個限制能使事情更加光滑導 致更長時間的穩定。d了確信不使用太多的帶寬,許多人也人d地強制帶寬 限制。 除非雙方主機支援TCP的視窗伸縮擴展,把TCP發送和接收緩衝區定d大於65535 將導致魔術般的性能提升,視窗伸縮由net.inet.tcp.rfc1323控制。這個 擴展應該被使能並且d了在一些網路鏈路上獲得好的性能,TCP緩衝區大小 應該設置d大於65536,特別是千兆廣域網和高時延的衛星鏈路。 我們建議你打開這個開關(設置d1)並且讓net.inet.tcp.always_keepalive 也設置d1。缺省是off的。這增加了一些網路帶寬的使用,但是一些死掉的 連接最終能被識別並清除。死的TCP連接是被撥號用戶存取的系統的一個特別 的問題,因d用戶經常斷開modem而不正確的關閉活動的連接。 kern.ipc.somaxconn限制接收TCP連接的偵聽佇列(listen queue)的大小。缺省 是128,這對在一個繁忙的web伺服器環境中可靠的處理新的連接來說太小了。 在那樣的環境中,我們建議增加這個值調到1024或更高。服務進程可能自己限 制偵聽佇列的長度(例如sendmail(8),apache)但是總會有一個配置項在配置文件 中允許你調整佇列的大小。大的偵聽佇列也能更好的抵擋DOS攻擊。 kern.maxfiles決定系統支援打開多少個文件。缺省的是幾千個但如果你在運行 資料庫或大的很吃描述符的進程可以把它設到1萬或2萬個。 vm.swap_idle_enabled在大的多用戶系統中是很有用的,那裏有大量的用戶進 入和離開系統而且有大量的空閒進程。那種系統趨勢是對於空閒記憶體的保留上{ 生大量持續的壓力。打開這個功能調整換出(空閒秒數)。通過vm.swap_idle_ threhold1和vm.swap_idle_threshold2允許你以比普通換出演算法更快的速度降 低與空閒進程聯繫著的頁面的優先順序。這等於幫了換出守護進程(pageout daemon)一把。不要打開這個選項,除非你需要它,因d你在做的交易是預先 而不是後來吃掉更多的交換空間和磁片帶寬。在一個小系統上這個選項有影響 而在一個已經發生換頁的大系統上這個選項允許VM系統更加容易地把整個進程 換出或換如記憶體。 BOOT-TIME SYSCTL TUNING 有些sysctl在運行時是不能調整的因d記憶體申請必須在引導的早期進行。要改 變這些sysctl,你必須把這些值放在loader.conf(5)並且重新妍囧t統。 kern.maxusers缺省值是難以相信的低。對於現在大多數機器,你可能需要增 加這個值到64,128或256。我們不建議你超過256除非你需要一個巨大的文件 描述符數量。網路緩衝區也將被影響但是可以由另外的內核選項來控制。不要 只是使用maxusers來增加網路mbuf。比FreeBSD4.4舊的系統沒有這個sysctl需 要使用內核配置選項maxusers來設置。 kern.ipc.nmbclusters可以調整用來增加系統願意申請的網路mbuf的數量。每 個cluster(簇)大概2K的記憶體,所以值1024代表保留2M內核記憶體作d網路緩衝區。 你可以簡單的計算出需要多少。如果你有一個web伺服器最多可以有1000個並發 連接,每個連接吃掉16K接收和發送緩衝區,你大概需要32MB的網路緩衝區來對 付它。一個比較粗糙的方法是乘以2,所以32MBx2 = 64MB/2K = 32768。所以這 個情況下你將需要設置nmbclusters到32768。我們建議d那些記憶體不多的機器 設置1024到4096而4096到32768d那些有很多記憶體的機器。無論如何如何你不能 設置一個很隨意的值,這可能導致妍坋伀Y潰。netstat(1)的-m選項可以用來查 看網路緩衝區的使用情況。老的FreeBSD系統沒有這個sysctl,所以需要設置內核 配置選項NMBCLUSTERS。 越來越多的程式正在使用sendfile()系統調用通過網路傳送文件。 kern.ipc.nsfbufs用來控制sendfile()可以使用的多少文件系統緩衝區數量來 進行工作。這個參數名義上隨maxusers伸縮,所以你不應該去弄亂這個參數, 除非在非常特殊的場合。 KERNEL CONFIG TUNING 在一個大系統中有大量的內核選項你可能需要擺弄。d了改變這些選項你需要從 源代碼編譯內核。config(8)和手冊是學習怎樣做這件事情的好起點。通常建立 你自己的定制的內核的第一件事情是去掉所有你不用的驅動程式和服務。刪除 象INET6和你不用的驅動程式可以減少內核的大小,有時候能達1兆或幾兆,留 出更多的記憶體給應用程式。 SCSI_DELAY和IDE_DELAY可用於減少系統妍坋伅﹛C缺省值相當高,在妍坋犮i 引起15秒以上的延時。減少SCSI_DELAY到5秒通常是可行的。減少IDE_DELAY也是 行的但是你必須更小心點。 有很多*_CPU的選項你可以注釋掉。如果你想讓內核只能在奔騰類CPU上運行, 你可以輕鬆的拿掉I386_CPU和I486_CPU,如果你相信你CPU可以被認作奔騰2或 更好的CPU,你可以拿掉I586_CPU。有些clone可能被認作奔騰或486,沒有這 些選項將不能妍吽C如果它能工作,真是太偉大了! 作業系統將能更好地使用 高端CPU的的MMU功能,任務切換,記時,甚至設備操作。另外,高端CPU支援 4MB MMU頁面,內核用來將自己影射到記憶體中,在重負荷的系統調用下這會增 加性能。 IDE WRITE CACHE FreeBSD 4.3不認真考慮地將IDE寫緩存關閉。這降低了到IDE磁片的寫盤帶寬, 但是考慮到硬碟廠商引入的嚴重的資料一致性問題而言是必要的。基本問題是 IDE驅動器在寫完成上說謊。當IDE寫緩衝打開時,IDE硬碟不僅不會按次序將 資料寫入磁片,而且在嚴重的磁片負荷下有時會永遠耽擱有些資料塊。當系統 崩潰或掉電時會導致嚴重的文件系統損壞。所以我們的缺省值是安全的。不幸 的是結果是巨大的性能損失,我們投降了並在發行後把缺省值改了過來。你 應該通過查看hw.ata.wc這個sysctl來檢查你系統上的缺省值。如果IDE寫緩衝 是關閉的,你可以將通過將hw.ata.wc內核變數設置d1而將它改回來。這必須 在boot loader(8)妍坋仱窗C企圖在內核妍坅嶆b做是沒有作用的。請參見 ata(4)和loader(8)。 還有IDE硬碟的一個試驗性的功能叫做hw.ata.tags(也能夠在boot loader中設 置)允許寫緩衝被安全地打開。這是將SCSI的tagging功能帶到IDE驅動器上。 寫這篇文章時只有IBM的DPTA和DTLA驅動器支援這個功能。警告!這些驅動器 明顯有質量控制方面的問題,所以我建議你不要在這個時候買。如果你需要性 能,選用SCSI吧。 CPU,MEMORY,DISK,NETWORK 做何種調整依賴於你的系統在負載變大時哪一部分開始成d瓶頸。如果你的系統 用完了CPU(空閒時間d0%)那你需要升級CPU或轉移到SMP的主板(多CPU),或者 你需要重新回顧你那個引起負荷的程式並試著優化它。如果系統正有大量的頁面 交換,需要考慮增加記憶體。如果系統真讓磁片滿載通常能看到高CPU idle值和滿載 的磁片。systat(1)可用於監視這個情況。對付磁片滿載有很多種方法:增加記憶體 用於緩衝,鏡象磁片,把操作分到不同的機器等等。如果磁片性能是個問題而且 正在使用IDE硬碟,切換到SCSI能幫大忙。現代IDE驅動器與SCSI在低級順序帶寬 上比較時,當你開始尋找,SCSI驅動器通常會贏。 最後,你可能用完了網路帶寬。提高網路性能的第一道防線用switch替換hub,特 別是今天switch和hub一樣便宜。hub由於衝突補償在重負載下有嚴重問題,一個 壞主機會嚴重影響整個LAN。第二是盡可能優化網路路徑。例如,在firewall(7)中 我們描述了一個保護內部主機的拓撲結構,外部可視主機不通過它路由。按照你的 需要,使用100BaseT而不是10BaseT,或使用1000BaseT而不是100BaseT。許多瓶頸 發生在廣域網連接上(例如mode,T1,DSL等)。如果要擴展鏈路是不可能的,可以 使用dummynet(4)功能實現流量限制以阻止高負載服務(例如web服務)影響其他服務 (例如email服務),或正好相反。在家庭安裝中,可以讓互動式的傳輸的優先順序高於 你輸出的其他服務(web服務,email等)。 -------------------- Unix is very simple, but it takes a genius to understand the simplicity.
系統時間:2024-05-17 2:11:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!