在SCO OpenServer 5中,用./configure或scoadmin→Hardware /Kernel Manager→Parameters可以配置系统的核心参数,这些系统可调核心参数共分为18大类,
1 Buffers Management 缓存区管理参数
2 Process and paging 进程管理参数
3 TTYS 与字符设备驱动程序相关的数据结构大小和其它限制参数
4 Name Cache 与文件名和节点号之间映射相关的Name Cache有关参数
5 AIO 异步I/O性能相关参数
6 Virtual Disks 虚拟硬盘管理和配置相关参数
7 User and group configuration 控制与单个用户或组相关的系统资源参数
8 Security 系统安全性能参数
9 TTY and console configuration 终端相关参数
10 Filesystem configuration 不同文件系统的配置参数
11 Table limits 动态核心表相关的内存配置参数
12 Streams 字符I/O接口的配置相关参数
13 Messages queues 进程间通讯消息相关参数
14 Event queues 事件队列配置相关参数
15 Semaphores 进程间通讯信号灯相关参数
16 Shared data 进程间通讯共享相关参数
17 Miscellaneous system string buffer和kernel profiler symbol table相关参数
18 Miscellamious device drivers and hardware parameters相关参数
下面让ytjoe带你来一个一个学习这些参数.
Buffers Management 缓存区管理参数包括:
NBUF:total system buffers the value is wrrenty determined at system start up
以KB为单位,定义系统启动时分配的全部缓存区的数量.buffer cache是硬盘和用户地址空间之间的临时缓存区域.NBUF控制buffer cache的数量.改变NBUF必须同时改变NHBUF参数,通常NBUF/NHBUF约等于4.
系统引导时所显示的"kernel i/o bufs"表示buffer cache的大小,在文件/usr/adm/messages中也记录了buffer cache的大小.增加buffer cache的大小,可以提高buffer cache的使用频率,减少硬盘的读写次数,从而整体提高硬盘的I/O性能.使用命令sar -b可以获得系统buffer cache使用频率的有关报告.
通常情况下,系统buffer cache的数量为300~600,在大型的服务器系统上buffer cache的数量为8000或者更多,NBUF缺省值设置为0,表示系统在引导时自动设置buffer cache的大小.
NHBUF:hash buffers(for disk block sorting)
表示系统上有多少个混队队列要分配,每一个混队队列占用8个字节的内存.NHBUF必须是2的乘幂,取值范围是32~524288,缺省值为0,表示系统在引导时自动设置NHBUF的大小.
在单CPU的计算机系统上,NHBUF的值必须少于NBUF大小的1/2.
在多CPU的计算机系统上,NHBUF的值一般设置为单CPU情况下设置的2倍以上,这可以减少需要访问同一混对队列的多个进程之间的可能链接.
NMPBUF:number of dmaable page for scatter-gather and dma reguests
以4KB内存页面为单位,定义16KB簇缓存区、4KB传输缓存区transfer buffer以及1KB复制请求缓存区copy request buffer的数量.如果系统上建立了许多用户,以及系统内存大于16MB,NMPBUF的数量不能少于40.NMPBUF的缺省值为0,这种情况下,系统在启动时,根据内存数量的多少,将NMPBUF设置为40~64之间的某个数值.NMPBUF的最大取值为512.
PLOWBUFS:Percentage og buffers,below 16MB
以百分比的形式,表示第一个16MB的RAM中,所包含的buffer cache数量.如果系统中硬盘等外围设备的控制器不能执行DMA到内存的操作(例如24位地址控制器),那么应该将PLOWBUFS值尽可能地设置的大些,如果允许,可以把PLOWBUFS值设置为100,这样可以消除16MB以上内存和复写内存copy buffer之间的复制需要.PLOWBUFS的取值范围是1~100,缺省值为30.系统内存多于16MB,可以调整PLOWBUFS的值,否则建议使用缺省值.
PUTBUFSE:Size of the circular buffer putbuf
这个参数确定循环缓冲区PUTBUF的大小,PUTBUF包含了最近的由操作系统传输给终端的PUNBUFSE自负,可以使用crash(ADM)查看PUTBUF的内容.PUTBUFSE缺省值是2000,最大值是10000.
MHINODE:inode hash table size
确定inode hash table的大小,MHINODE的取值必须是2的乘幂,取值范围是64~8192,缺省值是128.
BDFLUSHR:interval in secouds between bdflush being run
这个参数以秒为单位定义系统守护进程bafflush的运行时间长度,既定以buffer cache中的内容写入硬盘的时间.BDFLUSHR必须和NAUTOUP联合调整.取值范围是1~300秒,缺省值为30秒.加大该值会降低硬盘性能,增大数据丢失概率.如果将BDFLUSHR设置为300秒,平均而言,buffer cache中大约150秒的数据将丢失.
NAUTOUR:age,in secouds,tat a delayed-write buffer must be before bdflush writes it out
以秒为单位,定义缓冲区数据的寿命,既定义文件系统自动更新的时间间隔.其值大小应该同BDFLUSHR匹配.只有当bdflush守护进程运行,并且缓存区被安排了一段NAUTOUR时间或者更长的时间用于写操作,缓存区里的数据才被写入硬盘.也就是说,并不是所有的写缓存区在bdflush守护进程运行时都会被更新.因为bdflush守护进程运行的时间相对NAUTOUP时间短一些,这样就可以实现某个进程对缓存区多次进行写操作,减少对硬盘的实际写操作.
如果减少BDFLUSHR/NAUTOUP比值,实际的硬盘读写次数也会减少,系统的I/O性能将得到提高,但I/O过程的可靠性将降低.如果增加BDFLUSHR/NAUTOUP比值,系统的I/O过程的可靠性会得到提高,但I/O性能将下降.
NAUTOUP取值范围是0~60,缺省值是10.
Process and paging所包含的参数:
GPGSLO:Lowest amount freemen can be,before pages are stolen form processes
以页面为单位,为进程vhand确定以页面为单位的自由内存低限标志。通常,GPGSLO设置为页面内存的1/16。GPGSLO的取值范围是0~200,并且必须小于GPGSHI的大小。
GPGSHI:once pages are stolen form processes , don't stop before freemen reaches this value
以页面为单位,为进程vhand确定以页面为单位的自由内在高限标志。通常,GPGSHI设置为页面内在的1/10。GPGSHI的取值范围是1~300,并且必须大于GPGSLO的大小。
MINARMEN:mininun available resident memory,in pages,to maintain in order to avoid deadlock.
用户进程的文本和数据段保留的最小内存页面数。可以使用crash(ADM)中的od-davailrmen命令行查看为用户进程所保留的物理内存。MINARMEN的取值范围是25~40个内存页面,缺省取值为25个内存页面。
如果系统内存显示:
CONFIG:routine -n resident pages wanted
这表明系统内存不足,需要增加MINARMEN的大小。
MINASMEN:mininum available swappble menory , in pages;to maintain in order to avoid deadlock。
定义系统所保留的内存和交换区的最小页面数。可以使用crash(ADM)中的od -d availsmen命令行查看系统交换区的大小。MINASMEN的取值范围是25~40个内存页面,缺省取值为25个内存页面。
如果系统显示:
CONFIG:swapdel - Total swap area too small (MINASMEM = number exceeded)
这表明需要增加MINASMEN的大小。
如果系统显示:
CONFIG:routine -n swappable pages wanted
这表明系统没有足够的物理内存分配给MINASMEN,会导致系统上的应用程序经常出现故障,需要增加系统的内存或交换区的大小,才能从根本上解决这个问题。
MAXSLICE:maxinmum time slice for processes , in clock ticks。
以系统时钟计时方式定义用户进程的最大时间片。当一个进程执行完分配给它的CPU时间片后,返回就绪状态或封锁状态,系统从处于就绪状态的进程队列中选择优先级最高的一个进程,将MAXSLICE时间片分配给这个进程。MAXSLICE取值范围为25~100,缺省值为每秒100个时间片。
SPTMAP:size of system virtual space allocation map。
用来定义Unix核心虚拟地址空间分配变换表项数组的长度。SPTMAP取值范围是100~500,缺省取值为200。
TTYS所包含的参数:
NCLIST:number of characeter list buffers
以字符块为单位,指定要分配的字符队列缓存区的数量,每一个字符块包含64字节数据.这些buffer动态地链接起来,组成终端等低速设备的输入输出队列.每个终端所需要的平均buffer数目为5~10个,每一个buffer空间连同所附加的头表项共占用72个字节.
如果系统显示:
CONFIG:Out of clists(NCLIST=number exceeded)
这表明系统的字符队列缓存区已经被占满,终端相关的输入输出字符将会被丢失.
如果系统上用户通过9600bps以上的串行线登录进入系统,NCLIST的大小一般设置为同时登录进入系统最大用户数期望值的10倍.NCLIST的取值范围是120~16640,缺省值的大小为120.NCLIST的大小应该和TTHOG共同进行调节.
TTHOG:size of raw gueue of tty driver
以字节为单位,定义tty驱动程序字符队列的大小,以及tty缓存区储存字符的能力.增加TTHOG的大小,可以提高tty缓存区储存字符的能力,从而使得在系统极度繁忙时,减少输入字符的丢失概率.TTHOG的取值范围是256个字节至8192字节,缺省是256个字节.如果数据传输速度超过9600bps,那么应该根据系统上所运行的应用程序的情况,将TTHOG的大小设置为2048或者4096.TTHOG的大小应该和NCLIST共同进行调节,TTHOG是对一个串口的定义,NCLIST是对系统所有串口的定义,在改变TTHOG值时,一定要改变NCLIST的值.
例如,TTHOG为2048,NCLIST的大小为320,这表明每个串口最多可使用2048/64=32个字符块,系统总共有320/32=10个串口.如果根据需要把TTHOG增加为4096,那么这个串口最多可使用64个字符块,NCLIST的大小应该调整为640.
Name cache所包含的参数:
CACHEENTS:maximum number of name components in name cache
取值范围是1~4096,缺省值是256.设置CACHEENTS大小时,可以通过sar -v命令查看in-core inode table增长的最大值,然后将CACHEENTS值设置为in-core inode table的最大增长大小的3倍.
AIO所包含的参数:
NAIOPROC:number of processes-which may be simultaneously doing AID
定义异步I/O(AIO)进程表process table的大小,既定义系统能够同时执行的异步I/O进程的最大数目.NAIPROC的取值范围是1~16,缺省值是5.
如果系统提示:
CONFIG:aio memlock - AIO process table overflow(NAIOPROC=number exceeded)
这表明系统AIO进程表溢出,需要将NAIOPROC 值适当调大.
NAIOREQ:maximum number of pending AIO reguests
定义异步I/O1请求表AIO request table的大小,既定义系统异步I/O请求的最大值.NAIOREQ的取值范围是5~200,缺省设置值是120.
如果系统提示:
CONFIG:aio breakup-AIO request table overflow(NAIOREQ=number exceeded)
这表明系统AIO请求表溢出,需要将NAIOREQ值适当调大.
NAIOBUF:number of AIO buffer(should be the same as NAIOREQ)
定义AIO缓存区表的大小,既定义系统异步I/O缓存区的最大值.NAIOBUF值必须与NAIOREQ的大小一致.
如果系统提示:
CONFIG:aio breakup-AIO buffer table overflow(NAIOBUF=number exceeded)
这表明系统AIO缓存区表溢出,需要将NAIOBUF值适当调大.
NAIOHBUF:number of AIO hash gueues(internal)
定义AIO混列队列的数量.NAIOHBUF的取值范围是1~50,缺省值是25.
NAIOREQPP:maximum number of AIO reguests that a single proless can have pending
定义一个单个进程可以拥有的未完成的异步I/O请求的最大数量.NAIOREQPP的取值范围是30~200,缺省设置值是120,这个缺省值的大小意味着一般情况下单个进程可能能够消耗掉所有的异步I/O资源.
NAIOLOCKTBL:number of entries in the internal kernel table for AIO lock permissions
(定义用于异步I/O加锁许可的内部核心表中的表项数.NAIOLOCKTBL的取值范围是5~20,缺省值是10.如果文件/usr/lib/aiomemlock重的表项数目比较多,就需要将NAIOLOCKTBL值适当增大.
如果系统提示:
CONFIG:aio setlockauth - AIO buffer table overflow(NAIOLOCKTBL=number exceeded)
这表明系统AIO加锁表溢出,需要将NAIOLOCKTBL 值适当调大.
只有系统上配置了虚拟磁盘阵列,此类参数才有意义。
VDUNTIMAX:maximum number of virtual disks which may be configured
所能配置的虚拟磁盘的最大数目。如果系统上配置的虚拟硬盘的数目是固定的,那么用户可以将VDUNITMAX的大小设置成实际值的大小。VDUNITMAX的取值范围是5~256,缺省值是100。
VDJOBS:maximum number of virtual disks jobs
系统允许的虚拟硬盘任务项数目的最大值。VDJOBS的取值范围是100~400,缺省值是200。
VDUNITJOBS:maximum number of jobs per virtual disk
定义系统中每一个虚拟硬盘的任务项数目的最大值。VDUNITJOBS的取值范围是50~200,缺省值是100。
VDHASHMAX:size of data integrity hash table
定义用于保证在读、修改、写操作过程中数据完整性的混队队列表的大小。每一个混队队列表的表项占用24个字节的内容。VDHASHMAX的大小必须是2的乘幂。VDHASHMAX的取值范围是512~8192,缺省值是1024。
VDASYNCPARITY:parity on RAID 4&5 up dated asynchronously
控制RAID 4和RAID 5上的奇偶阵列设备进行的写操作是否是异步的。VDASYNCPARITY的取值是0或者1。VDASYNCPARITY的缺省值是1,表示是异步的;如果将VDASYNCPARITY设为0,表示是同步的。
VDASYNCWRITES:parity on RAID updated asynchronously
控制对RAID 1的镜像硬盘进行的写操作是否是异步的。VDASYNCWRITES的取值是0或者1。VDASYNCWRITES的缺省值是1,表示是异步的;如果将VDASYNCWRITES设为0,表示是同步的。
VDASYNCMAX:maximum number of outstanding asynchronous parity writes
表示在VDASYNCWRITES和VDASYNCMAX中有一个或者两个设置为1时,能够对RAID 1、RAID 4、RAID 5进行异步写操作的最大数目。VDASYNCMAX的取值范围是20~64,缺省值时20。
VDWRITEBACK:write back of read-modify-write jobs completed asynchronously
控制是否将读、修改、写任务项异步地回写。VDWRITEBACK的取值时0或者1。VDWRITEBACK的缺省值时0,表示禁止回写;如果将VDWRITEBACK设置为1,表示允许回写,这样可以使得在读、修改、写任务项的最后阶段异步地进行写操作,从而提高虚拟硬盘的输入、输出量。允许回写的功能可以一定程度地保证在系统崩溃的突发情况下提高系统数据的完整性。
VDRPT:Interval in seconds between error conditions being reported
以秒为单位,定义报告错误意识的时间间隔。VDRPT的取值范围是0~86400,缺省值是3600。如果将VDRPT的大小设置为0,表示系统在探测错误时立即进行报告。