文件系统缓冲区调整
以下 ioo 和 vmstat -v 参数可用于检测 I/O 缓冲区瓶颈和调整磁盘 I/O:
由于缓冲区短缺而引起的阻塞 I/O 计数器
...
0 paging space I/Os blocked with no psbuf
2740 filesystem I/Os blocked with no fsbuf
0 external pager filesystem I/Os blocked with no fsbuf
...
每当 bufstruct 不可用并且 VMM 将线程放入
VMM 等待列表时,paging space I/Os blocked with no psbuf 和 filesystem I/Os blocked with no fsbuf 计数器就会递增。 每当增强型
JFS 文件系统上的 bufstruct 不可用,external pager filesystem I/Os blocked with no fsbuf 计数器就会递增。numfsbufs 参数
当有大量针对文件系统的同步或大型 I/O 或是存在针对文件系统的大型顺序 I/O 时, 这些 I/O 可能会在等待 bufstruct 时成为文件系统级的瓶颈。 您可以使用 ioo 命令增加每个文件系统 (称为 numfsbufs) 的 bufstruct 数。 该值仅在文件系统加载后才会生效;因此如果更改了这个值,那么必须卸载然后再次加载文件系统。 numfsbufs 的缺省值目前为每个文件系统 93 个 bufstruct。
j2_nBufferPerPagerDevice 参数
在增强型 JFS 中,bufstruct 数量由参数 j2_nBufferPerPagerDevice 指定。 当前增强型 JFS 文件系统的缺省 bufstruct 数是 512。 每个增强型 JFS 文件系统的 bufstruct 数(j2_nBufferPerPagerDevice)可以使用 ioo 命令增加。 该值在文件系统被加载后才起作用。
lvm_bufcnt 参数
如果应用程序正在处理很大量的裸 I/O 而不通过文件系统,同文件系统相同类型 的瓶颈也可能出现在 LVM 层上。 极大量的 I/O 加上极快的 I/O 设备可能会导致 LVM 层上的瓶颈。 但是,如果发生此情况,那么 ioo 命令可以增大名为 lvm_bufcnt 的参数,以提供更多 "uphysio" 缓冲区。 该值会立刻生效。 当前的缺省值是 9 个“uphysio”缓冲区。 由于当前 LVM 将 I/O 分为 每个 128 K,而 lvm_bufcnt 的缺省值为 9,故一次可 写入 9*128 K。 如果您的 I/O 大于 9*128K,那么增加 lvm_bufcnt 可能十分有利。
pd_npages 参数
pd_npages 参数指定当删除文件时 RAM 的某一块中应该删除的页数。 改变此值只对那些需要删除文件的 实时应用程序才有用。 由于在分派某个进程/线程之前将删除少量的页面,因此通过减小 pd_npages 参数的值,实时应用程序可获得更快的响应时间。 缺省值是最大可能文件大小除以页面大小(目前为 4096);如果最大可能文件大小为 2 GB,那么 pd_npages 参数的值缺省为 524288。
v_pinshm 参数
当 v_pinshm 参数设置为 1 时,如果执行 shmget() 的应用程序指定 SHM_PIN 作为标志的一部分,那么会使共享内存段中的页由 VMM 固定。 缺省值为 0。
应用程序可以选择带有某个可调参数,它指定应用程序是否应该使用 SHM_PIN 标志(例如:Oracle 8.1.5 及以上版本中提供的 lock_sga 参数)。 请避免固定过多的内存,因为在这种情况下无法进行页替换。 由于节约了这些共享内存段的异步 I/O 开销(不需要异步 I/O 内核扩展来固定缓冲区),因此这种固定是很有用的。