![]() |
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(61):其他內核設置選項 |
![]() |
其他內核設置選項了解了最基本的GENERIC設置文件的內容,使用者就能根據實際情況,將不必要的設置刪除,配置一個適合自 己硬件的內核。然而GENERIC內核并不能包括更丰富的設置,包括很多支持的硬件種類,或者特定的內核特性等。 除了上面提到的這些較常用到的選項之外,FreeBSD中還支持一些不常使用的設備和選項,例如一些老式的連 接到聲卡上的光驅、游戲杆等,FreeBSD甚至也支持IP over ATM協議和ATM網卡,千兆以太網卡等最新 的網絡設備和協議。 所有的選項均可以在LINT文件中找到對應配置的例子,就需要根據具體硬件將配置增加到用戶自己的配置文件中 。 無論增加哪種硬件設備之后,都要檢查系統中是否有相應的設備文件存在。通用內核中不存在的設備,缺省也沒有生 成對應的設備文件。因此需要進入/dev目錄中,使用/dev/MAKEDEV命令來產生相應的設備文件。
當運行一台高性能服務器的時候,缺省設置并不能充分發揮內核的所有能力。為了調整系統性能,便需要考慮 更多的設置選項。
由于服務器系統運行在高負載下,需要產生數量巨大的進程數目,并打開相當多的文件。為了提供更好的支持就需要 增加系統中表格的大小,這應該增加maxusers設置參數。 系統啟動時首先通過BIOS來檢測系統中的內存,但是一般的BIOS最多只能報告64M內存,因此FreeB SD需要自己檢測系統中的內存數量。然而系統內存檢測并不一定檢測到系統中的所有內存,因此需要在內核設置中指定內存 大小,MAXMEM選項就用來指定系統物理內存的容量。上例中將系統內存設置為256MB。 此外,缺省情況下FreeBSD限制每個應用程序使用128MB的內存,這對于一般的應用程序是滿足的。但是 對于特定的應用程序的服務器,如大容量的新聞組服務器,將占用大量內存,因此就需要增加相應的參數。內核選項MAXD SIZ為最大限制,DFLDSIZ為這個限制的缺省值,那么將應用程序的內存使用限制設為256MB的配置項為上例所 示。 為了增加FreeBSD的網絡性能,可以增加NMBCLUSTERS的值,這個設置決定網絡界面接收數據時的 緩沖mbuf的大小,增加這個值就能使系統能同時響應更多的并發請求,這對于Web等高負載服務器特別重要。CHIL D_MAX定義一個進程能打開的最多子進程數數目,而OPEN_MAX定義一個進程能同時打開的文件描述字的數目,這 三個參數為繼承自4.4BSD中的設置參數,在FreeBSD下一般不需要調整,因此并沒有寫在LINT配置文件中, 一般情況下,NMBCLUSTERS的缺省值對于高負載服務器略小一些,而CHILD_MAC和OPEN_MAX的缺 省值能滿足一般的高負載服務器的要求。 通常這些數值參數需要根據實際情況進行調整,而不應該一味的增大。使用vmstat,netstat,top 等系統工具可以觀察系統在實際情況下的運行狀態,以決定需要進行哪些調整。 SOFTUPDATES選項能增加UFS類型的文件系統存取速度,對于大部分種類的網絡服務器,系統瓶頸在于 磁盤訪問速度,而使用這個選項可以改善文件系統的存取性能。這個選項之所以沒有被作為缺省設置,主要是因為版權原因。 然而為了編譯帶有SOFTUPDATES選項的內核,還必須手工建立一些符號連接,因為SOFTUPDATES使用的 源代碼并不直接位于正確的編譯路徑下,而是位于一個非標准路徑下,FreeBSD使用這種方法提醒FreeBSD用戶 ,表示這個部分的版權與BSD版權許可不同,需要單獨處理。
當建立了上述連接之后,帶有SOFTUPDATES選項的內核才能被正確編譯,然而即使內核支持這個選項, 還需要在文件系統中設置softupdate選項,相應文件系統才能真正使用這個功能,這需要對相應的文件系統 使用tunefs命令:
這個命令只需執行一次就行了,為了避免出現問題,請在系統的單用戶模式下執行這個命令。同樣可以使用tune fs -n disable可以屏蔽這個功能。 此外,對于多處理器的服務器系統,還可以使用SMP選項和APIC_IO選項以支持多處理器。 可以在編譯內核時打開更多的優化選項,缺省情況的只能提供十分基本的優化,而且是使用標准版本的gcc 2. 7.2.1來編譯系統的。可以安裝egcc,并指定更高的優化選項,如-O6和-mPentium,來獲得更高級別的 優化和利用Pentium芯片專用指令。由于egcc僅僅支持ELF格式的執行文件,因此不能用于3.0之前(包括3 .0-REKLEASE)使用a.out格式內核的系統。 當使用egcc編譯內核時,需要更改執行config后產生的內核目錄下的Makefile,需要重新定義C C選項為/usr/local/bin/egcc,并更改優化選項-O為-O -mpentium,但是由于egcc 不支持gcc的編譯選項-fformat_externsion,因此還需要更改Makefile引用的/usr/s rc/share/mk/bsd.kern.mk文件,刪除這個文件中這個編譯選項的定義。 雖然理論上編譯器優化不影響編譯結果,但是編譯器本身也會存在問題,使得在某些情況下發生錯誤。尤其對于系統 內核,它決定系統的穩定性。因而在編譯時采用過高的優化時就要特別小心,極其偶然的情況下會過高優化的內核會造成系統 崩潰。因此在正式使用一個優化內核之前,應該保留一個原有的、使用普通優化選項的內核。新內核經過一定時間實際運行的 考驗,確認沒有問題之后才能放心用于正式使用。
通常對于SoundBlaster兼容的聲卡,可以使用的以下配置選項:
其中pnp0控制器是幫助設置ISA接口的PNP聲卡的資源,這主要用于使用BIOS為ISA PNP設備分 配資源的情況下。但如果不是ISA PNP的聲卡,就不需要這個設置,而且如果ISA PNP聲卡能設置為非PNP類 型,最好將其設置為非PNP類型,ISA總線下的PNP聲卡比較難以設置。 如果系統中安裝有DOS的話,可以啟動到DOS下,使用該卡的設置程序或一些系統硬件分析軟件尋找BIOS分 配給ISA PNP卡的資源。 snd0提供最基本的聲卡支持代碼,sb0為SoundBlaster兼容聲卡驅動程序,要根據聲卡的配置參 數更改sb0驅動程序的IRQ、DMA以及port數值。改變IRQ值的時候,不僅應該在sb0的配置行中改變,還應 該使用SBC_IRQ配置選項。 sbvxi0也是SoundBlaster 16所需的代碼,大部分聲稱與SoundBlaster兼容的聲 卡并不能做到完全兼容SoundBlaster 16,最多兼容SoundBlaster或SoundBlaster Pro,因此就不能支持這個設備,只有真正的SoundBlaster 16才能使它發揮作用。sbmidi0為So undBlaster聲卡的MIDI接口的驅動程序,很多兼容聲卡也不支持這個設備。opl0為SoundBlast er兼容聲卡使用的Yamaha OPL-2和OPL-3芯片使用的驅動。 使用上面的配置選項,設置正確的資源參數,就可以支持soundblaster兼容聲卡。但是不同聲卡對So undblaster的兼容性不同,因此系統檢測時就不能檢測到所有的設備,如midi設備或sbvxio0設備,但 一般都可以檢測到sb0設備,這就能提供基本的聲卡設備支持。 聲卡設備還需要相應設備文件snd0的支持:
當使用這些選項重新編譯好內核,并啟動之后,就可以查看聲卡系統是否工作正常。首先應使用 dmesg命令查看系統是否偵測出了聲卡設備,如果沒有偵測出,就可能是硬件參數配置的問題,需要使用 UserConfig更改配置。
通過直接讀取設備文件sndstat可以查看出當前聲卡的狀態,根據系統檢測出的設備不同,sndstat 報告的系統中安裝的驅動也不同,至少應該報告一個soundBlaster設備:
設備文件audio用于聲音的輸入、輸出,如果聲卡沒有IRQ/DRQ沖突,就能正常使用這 個設備,從而可以通過這個設備進行錄音和播放聲音文件,可以通過標准的操作命令來操作這 個設備文件。
此后就可以安裝相關的聲音應用軟件了,這些軟件通常位于ports的軟件包目錄下,例 如播放mp3格式的音樂文件的軟件mpg123:
除了SoundBlaster聲卡之外,FreeBSD還可以支持SoundBlaster AWE 32/ 64、Gravis Ultrasound、Microsoft Sound System、Roland MPU 401、ProAudioSpectrum等聲卡。支持這些聲卡的驅動也在LINT文件中給出了范例,但這些驅動程序 不是單獨使用的,需要與上面提到的基本設備sb0相互合作。 如果計算機上沒有聲卡,也可以使用個人計算機的喇叭模擬聲卡。這樣的音響效果并不令人滿意,而且也會消耗大量 處理器時間,因此應該盡量使用,模擬聲卡的設備驅動為pca0。 有些情況下某些soundblaster聲卡使用以上的sd0聲卡設備選項并不能正常工作,會遇到IRQ/D RQ的沖突問題。此外還可以使用另一個驅動程序pcm0,這個驅動程序能支持一些sb0不支持的SoundBlast er兼容聲卡。當然pcm0的功能相對弱一些,不能支持midi功能。設備sb0能和其他几個設備同時發揮作用,而p cm0設備不能和前面提到的其他設備相互協作,使用pcm0的配置文件應該為:
有時由于pnp設置資源的問題,使得pcm驅動將聲卡識別為第二個設備pcm1,而報告pcm0與pcm1存 在沖突,此時可以簡單的建立設備snd1,而忽略pcm0的沖突信息,此后就一直使用snd1作為聲卡設備。
為了給PNP聲卡設置正確的資源值,可以在UserConfig中的命令行方式下搜尋PNP設備、配置PNP 設備的硬件參數。如同在前面提到的,對PNP設備需要在UserConfig的命令行方式下使用pnp命令進行設 置。為了保留這個設置,每次啟動時都自動進行設置,就需要將設置寫入根文件系統中的一個設置文件 中,例如/kernel.config,例如對于Soundblaster Vibrx16,執行的pnp命令及寫入kernel.config的內 容包括:
由于pnp命令就為pnp設備分配了資源,那么內核配置文件中的pcm0使用的參數設置就要與它相一致。 當設置完kernel.config中,還需要設置Boot Loader的資源文件/boot/boot.rc文件,使其能在啟動時自動執行設置命令。
由于個人計算機上的聲卡種類相當多,而FreeBSD支持的聲卡類型相對較少,如果用戶 計算機使用的聲卡與FreeBSD支持的類型都不兼容,也可以考慮使用FreeBSD下的商業聲卡驅動 ,商業驅動程序能夠支持更多類型的硬件。Opensound是FreeBSD下的一種商業聲卡支持驅動, 其主頁是http://www.4front.com。
FreeBSD提供了對磁盤上的文件系統和交換空間的管理能力,可以供使用者進行設置。 FreeBSD的使用者可以設置對用戶的磁盤空間設置,建立偽磁盤設備等,以更好的方式管理磁 盤和文件。
FreeBSD提供了強大的系統管理功能,除了可以在/etc/login.conf中使用登錄類別對 用戶占用的處理器資源進行限制之外,還可以對用戶占用的磁盤資源進行限制。用戶磁盤空間 的限制是通過quota來完成的。這樣就可以控制用戶對硬盤資源的使用,防止硬盤空間被無意 或惡意用光而造成系統故障。這對于提供公共訪問的計算機比較重要。quota需要內核支持, 在編譯內核時必須加入選項:
接下來是決定對哪個文件系統使用quota來限制用戶磁盤資源,要更改/etc/fstab中該文 件系統對應的行,從而更改分區安裝時使用的參數,例如要對wd0s1e進行限制,則更改fstab中 的對應行為:
然后更改/etc/rc.conf中的有關quota的設置check_quotas的值為”YES”,使用新內核重新 啟動計算機之后,就可以使用下列命令打開用戶磁盤設置。
這些命令在第一次啟動支持quota的系統時使用,用來檢查磁盤上的quota狀態。如果一 切正常,就可以使用edquota來更改每個用戶的磁盤限制了。
第一個命令就為更改user1的磁盤空間限制,第二行將user1的quota限制復制給user2和user3。 日常維護要使用quota命令,例如來檢查user1的quota設置可以使用下面的命令。
為了避免出現問題,需要每天執行一次quotacheck命令,來檢查全部設定是否正常, 因此這個命令可以放入/etc/daily或crontab中,定期執行。
交換設備的數量是受內核設置的限制,內核中的NSWAPDEV的值就確定了最多可使用的 交換設備的數量,而NO_SWAPPING選項可以用來屏蔽任何交換設備。
當增加了交換設備的數量之后,就能增加交換空間,更好的發揮FreeBSD的虛擬內存機制。 FreeBSD支持的vn偽磁盤設備可用于設置交換文件。缺省內核支持的vn偽設備數量為一個,因此僅可以設 置一個交換文件。一般僅需要更改/etc/rc.conf文件中的swapfile選項為交換文件的名字,系統自動使 用vnconfig命令來將文件和虛擬設備聯系在一起。 為了增加對多個交換文件或多個鏡像文件的支持,可以增加內核中偽設備vn的數量,然后還需要創建相應數量的v n設備。此后就可以使用這多個偽磁盤設備,并使用vnconfig命令管理多個磁盤鏡像文件或交換文件。 除了偽磁盤設備vn之外,FreeBSD系統還提供一個將多個磁盤文件系統映射為一個磁盤的偽設備ccd,這 樣原有的小磁盤分區就能聯合起來,形成一個大的文件系統。ccd要求內核中支持ccd這個偽設備,當內核中支持了cc d偽設備之后,就可以通過設備文件/dev/ccd0c等來使用這個偽磁盤了(缺省/dev下只有ccd0的設備文件 ,可以根據需要建立其他的設備文件)。 將多個磁盤分區與單一的ccd設備聯系起來,還需要使用ccdconfig進行配置,最基本的ccdconf ig使用例子為:
這個例子使用-c參數對ccd1設備進行配置,指出ccd1由/dev/da0s2g和/dev/da1s2e兩個分區聯合組 成。如果這兩個磁盤分區都是100M大小,那么新的設備/dev/ccd1c就有200M大小。然后就可以在ccd1設備 上建立文件系統,并使用這個設備了。
這是一個對ccd進行配置并使用的最簡單的例子,這里沒有對ccdconfig命令中緊跟ccd設備的兩個數 字參數的意義進行解釋。而通過選擇這兩個參數的不同數值,能將多個磁盤文件系統采用不同的RAID方式映射為單個設備 。 RAID為冗余磁盤陣列的簡稱,它意味著物理上使用多個磁盤,而邏輯上卻只有一個磁盤設備。RAID之所以流 行,是因為它使用了分段(strip)和冗余的概念,就是說通過RAID映射的邏輯磁盤上的數據是以分段的方式保存的 ,例如一個文件的第一段數據保存在第一個物理磁盤上,第二段數據保存在第二個物理磁盤上,依次類推。這樣在存取這一個 文件上的連續數據時,多個磁盤可以同時進行存取操作,因此增加了磁盤訪問速度。而冗余則是物理磁盤的空間大于邏輯磁盤 的大小,通過物理磁盤上多余的磁盤空間,保存冗余信息,這樣一旦多個磁盤中的某一些出現問題,數據能通過冗余數據得到 恢復,而不會丟失。 按照不同的冗余組織方式,RAID被分為不同的級別。最簡單的RAID稱為RAID 0,這個級別中沒有冗余 ,多個磁盤只是以分段的方式組織起來,由于使用分段的方式存取,可以同時訪問這兩個磁盤,因此存取單個文件的速度會有 所改善。更高一級的RAID級別為RAID 1,它同時使用兩個磁盤,每個磁盤都是另一個磁盤的鏡像,這樣一旦一個磁 盤出現問題,還可以在另一個磁盤找到數據,保証了數據完整性,但這樣設置,有一半的磁盤空間都用做了冗余,浪費了磁盤 空間。此外還有RAID 3級別,至少要使用3個物理磁盤,前兩個磁盤中分段存儲數據,第三個磁盤的冗余空間中并不是 直接保存原有的數據,而是保存根據前兩個磁盤中對應分段中的數據進行計算得到一個校驗和。在前面某一個磁盤被破壞后能 通過冗余磁盤中保存的校驗和來恢復原有數據。由于RAID 3中校驗和是單獨保存在一個物理磁盤上的,不能充分發揮分 段存取的優勢,因此RAID 5中將校驗和與其他數據一起分段、分布保存在各個磁盤上,提供了更好冗余效果。因此當前 常用的RAID級別為RAID 0, RAID 1和RAID 5,可根據不同的需要進行選擇使用。 當在ccdconfig中使用兩個0作為參數來設置ccd偽設備時,ccd是以最普通的直接連接方式來連接多 個磁盤的,當數據寫滿第一個磁盤后,才接著寫入第二個磁盤,這里沒有使用任何分段存儲策略,因此這是一種不完善的RA ID 0方式。然而也可以設置ccd以使用分段存儲策略,以大來存取速度的優勢,這就需要設置分段存儲中的段的大小, 即設置交錯因子的大小,因此就需要改變第一個數字參數,例如:
上面第一條命令是卸載已安裝的ccd文件系統,第二條命令是將原有的ccd1設備釋放出來,使用這兩條命令是 因為前面操作中已經將ccd1設置過并安裝到文件系統中了。第三條命令為重新設置ccd1的命令,其參數中緊隨ccd 1設備的參數設置為32,這個參數代表交錯因子為32個磁盤塊,即數據每隔32個磁盤塊大小,進行分段保存到不同的磁 盤上,顯然前面的參數設置為0表示不進行分段存儲。 由于ccd使用的磁盤設備為預分配的磁盤分區空間,那么這些分區的大小很可能不一致。當一個磁盤設備用光,而 另一個較大的設備還有空余的時候,分段策略就不再有效了。此時ccd可以有兩種選擇,一個是盡量利用磁盤空間,必要時 不再進行分段存儲,順序存儲數據﹔另一種選擇是不使用這些不能進行分段存儲的空間,以保証分段存儲帶來的優勢。當cc d命令的第二個數字參數設置為0時,將盡量利用磁盤空間,因此就ccd偽設備就混合使用分段存儲和順序存儲。但也可以 將其設置為2,這樣ccd只使用分段存儲策略,忽略分區不一致的空間。推荐在建立磁盤文件系統時為ccd划分大致相等 的空間,這樣就可以充分利用分段帶來的好處,并且不浪費磁盤空間。 當使用分段存儲之后,理論上在兩個磁盤上同時分段存儲,存取速度可以加快。這種速度的提高是針對單次數據存取 而言的,例如在讀取一個大文件時,ccd可以同時從兩個磁盤讀取。可以看出ccd所作只是改變數據存取的位置,通過將 可能會同時訪問的數據放置到可以同時訪問的多個磁盤上,來提高存取速度。然而而由于ccd是使用軟件方式實現的分段, 軟件方式不能提高磁盤I/O的硬件限制,而高負荷的服務器,同時會有多個進程對多個磁盤進行I/O操作,ccd的作用 就不太明顯了。此時使用硬件RAID的方式更為有效。 FreeBSD支持DPT的硬件RAID卡,很多服務器附帶的RAID卡均是OEM這家廠商的產品,雖然它們 使用其他廠商的商標,但實質還是同一個廠家的產品。因此在使用RAID卡時,需要檢查其手冊或卡上的芯片標識,判斷其 是否為OEM產品,以獲得RAID卡的真實型號。 此外,還有一些SCSI-to-SCSI的RAID卡,因此只要該卡使用SCSI控制芯片為FreeBSD所 支持,該卡就能在FreeBSD下使用。 雖然ccd設備能夠提高存取速度,但對于建立交換磁盤空間意義不大,一般也并沒有必要將交換空間建立在ccd 設備上。這是因為FreeBSD對交換設備本身也采用了交錯存取的策略,如果在多個磁盤上設定了多個交換空間,系統會 自動使用交錯方式使用交換空間,而不必依賴ccd設備的幫助。 對于IDE磁盤,尤其對于連接在同一條IDE線上的IDE磁盤,使用分段策略是無益的。因為同一條IDE總線 上不能進行并發存取數據,分段存儲反而影響速度。即使是連接在兩個IDE總線上的兩個IDE磁盤,由于IDE磁盤的存 取十分占用CPU的處理時間,因此分段存儲帶來的益處也極為有限,只有SCSI磁盤才能充分發揮分段存儲的帶來的好處 。 ccd也支持RAID 1,這種方式又稱為磁盤鏡像方式,主要用于保護磁盤數據不會因為偶然損壞而丟失數據, 但同時多使用一倍的磁盤空間。此時需要將ccdconfig中的第二個數字參數設置為4,它將強制使用相同大小的各個 物理磁盤的空間并使用RAID 1方式。當前的ccd還不支持RAID 5。
雖然ccd能夠支持RAID 1,但通常并不使用它來進行RAID 1。主要原因是ccd并沒有提供相應的軟 件工具,使得能夠在系統出現問題時,能從鏡像磁盤中恢復出數據。由于ccd設備和物理磁盤的存儲格式存在差異,并不能 直接安裝上ccd鏡像磁盤其中的一個,要恢復存儲的數據就需要其他工具的幫助。由于ccd本身并沒有提供這種工具,就 只能依靠從原始磁盤上讀取數據的方式恢復,就使得恢復數據比較困難,所以很少有使用者真正利用ccd來進行磁盤鏡像。 如果需要使用RAID 1以增強系統的可靠性,可以考慮使用vinum,這個軟件使用一個內核可加載模塊,能 提供RAID 0、RAID 1和RAID 5,但由于版權的原因(產生校驗和的算法被其專利保護),其中的RAID 5代碼沒有被直接放入FreeBSD系統中,隨同FreeBSD一起提供的vinum只提供RAID 0和RAID 1能力。由于ccd用于RAID 0更容易,而vinum提供了相當完善的RAID 1功能,因此習慣上使用ccd來 提供RAID 0,而使用vinum提供RAID 1。具備RAID 5能力的vinum版本可以從Cybernet 公司獲得(http://www.cybernet.com),或者與vinum的開發者聯系獲得測試版。vinum 是一個相當復雜的軟件,這里就不再討論其設置和使用方法了。 當設置好ccd之后,就可以將其配置放入配置文件中。使用ccdconfig -g命令可以將當前的配置顯示 出來,把這些設置放入/etc/ccd.conf中之后,使用ccdconfig -C將直接讀取這個設置文件,來設 置ccd的各個設備,啟動時也將自動執行這個設置任務。
由于ccdconfig及vinum會直接和內核中的偽設備交談,因此使用它們具備一定的危險性,對它們進行 設置時就有造成系統當機的可能性。因此進行設置不要運行其他進程,最好進入單用戶狀態進行操作,在設置完畢之后,系統 就會正常運行了。如果在設置時連續出現當機問題,可以嘗試改變設置時使用的ccd設備及其順序,例如本來使用ccd0 的改變為使用ccd1,再進行重新配置,以避開ccd驅動中可能存在的問題。
標准系統內核配置均列在配置文件LINT中,這對于絕大多數情況是足夠的。然而很多新特性并沒有包括在這些標 准內核配置中,如果要使用這些獨立特性,就需要單獨安裝這些非標准配置。 在FreeBSD的開發模式中,可以有任意多個項目組,這些項目組開發的結果要合并到正式的FreeBSD源 碼中的時候,就必須被FreeBSD core team認可。與Linux的開發方式相比,這種方式較為保守。因此 雖然FreeBSD中能夠支持很多種特性,但很多都沒有包括在FreeBSD的正式版本中。因此使用者要了解Free BSD具備的其他新特性,就必須檢查標准配置之外的各種配置。今天的非標准配置,可能就是明天的標准配置。 在FreeBSD的主頁中,介紹了基于FreeBSD的各種商業和自由的開發計划,例如System V系統 防真功能、實現IPv6和IPSec的KAME計划等。 除了正在開發的功能之外,新特性不能被合并到標准配置中的另一個原因是版權原因,很多軟件有較嚴格的版權聲明 ,不能直接放到FreeBSD系統中。另一個原因是FreeBSD的核心小組認為這個特性沒有太大的需求,不需要被支 持。 未完,待續。。。 |
|||||||||||||||||||||||||||
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(61):其他內核設置選項 | ||||||||||||||||||||||||||||
Copyright(C) 1999 SINA.com, Stone Rich Sight. All Rights Reserved
版權所有 四通利方 新浪網