FreeBSD 5-CURRENT 的内核配置与优化

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


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多