FreeBSD下的系统性能调优( 五 )


个cluster(簇)大概2K的内存 , 所以值1024代表保留2M内核内存作为网络缓冲区 。
你可以简单的计算出需要多少 。如果你有一个web服务器最多可以有1000个并发
连接 , 每个连接吃掉16K接收和发送缓冲区 , 你大概需要32MB的网络缓冲区来对
付它 。一个比较粗糙的方法是乘以2 , 所以32MBx2 = 64MB/2K = 32768 。所以这
个情况下你将需要设置nmbclusters到32768 。我们建议为那些内存不多的机器
设置1024到4096而4096到32768为那些有很多内存的机器 。无论如何如何你不能
设置一个很随意的值 , 这可能导致启动时崩溃 。netstat(1)的-m选项可以用来查
看网络缓冲区的使用情况 。老的FreeBSD系统没有这个sysctl , 所以需要设置内核
配置选项NMBCLUSTERS 。

越来越多的程序正在使用sendfile()系统调用通过网络传送文件 。
kern.ipc.nsfbufs用来控制sendfile()可以使用的多少文件系统缓冲区数量来
进行工作 。这个参数名义上随maxusers伸缩 , 所以你不应该去弄乱这个参数 ,
除非在非常特殊的场合 。

KERNEL CONFIG TUNING
在一个大系统中有大量的内核选项你可能需要摆弄 。为了改变这些选项你需要从
源代码编译内核 。config(8) 和手册是学习怎样做这件事情的好起点 。通常建立
你自己的定制的内核的第一件事情是去掉所有你不用的驱动程序和服务 。删除
象INET6和你不用的驱动程序可以减少内核的大小 , 有时候能达1兆或几兆 , 留
出更多的内存给应用程序 。

SCSI_DELAY和IDE_DELAY可用于减少系统启动时间 。缺省值相当高 , 在启动时可
引起15秒以上的延时 。减少SCSI_DELAY到5秒通常是可行的 。减少IDE_DELAY也是
行的但是你必须更小心点 。

有很多*_CPU的选项你可以注释掉 。如果你想让内核只能在奔腾类CPU上运行 ,
你可以轻松的拿掉I386_CPU和I486_CPU , 如果你相信你CPU可以被认作奔腾2或
更好的CPU , 你可以拿掉I586_CPU 。有些clone可能被认作奔腾或486 , 没有这
些选项将不能启动 。如果它能工作 , 真是太伟大了! 操作系统将能更好地使用
高端CPU的的MMU功能 , 任务切换 , 记时 , 甚至设备操作 。另外 , 高端CPU支持
4MB MMU页面 , 内核用来将自己影射到内存中 , 在重负荷的系统调用下这会增
加性能 。

IDE WRITE CACHE
FreeBSD 4.3不认真考虑地将IDE写缓存关闭 。这降低了到IDE磁盘的写盘带宽 ,
但是考虑到硬盘厂商引入的严重的数据一致性问题而言是必要的 。基本问题是
IDE驱动器在写完成上说谎 。当IDE写缓冲打开时 , IDE硬盘不仅不会按次序将
数据写入磁盘 , 而且在严重的磁盘负荷下有时会永远耽搁有些数据块 。当系统
崩溃或掉电时会导致严重的文件系统损坏 。所以我们的缺省值是安全的 。不幸
的是结果是巨大的性能损失 , 我们投降了并在发行后把缺省值改了过来 。你
应该通过查看hw.ata.wc这个sysctl来检查你系统上的缺省值 。如果IDE写缓冲
是关闭的 , 你可以将通过将hw.ata.wc内核变量设置为1而将它改回来 。这必须
在boot loader(8) 启动时做 。企图在内核启动后在做是没有作用的 。请参见
ata(4)和loader(8)。

还有IDE硬盘的一个试验性的功能叫做hw.ata.tags(也能够在boot loader中设
置)允许写缓冲被安全地打开 。这是将SCSI的tagging功能带到IDE驱动器上 。
写这篇文章时只有IBM的DPTA和DTLA驱动器支持这个功能 。警告!这些驱动器
明显有质量控制方面的问题 , 所以我建议你不要在这个时候买 。如果你需要性
能 , 选用SCSI吧 。

CPU , MEMORY , DISK , NETWORK
做何种调整依赖于你的系统在负载变大时哪一部分开始成为瓶颈 。如果你的系统

推荐阅读