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 。通过增加缺省值牺牲更多内核内存你总能
够获得更高的带宽利用率 。如果你正在服务成百上千个连接 , 我们不建议你
增加缺省值 , 因为那样很容易因为滞留的连接累积起来后用完内存 。
但是如果你需要高带宽甚于更少的连接数量 , 特别是你有千兆以太网 , 增加

推荐阅读