Solaris 可调参数参考手册

ufs_ninode

说明

指定要在内存中保存的 inode 数。Inode 将针对 UFS 进行全局高速缓存,并非以每个文件系统为基础进行高速缓存。

在这种情况下,关键参数为 ufs_ninode。此参数用于计算两个可影响 inode 高速缓存处理的关键限制。将计算高水位标记 ufs_ninode / 2 以及低水位标记 ufs_ninode / 4

当系统使用一个 inode 运行时,可能会出现以下两种情况之一:

  • inode 引用的文件不再存在于系统上,因此将删除 inode。删除 inode 之后,空间又可进行 inode 高速缓存,以供其他 inode(将从磁盘读取或针对新文件创建)使用。

  • 文件仍然存在,但是不再由运行的进程引用。随后将 inode 放到空闲队列中。任何引用的页仍在内存中。

当 inode 处于空闲状态时,内核便会将空闲进程向后延迟一段时间。如果文件系统为日志文件系统,则内核还会延迟删除 inode。将有两个内核线程处理这种延迟处理,每个线程负责一个队列。

执行推迟处理时,系统会将 inode 放入删除队列或空闲队列。这两个队列由单独的线程进行处理。将 inode 放到队列时,会根据低水位标记检查队列占用率。如果队列占用率超过低水位标记,则会唤醒与队列关联的线程。唤醒队列之后,线程便会在队列中运行,并将与 inode 关联的所有页强制迁出到磁盘从而释放 inode。当线程删除了唤醒队列时队列中 50% 的 inode 时,便会停止。

如果空闲线程无法跟上负载变化,则使用第二种机制。当系统需要查找 vnode 时,便会执行 ufs_vget 例程。vget 执行的第一项操作是检查空闲队列的长度。如果长度大于高水位标记,则会从空闲队列中去除两个 inode 并将它们“置于空闲状态”(刷新页并释放 inode)。vget 将在获取供自身使用的 inode 之前执行此操作。

系统尝试通过以下操作进行优化:将不包含主存页的 inode 放在空闲列表的开头,将包含页的 inode 放在空闲列表的结尾。但是,系统不对列表中的其他项进行排序。将始终从空闲队列的前部删除 inode。

仅当执行同步、取消挂载或重新挂载时,才从队列中全部删除 inode。

鉴于历史原因,此参数不需要 ufs: 前缀。

数据类型

带符号整数

缺省值

ncsize

范围

0 到 MAXINT

单位

Inode

是否为动态

验证

如果 ufs_ninode 小于或等于零,则将值设置为 ncsize

何时更改

当缺省 inode 数不足时。如果 kstat -n inode_cache 报告的 maxsize reached 字段的值大于 kstat 中的 maxsize 字段的值,则 ufs_ninode 的值可能过小。如果 inode 过于空闲,也可能会出现问题。

可以通过使用 kstat -n inode_cache 查看 inode_cache kstat 来标识过于空闲的 inode。Thread idles 是由后台线程置于空闲状态的 inode,而 vget idles 是指请求进程在使用 inode 之前就将其置于空闲状态的 inode。

承诺级别

不稳定