FreeBSD 5-CURRENT 的内核配置与优化
发布时间:2006-10-14 8:46:12   收集提供:gaoqian

在本文针对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服务器同步的话,那么你可能需要首先同步代码;如果还有问题,希望能收到你的来信

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50