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内部被延时写处

推荐阅读