歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix教程

FreeBSD 5-CURRENT 的內核配置與優化

FreeBSD

在本文針對4-STABLE的那個版本中已經討論了削減系統功能的意義。

在某種程度上,對於FreeBSD 5-CURRENT而言,配置內核是必需的。

FreeBSD 5.x是一個充滿新特性的系統。目前,5.0-RELEASE已經正式推出,但第五版本這個分支仍然是CURRENT分支,在它成為5-STABLE之前,我們可能還需要等待數個月的時間,這可能意味著一個到兩個RELEASE版本。

這篇文章將主要著眼於FreeBSD 5.0-CURRENT的內核配置。據我所知,這篇文章的內容至少在2003年3月以前應該是完全適合的,而在FreeBSD 5-STABLE正式標注之後,也不應該再出現什麼本質的變化。當然,保險起見,我個人建議您在進行改動,並將其應用到自己的系統上之前,首先備份內核:

cd /boot
cp -R kernel kernel.good

這樣,一旦出現意外情況,您將可以通過在啟動時選擇/boot/kernel.good/kernel來正確地引導系統。

說到這裡,我不得不指出FreeBSD 5在內核文件放置方面的一個非常顯著的變化。在5.0之前,內核及模塊分別在/kernel和/modules/文件夾中;5-CURRENT為了便於管理,將內核及其模塊都放到了/boot/kernel/文件夾。這一變化使得舊版的loader(Cool程序在默認情況下不能正確加載內核文件,當然,指定正確的文件名仍然可以保證4.x的loader(Cool程序正確加載FreeBSD 5內核,但我依舊傾向於按照UPDATING所說的那樣,把升級boot, loader這一系列初啟程序作為系統升級的一部分。

在正式開始介紹FreeBSD 5的內核配置之前,我還必須介紹5.0新的device.hints配置文件。device.hints配置文件位於/boot/文件夾,對於沒有ISA設備的系統,這個文件基本上是沒用的。這個文件取代了FreeBSD 4.x一直沿用的user config機制。FreeBSD開發組期待將來的某個時間重新加入user config機制,以讓loader更加人性化,但直到筆者撰寫這篇文章的時候為止,這一機制的新實現仍然沒有完成。

device.hints由一系列符合下面句法的語句組成:

hint...=

如果你熟悉4.x上的loader(Cool配置指令,那麼只需要做少量的轉換就可以解決問題:

iomem 改為 maddr iosiz 改為 msize

當然,世界是美好的,FreeBSD提供了一個awk腳本來解決問題。這個腳本位於src/sys/i386/conf/,它的名字是gethints.awk。

貧了這麼多,一些讀者可能已經等急了。但我還得說一個FreeBSD 5和4的重大區別,那就是LINT沒了。

拿掉LINT這事兒跟device.hints有關,為了不把話題扯得太遠,我不打算詳細描述關於這個文件的故事;先說要緊的:首先,類似4.x風格的LINT文件現在叫NOTES;其次,如果你一定要獲得LINT的話,在src/sys/i386/conf裡面執行下面的指令:

make LINT

即可。下面我繼續“傳統上”的那個內核配置文件。這個配置文件是由GENERIC改過來的,當然,刪除了一些沒必要的注釋。紅色表示我刪除的東西,而藍色表示我添進去,或做了修改的那些設置。綠色表示我沒添進去,但在NOTES中曾出現過的有用的配置。

#
# DELPHIJ -- Kernel configuration file for FreeBSD/i386
#

machine i386
cpu I486_CPU       # 默認已經沒有i386了,但i486...
cpu I586_CPU       # 還有這個i586都不適應我的情況
cpu I686_CPU
ident DELPHIJ      # 簽上我的名Smile
maxusers 0

# VMWare對於這條指令的模擬有問題。加上這個選項可以大大地
# 提高系統速度;我沒有選中它,因為我的系統需要SMP,而且
# 不是VMWare虛擬機Smile SMP和這條選項的連用結果是系統崩潰!
options CPU_DISABLE_CMPXCHG

#靜態連接device.hints,而不是從/boot/device.hints加載
#hints "GENERIC.hints" #默認的文件

makeoptions DEBUG=-g # 在內核中包括gdb(1)調試符號-
                     # 出問題之前,不管我事兒……

# SCHED_4BSD是傳統的、經過證明的BSD調度器。它使用全局的
# 運行隊列,它與CPU關系不密切,對SMP的性能不是最好的。
# 它有非常好的交互性和優先級選擇機制。
#
# SCHED_ULE是新的試驗性的調度器,它是為SMP設計的,但在單
# 處理器上運行一樣出色。使用這個調度器的用戶需要有對出現
# 非預期的崩潰和進行反饋做好心理准備。
options SCHED_4BSD #4BSD scheduler
options SCHED_ULE  #ULE scheduler,SMP上快許多
options INET       #IPv4協議
options INET6      #IPv6通訊協議-外圍設備不讓我這麼干:~(
options FFS        #必須有的FFS(Unix文件系統)
options SOFTUPDATES #SoftUpdates支持,相信我,加上沒錯的
options UFS_ACL     #ACL(訪問控制表)支持
options UFS_DIRHASH #訪問大目錄時,以少量內存為代價提高性能
options MD_ROOT #MD作為根設備
options NFSCLIENT #NFS客戶
options NFSSERVER #NFS服務
options NFS_ROOT #NFS作為跟文件系統; 需要NFSCLIENT
options MSDOSFS #MSDOS文件系統
options CD9660 #ISO 9660文件系統

options PROCFS #進程文件系統(需要PSEUDOFS)
options PSEUDOFS #偽文件系統框架
options COMPAT_43 #兼容 BSD 4.3 [必須保留!]
options COMPAT_FREEBSD4 #兼容FreeBSD4
options SCSI_DELAY=2000 #探測SCSI前的延時
options KTRACE  #ktrace(1)支持
options SYSVSHM #SYSV共享內存
options SYSVMSG #SYSV消息隊列
options SYSVSEM #SYSV信號量
options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B實時擴展
options KBD_INSTALL_CDEV #/dev中安裝CDEV
options AHC_REG_PRETTY_PRINT # 調試時顯示寄存器bit域
# 驅動程序將因此增大約128K
options AHD_REG_PRETTY_PRINT # 同上,將增大約215K

# current分支調試[我不打算翻譯了,如果你到了能調試內核
# 的層次,應該能看懂Smile]
options DDB #Enable the kernel debugger
options INVARIANTS #Enable calls of extra sanity checking
options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required by INVARIANTS
options WITNESS #Enable checks to detect deadlocks and cycles
options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed

# SMP支持
options SMP # Symmetric MultiProcessor Kernel
options APIC_IO # Symmetric (APIC) I/O

device isa
device eisa
device pci

# 軟驅支持
device fdc

# DEVICE_POLLING可以讓dc, fxp和sis設備更平穩地運行,不幸
# 的是它不能和SMP連用。
options DEVICE_POLLING

options AUTO_EOI_1     # 8259A自動中斷結束控制方式。
                       # 可以提高系統性能
options AUTO_EOI_2     # 沒證明過這東西能用,我的機器崩了Sad

# 將這個文件保存到內核,這樣將來可以用
# strings -n 3 /boot/kernel/kernel | sed -n 's/^___//p'
# 找回
options INCLUDE_CONFIG_FILE

options IPSEC          #IPSec內核級支持,與IPSec互斥

options FAST_IPSEC     # 快速IPSEC實現(需要相關硬件)

options IPFILTER       # ipfilter支持。

options RANDOM_IP_ID   # 此選項有效阻止遠程探測TCP報文生成

options TCP_DROP_SYNFIN #丟棄SYN+FIN的TCP包

options ZERO_COPY_SOCKETS # 這是對4.4BSD設計缺陷的重大改進
                          # 可以極大地提高網絡性能

device crypto           # 核心crypto(加密)支持
device cryptodev        # /dev/crypto硬件訪問支持

device hifn             # Hifn 7951, 7781, etc.

options PANIC_REBOOT_WAIT_TIME=0 # panic時重啟等待時間

# 請參考tuning(7)
options NMBCLUSTERS=4096 # 對於我的服務器合適的NMBCLUSTER

makeoptions CONF_CFLAGS=-fno-builtin #不允許使用 memcmp等

# 應用程序最大、堆棧、默認內存大小。內存2GB
options MAXDSIZ=(2047UL*1024*1024)
options MAXSSIZ=(128UL*1024*1024)
options DFLDSIZ=(2047UL*1024*1024)

# ufs1 擴展屬性支持。ufs2不需要
options UFS_EXTATTR
options UFS_EXTATTR_AUTOSTART

# GEOM支持
options GEOM_AES
options GEOM_APPLE
options GEOM_BDE
options GEOM_BSD
options GEOM_GPT
options GEOM_MBR
options GEOM_PC98
options GEOM_SUNLABEL

options QUOTA          # 磁盤配額支持

# 優化SMP性能,把mutex(互斥體)變為自旋鎖。我不敢用……
options ADAPTIVE_MUTEXES

# ATA 和 ATAPI 設備
device ata
device atadisk # ATA 磁盤驅動器
device atapicd # ATAPI光驅
device atapifd # ATAPI軟驅
device atapist # ATAPI磁帶機(財主的玩意Smile
options ATA_STATIC_ID #靜態設備標號

# SCSI 控制器
device ahb # EISA AHA1742 family
device ahc # AHA2940 and onboard AIC7xxx devices
device ahd # AHA39320/29320 and onboard AIC79xx devices
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
device mpt # LSI-Logic MPT-Fusion
#device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (newer chipsets + those of `ncr')
device trm # Tekram DC395U/UW/F DC315U adapters

device adv # Advansys SCSI adapters
device adw # Advansys wide SCSI adapters
device aha # Adaptec 154x SCSI adapters
device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device bt # Buslogic/Mylex MultiMaster SCSI adapters

device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50

# 通過SCSI接口的RAID控制器
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device ciss # Compaq Smart RAID 5*
device dpt # DPT Smartcache III, IV - See NOTES for options!
device iir # Intel Integrated RAID
device mly # Mylex AcceleRAID/eXtremeRAID

# SCSI設備
device scbus # SCSI bus (required)
device ch # SCSI media changers
device da # Direct Access (disks)
device sa # Sequential Access (tape etc)
device cd # CD
device pass # Passthrough device (direct SCSI access)
device ses # SCSI Environmental Services (and SAF-TE)

# RAID控制器
device aac # Adaptec FSA RAID
device aacp # SCSI passthrough for aac (requires CAM)
device amr # AMI MegaRAID
device ida # Compaq Smart RAID
device mlx # Mylex DAC960 family
device pst # Promise Supertrak SX6000
device twe # 3ware ATA RAID

# atkbdc0同時用於控制鍵盤和PS/2鼠標器
device atkbdc # AT鍵盤控制器
device atkbd # AT鍵盤
device psm # PS/2 mouse

device vga # VGA顯示卡

# 啟動畫面和屏幕保護程序[我的服務器平時不接顯示器]
device splash

# syscons是默認的控制台驅動
device sc

# 啟用VT220兼容的控制台驅動pcvt
#device vt
#options XSERVER # support for X server on a vt console
#options FAT_CURSOR # start with block cursor

device agp # AGP支持

# 浮點運算支持-必須保留
device npx

# 電源管理
#device apm
# i8254掛起及恢復支持
device pmtimer

# PCCARD (PCMCIA)支持
device cbb # cardbus (yenta) bridge
#device pcic # ExCA ISA and PCI bridges
device pccard # PC Card (16-bit) bus
device cardbus # CardBus (32-bit) bus

# 串口(COM)支持
device sio # 8250, 16[45]50 based serial ports

# 並口支持
device ppc
device ppbus # Parallel port bus (required)
device lpt # Printer
device plip # TCP/IP over parallel
device ppi # Parallel port interface device
#device vpo # Requires scbus and da


# 獨立 PCI 以太網卡支持,這些設備不需要miibus,
# 非SMP情況下還支持DEVICE_POLLING,可惜我一個也沒有Sad
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')

device miibus # MII bus支持

# 以下PCI以太網卡需要MII bus支持才能用
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 (precedence over 'lnc')
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device ste # Sundance ST201 (D-Link DFE-550TX)
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device bge # Broadcom BCM570xx 千兆以太網卡

# ISA網卡
device cs # Crystal Semiconductor CS89x0 NIC
# 'device ed' 需要 'device miibus'
device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device ex # Intel EtherExpress Pro/10 and Pro/10+
device ep # Etherlink III based cards
device fe # Fujitsu MB8696x based cards
device lnc # NE2100, NE32-VL Lance Ethernet cards
device sn # SMC's 9000 series of ethernet chips
device xe # Xircom pccard ethernet

# ISA設備,有個性的代碼……
#device le

# Wireless NIC cards
device wlan # 802.11 support
device an # Aironet 4500/4800 802.11 wireless NICs.
device awi # BayStack 660 and others
device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device wl # Older non 802.11 Wavelan wireless NIC.

# 偽設備
device random # 隨機數采集發生器(/dev/random, /dev/urandom)
device loop   # 自環網絡
device ether  # 以太網支持
device sl     # 內核級 SLIP
device ppp    # 內核級 PPP
device tun    # 包隧道(ppp(Cool, nos-tun(Cool)
device pty    # 偽tty (telnet等等)
device md     # 虛擬盤
device gif    # IPv6對IPv4隧道
device faith  # IPv6對IPv4轉發

# `bpf'偽設備將啟用伯克利數據包過濾器。
# 小心由此帶來的管理問題
pseudo-device bpf #Berkeley packet filter

# USB support
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
#device udbp # USB Double Bulk Pipe devices
device ugen # Generic
device uhid # "Human Interface Devices"
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device urio # Diamond Rio 500 MP3 player
device uscanner # Scanners
# USB Ethernet, requires mii
device aue # ADMtek USB ethernet
device cue # CATC USB ethernet
device kue # Kawasaki LSI USB ethernet

粗略地說說上面的選擇。COM, PPC這些東西不用我說,這台機器並不需要連接打印設備,也不需要連接COM口鍵盤,所以一律去掉。使用ULE調度器的原因是為了給FreeBSD的開發做點貢獻,如果你不喜歡冒險的話,可以考慮使用4BSD的,當然,話說回來,如此在意穩定性的話,用4-STABLE可能是更好的選擇。

上述內核配置文件需要最新的CURRENT代碼。如果你沒有和FreeBSD中央CVS服務器同步的話,那麼你可能需要首先同步代碼;如果還有問題,希望能收到你的來信

Copyright © Linux教程網 All Rights Reserved