FreeBSD应该如何调优( 二 )



为什么要分区? 为什么不建一个大的/分区就行了? 那样我就不需要考虑分区大
小问题 。有几个原因显示这不是个好注意 。首先,每个分区都有不同的操作特征,
分开它们有利于文件系统准对这些特征调整它自己.例如,根和/usr分区主要是
读操作,只有少量的写,而大量的读和写可以发生在/var在/var/tmp 。把小的但
是具有更繁忙的写操作的分区分开,就不会影响读操作居多的分区.再就是,把
写操作居多的分区靠近磁盘外侧(例如,不是在一个大分区前,而是分区表后)有
利于对你经常需要的分区增加性能 。你可能也需要在大分区中的I/O性能,但是
它们是那样的大以至于把它们移到磁盘外侧也不会显著增加性能,但是把/var移
到磁盘外侧会有显著的不同.

正确分区你的系统允许你调整newfs(8)和tunefs(8)的参数 。调整newfs(8)需要更
多的经验,但是会带来显著的性能提高 。有三个参数可以相对安全的调整:
blocksize(块尺寸),bytes/inode(每i节点字节数)和cylinders/group(每组柱面
数).

当块尺寸是8K或16K时,FreeBSD运行的最好.缺省的文件系统块尺寸是8K 。对于
一个大的分区使用16K块尺寸是个好注意.这同样需要你指定碎片(Fragment)大小 。
我们建议碎片总是块大小的1/8(其他的碎片尺寸测的不多) 。newfs(8)选项是
newfs -f 2048 -b 16384 。。。。使用更大的块尺寸将导致缓冲区碎块,降低性能.

如果大分区主要趋向于使用少量的大文件,例如数据库文件 。你可以增加
bytes/inode比例,它减少该分区的i节点的数量(最大可被建立的文件和目录数量
) 。减少文件系统i节点数量可以大大减少fsck(8)在系统崩溃后恢复的时间 。不要
使用这个选项,除非你确实在这个分区存放大文件.如果你过度这样做,你可能
会被文件系统依然有大量的空间而不能创建文件的事情所困扰 。使用32768,
65536或262144 bytes/inode是建议的值 。你可以调的更高,但是那只影响fsck的
恢复时间.例如,newfs -i 32768...

最后,增加cylinders/group比例可把i节点间距放的更近 。这样可以增加目录性能
和减少fsck的是时间.如果你使用这个选项,我建议最大化 。使用newfs -c999,
然后newfs报错会告诉你最大可能的值.

tunefs(8)可以进一步调整文件系统 。这个命令可以运行在单用户方式而不用重
新格式化文件系统 。然而,这个程序可能是系统中最容易被滥用的程序 。许多人
企图通过把最小自由空间百份比设置为0来增加可使用的文件系统空间,这可
导致严重的文件系统碎片,我们不建议这样做 。实际上唯一值得使用的tunefs
选项是使用tunefs -n enable /filesystem 打开softupdates开关(注意:在5.x中,
可以用newfs -U选项打开) 。softupdates戏剧性地提高meta-data的性能,主要
是文件创建和删除 。我们建议对所有的文件系统都打开softupdates开关 。
softupdates有两个副作用你必须知道: 首先softupdats保证当系统崩溃时文件
系统状态的一致性的,但是更新磁盘可能要延时几秒种 。如果系统崩溃,可能
丢失更多的数据 。第二,softupdates延时文件系统自由块的释放,如果你的文
件系统将要满了(例如,根文件系统),对系统做一次升级,例如,make insta-
llworld,可能导致空间不够而失败.

大量的运行时mount选项可以帮你调整系统 。最明显最危险的是async 。不要尝试
使用它,这太危险了.一个危险性更少但是很有用的选项是noatime 。UNIX文件
系统通常更新文件或目录的最近存取时间,这个操作在FreeBSD内部被延时写处
理,通常不会成为系统的负担.如果你的系统连续存取巨量的文件,缓冲区会被

推荐阅读