FreeBSD应该如何调优( 三 )


更新atime而弄脏变的紧张,成为系统负担.
例如,你正在运行一个高负载的web服务器,或者一个有大量读者的news服务器,
你可以考虑在大分区上关掉atime更新的mount选项.不要无理由的在任何地方关
掉atime更新选项,例如,你最好在那些以读居多的分区上保持打开这个选项,
例如/和/usr 。(特别是/,因为很多系统工具使用atime字段报告系统状况) 。


STRIPING DISKS
在一个更大的系统上,你可能把一个分区分布(strip)到几个驱动器上去以建立
一个更大的分区 。striping可以通过把操作分开到不同的磁盘上去而提高文件
系统性能 。vinum(8)和ccd(4)可以建立strip化的文件系统 。通常的说,strip
化一个小的分区例如根和/var/tmp或以读居多的分区例如/usr是彻底浪费时间 。
你应该strip化那些需要严重的I/O性能的分区,典型的是/var,/home和定制的
用来存放数据库和web页的分区 。选择正确的strip尺寸是同样重要的 。文件系
统企图把meta-data放在2的倍数边界上,你总是希望减少查找而不是增加查找 。
这意味着你要使用大的离心strip大小例如1152个扇区,使得顺序I/O不用查找
几个磁盘而meta-data将分布在不同的磁盘上而不是集中在一个磁盘上 。如果
你真的很老练,我们建议你使用FreeBSD支持的控制器列表中的真正的硬件raid
控制器 。


SYSCTL TUNING
在系统中有几百个sysctl(8)变量,包括那些看起来可以调整但是实际上不是
的那些 。在这个文档中我们将只是涵盖那些会最大地影响系统的sysctl 。

kern.ipc.shm_use_phys缺省是0,可以被设置成0(off)或1 。把它设置1引起
SysV共享内存段被映射到不可交换的物理内存上 。这个功能只影响那些或者
(A)映射少量内存并在很多进程间共享或(B)映射大量内存并在任意数量的进
程间共享内存的情况 。这个功能允许内核通过将共享内存页锁定在核心存储
中而消除大量的内部内存管理和页面跟踪的开销,使得它们不可被换出 。

vfs 。vmiodirenable缺省是0(不久将改为1)可以设置为0(off)或1(on) 。这个
参数控制目录怎样被缓存 。大多数目录是小的而且只使用在文件系统中的一
个碎块(典型的是1K)甚至在缓冲区中更小(典型的是512字节) 。然而,在缺省
的操作模式中,缓冲取只缓冲固定数量的目录哪怕你有巨量内存 。把这个
sysctl打开就允许缓冲区利用虚拟内存页缓冲来缓冲目录 。这样做的一个缺
点是最少也要用去一个物理页面(典型的是4K)而不是512字节 。如果正在你正
在运行一个需要操作大量文件的服务,我们建议你打开这个选项 。这些服务
包括web页缓冲,大mail系统,news系统 。打开这个选项通常情况下不会导致
性能下降哪怕甚至内存浪费,但是你要尝试去发现 。

有几个和buffer-cache及VM page cache相关的sysctl 。我们不建议去弄乱
它们 。从FreeBSD 4.3开始,VM 子系统能很好的对自己做调整 。

如果你在运行面向网络的应用,net.inet.tcp.sendspace和net.inet.tcp.
recvspace是特别令人感兴趣sysctl 。它们控制任何一个tcp连接允许的发送
和接收缓冲区的大小 。缺省是16K 。通过增加缺省值牺牲更多内核内存你总能
够获得更高的带宽利用率 。如果你正在服务成百上千个连接,我们不建议你
增加缺省值,因为那样很容易因为滞留的连接累积起来后用完内存 。
但是如果你需要高带宽甚于更少的连接数量,特别是你有千兆以太网,增加
缺省值将会得到完全不同的结果 。你可以分开调整接收和发送缓冲区的大小 。
例如,如果你的机器主要是做web服务的,那么你可以减少接收缓冲区的大小

推荐阅读