hpux 内核管理

 

第1章 内核管理
1.1 调整HP-UX内核参数意义
依据不同的生产情况,惠普公司提供了不同的HP-UX的安装介质。操作环境 (OE) 是经过测试并集成的应用程序软件包,用于与操作系统配合使用,并提供系统所需的功能。HP-UX 11i v1 (B.11.11) DVD 提供了下列操作环境:
a) HP-UX 11i v1 Foundation OE (FOE) — 用于满足 Web 服务器、目录服务器和前端服务器的需求,此 OE 包括多种应用程序,如 HP-UX Web 服务器套件、Java2 Standard Edition 技术和 Mozilla 应用程序套件。这种操作环境与 HP-UX 11i 捆绑在一起时称为 HPUX11i-OE
b) HP-UX 11i v1 Enterprise OE (EOE) — 用于数据库应用程序服务器和逻辑服务器,此操作环境包含 HP-UX 11i v1 Foundation OE 软件包,以及其他用于支持企业级服务器的应用程序,如 GlancePlus Pak。这种操作环境与 HP-UX 11i 捆绑在一起时称为 HPUX11i-OE-Ent。
c) HP-UX 11i v1 Mission Critical OE (MCOE) — 用于功能强大的大型后端应用程序服务器和数据库服务器,这些服务器可访问客户文件并进行事务处理,此操作环境包含 Enterprise OE 软件包,以及其他用于支持关键任务服务器的应用程序,如 HP Serviceguard 和 Workload Manager。这种操作环境与 HP-UX 11i 捆绑在一起称为 HPUX11i-OE-MC。
d) HP-UX 11i v1 Minimal Technical OE (MTOE) — 用于运行 HP-UX 11i v1 的工作站,此操作环境包括 Mozilla 应用程序套件、Perl、VxVM 和 Judy 应用程序,以及 OpenGL Graphics Developer's Kit。这种操作环境与 HP-UX 11i 捆绑在一起时称为 HPUX11i-MTOE。
e) HP-UX 11i v1 Technical Computing OE (TCOE) — 用于进行大量计算的工作站和服务器应用程序,此操作环境包含 MTOE 软件包以及大量图形应用程序和 Math Library。这种操作环境与 HP-UX 11i 捆绑在一起时称为 HPUX11i- TCOE。
不同的HP-UX操作环境有不同的内核参数,当HP-UX启动时,HP-UX内核被调入到内存时,HP-UX的内存被分为两个单元:内核区域和用户区域,内核区域存放并运行着核心代码,顾名思义,用户区域也存放并运行用户程序。作为用户进程来讲它是不能访问内核区域内存空间以及其他用户进程的地址空间的,核心代码也同样不能访问用户区地地址空间,HP-UX可以利用一些特殊的核心函数即系统调用来间接完成这些访问。HP-UX内核参数就是通过内核(vmunix)的调入来实现其设置。
内核参数的可调整性正是UNIX灵活性的反映,同时也加大了UNIX管理的复杂性。可调整的HP-UX内核参数容许系统管理员依据特定的系统需要,或者为了更好的性能,或者更有效的资源分配对HP-UX内核参数进行设置。每一个HP-UX内核参数的理想值同特定的系统硬件配置和不同的应用相关。惠普对每一个HP-UX内核参数提供了一个缺省值,但依据生产的实际情况对HP-UX内核参数进行调整是必须。不同的HP-UX内核参数通常属于不同的子系统,有些是独立的,有些是相互关联的。需要说明的是,每一个HP-UX内核参数依据操作系统版本的不同,特定HP-UX内核参数的行为模式可能完全不一样,本书主要就HP-UX release 11i版进行说明。其他版本请参考相应版本的releases of HP-UX。 3
HP-UX内核参数在系统启动时被调入系统中,不适当的设置或错误的设置会导致系统性能严重下降,系统无法启动,系统崩溃(system panic)或其他难以诊断的故障。所以,作为一个高级系统管理员,对HP-UX内核参数的更改,必须确保其适当性并保留良好的适当记录,同时要平衡多方面因素,确保HP-UX内核参数值的适当性和正确性。
1.2 HP-UX内核参数的解释
HP-UX内核参数可以依据作用分为如下11个子系统:
1) 记账子系统(Accounting Subsystem)
2) 异步IO子系统(Asynchronous I/O Subsystem)
3) 光纤通道子系统(FibreChannel Subsystem)
4) 文件子系统(File System Subsystem)
5) 进程间通信子系统(Interprocess Communication (IPC) Subsystem)
6) 内核转储子系统(Kernel Panic Dump Subsystem)
7) 内存分页子系统(Memory Paging Subsystem)
8) 进程管理子系统(Process Management Subsystem)
9) 旋转锁子系统(Spinlock Pool Subsystem)
10) 数据流子系统(Streams Subsystem)
11) 其他参数(Miscellaneous Parameters)
1.2.1 记账子系统(Accounting Subsystem)
1) 相关参数。
2个参数同记帐子系统相关,具体情况如下:
acctsuspend
suspend accounting
最小值
-100
最大值
100
缺省值
2
acctresume
resume accounting
最小值
-100
最大值
101
缺省值
4
2) 参数说明。
记帐功能跟踪系统和用户进程的信息并维护特定的日志信息,只在启用 HP-UX 记帐功能时使用,acctresume 和 acctsuspend内核参数才被使用。这些变量是统计日志文件所在文件系统(缺省情况下为/var/adm)的百分比。在文件系统自由空间降到acctsuspend指定的百分比(绝对百分比)时,即终止记帐;只有分配的空间达到acctresume指定的百分比时才能恢复记帐。
acctsuspend参数设置
acctsuspend参数能够对记帐功能终止记帐时所需要的可用文件系统的大小进行阀值设置,范围从0%到100%,acctsuspend参数值加上minfree的值会形成一个0或负值,0或负值将容许记帐日志文件覆盖文件系统的被保护的预留的最小百分比(minfree的值)的空间,这将导致文件系统有彻底被使用完毕的危险。例如:
minfree = 10,acctsuspend = 5,acctresume = 8
当文件系统的可用空间少于15%,(minfree + acctsuspend= 10 + 5= 15)时,记帐功能将被终止。 4
acctresume参数设置
acctresume参数能够对记帐功能恢复记帐时所需要的可用文件系统的大小进行阀值设置,范围从0%到100%,acctresume参数值加上minfree的值会形成一个100或大于100的值,一个100或大于100的值意味着要恢复记帐功能,文件系统必须是完全空的,这在实际操作中是不可行的,极有可能导致记帐功能永远不能恢复,除非reboot服务器或重启记帐功能。例如:
minfree = 10,acctsuspend = 5,acctresume = 8
当文件系统的可用空间大于18%,(minfree + acctresume= 10 + 8= 18)时,记帐功能将被恢复。
为防止恢复记帐和终止记帐冲突,acctresume参数值必须大于acctsuspend参数值。
1.2.2 异步IO子系统(Asynchronous I/O Subsystem)
1) 相关参数。
5个参数同异步IO子系统相关,具体情况如下:
aio_listio_max
Max number of AIO operations that can be specified in an lio_list() call
最小值
2
最大值
0x10000
缺省值
256
aio_max_ops
Maximum number of AIO operations that can be queued at any time
最小值
1
最大值
0x100000
缺省值
2048
aio_physmem_pct
Maximum percentage of the total physical memory in the system that can be locked for use in POSIX asynchronous I/O operations
最小值
5
最大值
50
缺省值
10
aio_prio_delta_max
Maximum slowdown factor; greatest priority reduction allowed in aiocb's aio_reqprio fiel
最小值
5
最大值
50
缺省值
10
max_async_ports
System-wide maximum number of ports to the asynchronous disk I/O driver that processes can have open at any given time
最小值
1
最大值
memory limited
缺省值
50
.
2) 参数说明。
aio_listio_max参数规定单个lio_list系统调用能够发起的最大的异步IO操作的数目;
aio_max_ops参数规定在任意时刻队列中最大的异步IO操作的数目;
aio_physmem_pct参数规定异步IO操作能够在系统总内存锁定使用的内存的最大百分比;
aio_prio_delta_max参数规定异步IO操作最大的优先级减少值;
max_async_ports参数规定在任意时刻系统范围内进程能够打开的最大的到磁盘驱动的异步磁盘IO操作的端口数目;
以aio_开头的参数主要是管理异步IO操作,max_async_ports参数则相关到磁盘驱动的异步磁盘IO操作的端口数目。异步IO操作对数据库系统往往产生很大的影响,我们将在逻辑卷管理章讨论异步IO的设置。
1.2.3 光纤通道子系统(FibreChannel Subsystem)
1) 相关参数。 5
3个参数同光纤通道子系统相关,具体情况如下:
max_fcp_reqs
Maximum Maximum Concurrent FCP Requests Allowed
最小值
1
最大值
1024
缺省值
512
num_tachyon_adapters
Number of Tachyon Adapters
最小值
1
最大值
5
缺省值
0
fcp_large_config
Define a Tachyon host bus adapter configuration as large
最小值
1
最大值
0
缺省值
0
2) 参数说明。
max_fcp_reqs参数规定单个光纤通道卡允许并发发起的FCP请求的最大数目,该值同系统配置,IO负载的大小,主机内存有关,FCP请求就是IO操作;
num_tachyon_adapters参数规定单个主机能够安装的最大的光纤通道卡的数目;
fcp_large_config参数规定如下,如果为0,则任意一个Tachyon主机卡,能够并发通信的端口数为64,如果为1,则任意一个Tachyon主机卡,能够并发通信的端口数为125,对于武断环系统,最大的端口数为126;
以上三个参数主要同光纤通道协议系统有关,主要使用光纤通道协议来处理处理器同外设之间的交互和通信,这些参数规定了被分配用光纤通道协议进行并发读,写和控制请求的内存的数目和类型。
1.2.4 文件子系统(File System Subsystem)
同系统性能相关的参数分多个类别,
1) 同缓冲相关的参数。
这些参数分配物理内存给文件系统的静态和动态缓冲,具体情况如下:
bufpages
Pages of static buffer cache
最小值
0 or 6 (nbuf*2 or 64 pages)
最大值
Memory limited
缺省值
0
dbc_min_pct
Minimum dynamic buffer cache
最小值
2
最大值
90
缺省值
5
dbc_max_pct
Maximum dynamic buffer cache
最小值
2
最大值
90
缺省值
50
nbuf
Number of static buffer headers
最小值
0 or 16
最大值
Memory limited
缺省值
0
disksort_seconds
Maximum wait time for disk requests
最小值
0 or 16
最大值
Memory limited
缺省值
0
bufpages参数这个值以前用于定义为文件系统IO中使用的高速缓冲区分配的物理内存量(以4096字节页面为单位)。 以前的HP-UX版本一般将 10% 的物理内存用于此任务,但是最近的版本已实现了内存的动态分配。在10.X版中,如果 bufpages是一个非零值,它就成为高速缓冲区可用内存页面的最大值,实质变成一个限制,尽管可能很少使用,但不会超过这个值。在10.X版中,bufpages经常设为0,它表示请求动态高速缓冲区,dbc_min_pct 和 dbc_max_pct参数将设置一个高速缓冲区允许的可用内存的最小和最大百分比。 在9.X版中,高速缓冲区的内存用bufpages变量明确确定。如果/etc/conf/dfile (700系列)或/etc/conf/gen/S800(800系列)中缺少了这个变量,高速缓冲区就被设为可用内存的10%;否则该值以页面(4096字节)数填入。 6
dbc_max_pct和dbc_min_pct这两个变量定义缓冲文件系统页(也叫做高速缓冲区)可用的内存百分比范围。适当取值一般可以产生以下效果:低于或等于 95% 的读缓冲命中率- 低于或等于 70% 的写缓冲命中率 用sar -b 5 5 (分别为%rcache 和 %wcache)可以对该值进行监视。也许可以保证减少读缓冲命中。 为高速缓冲分配过多内存的另一个现象可能是用户响应时间中无法解释的偶然或间歇性停顿。 dbc_min_pct的缺省值是5, dbc_max_pct的缺省值是50。在许多情况下,建议为高速缓冲区分配200mb或更少的内存空间。dbc_max_pct是机器上一个主要的减少对象,在其中可以观察到内存压力,以及刚才所描述的停顿。 default_disk_ir 磁盘即时报告。这个变量确定 write()系统调用是否等待数据实际写入磁盘,或者只是写入磁盘缓存。缺省的动作是禁止,表示write()将写入磁盘而不是磁盘缓存。版本注释中提供了有关的附加信息。
nbuf 这个参数正在过时。目前,这个值主要在300/400系列平台上使用,用于配置高速缓冲区。它与bufpages一起使用 - 每两 个bufpages一个nbuf。如果在700或800系列机器上使用,一般会在/etc/dmesg或syslog中出现错误,显示nbufs数被调 整。对于使用HP-UX 9.0或更高版本的700/800系列机器,不建议用这个参数代替bufpages、dbc_max_pct或dbc_min_pct 。如果nbuf被从核心变量列表中完全移走,那么将来持续使用可能会导致出现错误。
需要再次说明nbuf和bufpages主要控制静态缓冲,静态缓冲分配方式已经过时。而dbc_max_pct和dbc_min_pct主要控制动态缓冲,如果bufpages为非零,它分配规定值大小的4k的页面给文件系统作缓冲,nbuf参数主要是为了后向兼容,如果为非零,它规定在缓冲头队列中最大的缓冲头数目,如果为零,它规定每分配2个bufpages则创建一个缓冲头。设置nbuf和bufpages为零,设置dbc_max_pct和dbc_min_pct到合适的值,这开启动态缓冲。如果nbuf和bufpages有一个不为零,则开启静态缓冲。
disksort_seconds这个参数规定等待磁盘请求的最大超时时间。
2) 同VxFS文件系统相关的参数。
这些参数规定vxfs文件系统的i节点的目录名查找缓冲NDLC(Directory Name Lookup Cache)的空间分配的大小,具体情况如下:
vxfs_max_ra_kbytes
Maximum amount of read-ahead data, in KB, that the kernel may have outstanding for a single VxFS file system
最小值
最大值
缺省值
vxfs_ra_per_disk
Maximum amount of VxFS file system read-ahead per disk, in KB.
最小值
最大值
缺省值
vx_fancyra_enabled
Enable or disable VXFS file system read-ahead
最小值
0
最大值
1
缺省值
vx_ncsize
Memory space reserved for VxFS directory path name cache
最小值
最大值
缺省值
vxfs_max_ra_kbytes参数规定系统对单个vxfs文件系统预读的数据的最大数据块的数目;
vxfs_ra_per_disk参数规定系统对单个磁盘而言,能够预读vxfs文件系统的数据的最大数据块数目;
vx_fancyra_enabled参数规定系统能否预读vxfs文件系统;
vx_ncsize参数:vxfs文件系统使用命名缓冲来存储最近被访问过的相关文件系统的目录路径名称信息,检索命名缓冲使得系统每次无须访问物理硬盘就能够访问目录和它的内容,对于大的数据库应用,该方法大大缩减访问数据的时间;vx_ncsize参数规定有多大的空间可以分配给vxfs文件系统管理器作命名缓冲。
7
3) 同LVM相关的参数。
这些参数控制着逻辑卷管理器(LVM)同内核(kernel)的交互,具体情况如下:
maxvgs
maximum volume groups on system
最小值
1
最大值
256
缺省值
10
maxvgs 这个参数是指在当前的内核配置下可配置的最大卷组数,缺省值是10。如果vgcreate返回无法打开vg组文件的信息,应检查新卷组组文件的副编号。如果卷组副编号是0x0a0000或更大,则maxvgs的缺省值将返回一个错误。
4) 同打开文件或锁定文件相关的参数。
这些参数控制能够并发打开文件或锁定文件的数目,具体情况如下:
maxfiles
soft limit for open files
最小值
30
最大值
60000
缺省值
60
maxfiles_lim
hard limit for open files
最小值
30
最大值
60000
缺省值
1024
nfile
system-wide open-files limit
最小值
14
最大值
Memory limited
缺省值
((16*(nproc+16+maxusers)/10)+32+2*(npty+nstrpty))
nflocks
system-wide file-lock limit
最小值
2
最大值
Memory limited
缺省值
200
ninode
Maximum open inodes in memory
最小值
14
最大值
Memory limited
缺省值
nproc+48+maxusers+(2*npty)
ncsize
Inode space needed for directory name lookup cache
(DNLC)
最小值
最大值
Memory limited
缺省值
no_lvm_disks
no volume groups on system
最小值
0 (check for LVM disks)
最大值
1 (system has no LVM disks)
缺省值
0
maxfiles & maxfiles_lim 这2个变量与进程一次可以打开的最大文件数的软件、硬限制有关,maxfiles的缺省值是60,但由于所有的交互进程都打开stdin、stdout 和stderr,因此通常只能再打开57个文件。非根系统进程(uid > 0)可以将软限制增加到maxfiles_lim硬限制,但只能通 过应用setrlimit(2)系统调用来实现,否则,增加软限制的唯一方法就是改变maxfiles的值。
nfile这个参数是指系统上运行的所有进程打开的文件数。尽管每个登录项相对都比较小,在对这个表进行管理时仍会有一些内核开销。此外,每次打开文件时,在nfile中都会消耗一个登录项,即使该文件已被另外一个进程打开。当nfile登录项用光时,就会出现一个控制台和/或syslog错误信息,明确说明“File table full”。
nflocks 这个参数是指系统内文件锁的数量。与nfile类似,每个锁都会得到一个登录项,内存的花费也非常小,每个nflock登录项使用的内存很少。
ninode 这个臭名昭著的变量过于庞大,可以对处理器产生过重的负担(特别是采用多CPU的机器)。对这个表没有有效的统计,因此实际的消耗很难监视,最好的方法就是不增加它的值,除非收到控制台或syslog信息,明确规定“Inode table is full”,否则启动一段时间
8
后,看起来该表就几乎或完全充满。 与nfile不同,每次打开文件时,ninode中只消耗一个登录项。通常nfile和ninode之间没有直接的关联。此外,过高的值实际可能导致高可用集群出现网络超时的情况,经常是在备份例程启动时。很少有系统真正需要5,000 个以上的登录项。如果这个变量很大,散列一个登录项的初始等待时间就非常大,以便能够首先快速打开文件。 由于没有有效的统计,确定这个表中有哪些内容的唯一方法就是顺序搜索,这对处理时间的消耗非常大。当处理器“走过”这个表时,很少执行其它的活动。建议此表稍微小一些,只有在收到inode表已满的信息时才增加它的值,此时我们建议增加10-20%。
ncsize这个参数是规定目录名查找缓冲(DNLC)需要的空间大小,操作同ninode类似。它是目录名查找缓冲,用于目录名而不是文件,是maxusers影响的参数之一。如果内核方案失败,这个变量一般就采用ninode的值。该值设置得很大时,其结果与ninode相似。检查这个变量的最简单的方法是用glance -t命令,然后检查第二页,它包含ninode和DNLC。sar不能检查这个值。同样,此表中不保留长文件名(大于14个字符) ,每次引用该表时,都必须全部解释。 no_lvm_disks 这个变量通知内核检查 LVM 磁盘。当该变量被设为1时,不进行任何检查。
单个进程能够打开一个或多个文件读写,同时在同一时刻对于一个给定的文件,可能有多个进程并发的读写,为防止给定的文件崩溃,一个进程修改一个给定的文件时必须锁定该文件,直到修改后再释放该锁,打开和锁定文件需要内存和其他资源,为保证整体性能,我们必须平衡多方面的因素,
5) 同SCSI设备相关的参数。
这些参数控制着同SCSI设备的访问,具体情况如下:
scsi_maxphys
Maximum record size for the SCSI I/O subsystem
最小值
1048576
最大值
33554432
缺省值
1048576
scsi_max_qdepth
Maximum number of SCSI commands queued up for SCSI devices
最小值
1
最大值
8
缺省值
255
st_ats_enabled
Flag whether to reserve a tape device on open
最小值
0(disable)
最大值
1(Enable)
缺省值
1
st_fail_overruns
SCSI tape read resulting in data overrun causes failure
最小值
0(disable)
最大值
1(Enable)
缺省值
0
st_large_recs
Enable large record support for SCSI tape
最小值
0(disable)
最大值
1(Enable)
缺省值
1
scsi_maxphys参数规定系统中可以接受的SCSI子设备的最大IO数据大小,依赖于设备的特征和驱动的配置,对于特定的SCSI子设备,允许最大的IO数据大小可能低于或等于该值;
scsi_max_qdepth参数规定系统中SCSI命令队列的最大数目,为防止一些SCSI设备的命令队列溢出,可以用ioctl去设置该值;
st_ats_enabled参数规定对驱动stape,系统是否需要在打开时预留一个磁带设备而关闭时相应的释放该设备,若参数设置为1,驱动stape将不需要在打开时预留一个磁带设备,支持的磁带库设备包括DLT 8000, DLT 7000, STK 9840, HP Ultrium, and STK SD-3 drives,但DDS不包括此功能。该值主要达到多节点对磁带库设备的安全共享。自动的预留和释放可以防止多个节点同时对磁带库设备的访问而导致备份失败。
st_fail_overruns参数规定是否采用可变的块模式向驱动stape发起读请求,如果可变的块的大小小于物理记录块大小,读请求将收到EFBIG错误,如果一个32k的可变的块读请求被发送给一个64k的物理记录块设备,整个记录将不会返回给主机。 9
st_large_recs参数规定对于驱动stape,系统允许的对磁带设备IO的最大记录的大小,大尺寸的记录是能够被发送的,但IO子系统将分开这个请求为多个请求来处理。例如,如果一个512K记录的读请求被发送到磁带设备,该系统scsi_maxphys参数为256K,有2种情况发生,若st_large_recs为任意正值,读命令将发送一个512K记录的读请求,否则,若st_large_recs为0值,读命令将发送2个256K记录的读请求;
6) 同异步写相关的参数。
这些参数控制着文件系统的异步写,具体情况如下:
fs_async
Enable/disable asynchronous disk writes
最小值
0 (Use synchronous disk writes only)
最大值
1 (Allow asynchronous disk writes)
缺省值
0
fs_async这个参数是规定是否允许文件系统多磁盘进行异步写。允许异步文件系统写操作,尽管在部分情况下这可能会提高文件系统的性能,但文件系统的损坏窗口更大,建议采用其它的保证数据完整性的方法。请小心改变此变量,这个变量只与文件系统有关,与原始磁盘设备或原始lvols无关。
1.2.5 进程间通信子系统(Interprocess Communication (IPC) Subsystem)
HP-UX操作系统使用共享内存提供了3种机制来处理进程间的通信:
消息:消息数据是指被存储在共享内存的给定区域的数据让接收程序来检索。
信号:信号数据是指被存储在共享内存的给定位置的一个计数器供协作程序来判断当前的状态。
共享内存:共享内存是指在共享内存的给定区域,可以存储用户定义的数据结构,目的让2个或更多进程来通过一致的数据结构来进行相互协作的访问。
1) 同消息相关的参数。
这些参数控制着对消息的空间分配,具体情况如下:
mesg
Enable/disable IPC messages
最小值
0(disable)
最大值
1(Enable)
缺省值
1
msgmap
message free-space map size
最小值
3
最大值
Memory limited
缺省值
msgtql+2
msgmax
maximum message size
最小值
0
最大值
65535 bytes
缺省值
8192 bytes
msgmnb
maximum bytes in message queue
最小值
0
最大值
65535 bytes
缺省值
16384 bytes
msgmni
maximum message queues on system
最小值
1
最大值
Memory limited
缺省值
50
msgseg
number of segments in message queue
最小值
1
最大值
32767
缺省值
2048
msgssz
message segment size
最小值
1
最大值
Memory limited
缺省值
8 bytes
msgtql
maximum total messages on system 10
最小值
1
最大值
Memory limited
缺省值
40
消息:消息是一个小的数据集,它能够通过消息队列在进程间传递。在一个消息队列里面的消息可以是不同类型,有正确权限的任意进程都可以检索消息,接受进程可以检索第一个消息,给定类型的第一个消息,或给定组类型的第一个消息。
消息队列:消息队列是存储在共享内存的一个数据链,消息队列本身包含了一系列的数据结构,每一个消息有一个数据结构,每个数据结构有地址、类型、消息的大小和下一个消息的指针。
程序可以使用系统调用msgget()去创建一个消息队列,使用系统调用msgsnd()去分配一个消息到消息队列中,,使用系统调用msgrcv()去检索消息,相关管理一个给定的消息队列的操作可以通过系统调用msgctl()实现。
消息和消息队列管理:
消息队列和消息头阵列存在于共享内存区域,这块区域也是可以交换的,另外的管理它们的数据结构存在于内核内存区域,这块区域也是不可以交换的,内核对消息的控制参数主要包括如下:
系统中最大的消息队列数目;
消息队列的最大大小;
消息的最大长度;
系统范围内并发的最大消息数目;
分配一个新消息最大的可用空间的大小;
消息头列表的最大大小;
每个消息队列的最大消息数目;
一个消息队列的最大的消息的组合长度;
IPC消息要求如下的内存空间分配:
? 消息标示符在内核的空间
? 消息队列在共享内存的空间
? 消息头在共享内存的空间
当消息队列被创建时,其大小由msgmnb参数确定,每一个消息由包含一个或多个消息段,段的大小由msgssz参数规定。为防止恶意攻击程序或差的源代码程序消耗过多的消息空间,单个的消息的大小不能超过msgmax参数确定的字节。每个消息在队列中以一个或多个段的方式存储,段的大小由msgssz参数确定的字节。每个消息在队列中段的数目是消息的总字节数同段的大小参数msgssz相除,得到的最小整数。
对于任意一个给定的队列,其所有的消息所消耗的空间值不能超过msgmnb参数确定的字节数,msgmnb参数的值也不能小于msgmax参数确定的值,在任意时刻,任何一个存在的消息队列,其包含的消息的最大个数依赖于单个消息的长度和消息队列大小等其他因素的限制。虽然如此,系统范围内消息的最大个数也被明确规定,在任意时刻,系统内所有消息队列所包含的消息个数不能超过msgtql参数确定的值。
除了上面提到的限制外,系统内核对IPC消息也有明确限制。每个消息队列有一个关联的队列标示符存储在不可交换的内核区域,msgmni参数确定的值在系统范围内在任意时刻限制消息队列的总数。每一个消息有一个关联的消息头存储在可交换的共享内存区域,msgtql参数的值确定系统内所有消息队列所包含的消息最大个数。在消息被发送和接收时,包含这些消息的空间被分配和释放,使得其他消息有空间可用,内核维护着一张标示那些空
11
间可以分配给新消息的资源映射表,这个资源映射表的大小由msgmap参数确定的值限定。
2) 同信号相关的参数。
这些参数控制着对IPC信号量的操作限制,具体情况如下:
sema
Enable/disable semaphores
最小值
0(disable)
最大值
1(Enable)
缺省值
1
semaem
Semaphore value-change limit
最小值
0
最大值
semvmx or 32767, whichever is smaller
缺省值
16384
semmap
Size of free-semaphore resource map
最小值
4
最大值
Memory limited
缺省值
semmni+2
semmni
Maximum semaphores system-wide
最小值
2
最大值
Memory limited
缺省值
64
semmns
Maximum user-accessible semaphores system-wide
最小值
2
最大值
Memory limited
缺省值
128
semmnu
Maximum undos per semaphore
最小值
1
最大值
nproc-4
缺省值
30
semume
Maximum semaphore undos per process
最小值
1
最大值
semmns
缺省值
10
semvmx
Maximum allowed semaphore value
最小值
1
最大值
65535
缺省值
32767
semmsl
Maximum number of individual System V IPC semaphores per semaphore identifier
最小值
1
最大值
2048
缺省值
10240
IPC信号量主要用来在多个进程并发访问共享数据时保持正确的同步,防止冲突,其在软件上的使用越来越复杂。
IPC信号量使用系统调用semget()分配一个包含规定数目的数组,给数组仅仅一个信号量集合通常是保持程序简单的最合理方式,相应的IPC信号量操作是在整个数组层自动执行,在数组里单个的信号量也是通过IPC信号量操作整个数组来实现。semctl()系统调用被用来确定或改变信号量的权限,时间和属组等。
当一个进程在执行一个关键操作或使用共享资源时,该进程会阻塞其它进程,典型地,IPC信号量会增加值,当完成时,IPC信号量会减少值,从而允许被阻塞进程访问共享资源。IPC信号量可以被配置2进制,只有0和1;或者作为通用的IPC信号量,当一个进程增加信号量的值时,一个或多个其它进程减少信号量的值。为防止不可预知的溢出条件发生,内核明确限定一个最大值,当试图超过该值时,操作将失败,这个限制由semvmx参数确定,不能超过最大值65535,当然,IPC信号量也不允许为负值。
当错误发生时,例如进程必须异常终止或进程死,系统必须去改一个或多个IPC信号量到新值或以前的值,这个操作叫回滚信号量。既然这样的条件发生时,任意IPC信号量的值不可预测,系统强制性限制回滚操作能够改变信号量的次数,这个限制值由semaem参数定义。内核参数可以限制能够同时在系统中存在的IPC信号量集的数目和单个IPC信号量的数目,在一个IPC信号量集去规定固定的IPC信号量是不可以的。
semmap参数规定IPC消息空间资源的映射表的大小,该映射表跟踪共享的信号量内存的自由空间,映射表的每个记录是一个空间偏移对,它指向没有使用的信号量空间段的偏移
12
和字节大小,随着信号量的增加,自由空间的碎片会增加,对于每一个碎片,映射表会有一个记录,那有可能会导致映射表满,系统将报“DANGER: mfree map overflow“的警告信息。
semmni参数规定系统范围内IPC信号量集的最大数目,该值在系统启动时被使用。
semmns参数规定系统范围内能够被应用分配的IPC信号量的最大数目,IPC信号量是以集合的方式分配的(semmni参数规定IPC信号量集的最大数目),每一个IPC信号量集有一个标示符,semmsl参数规定每一个IPC信号量集合中IPC信号量的最大数目。semmns参数必须大于semmni参数,否则有些集合的标示符是永远不会使用的。semmnu参数规定系统范围内能够进行回滚操作的进程的最大数目,如果进程执行一个信号量操作,SEM_FLAG标志是打开的。semume参数规定系统范围内单个进程能够进行信号量回滚操作的的最大数目。
3) 同共享内存相关的参数。
这些参数控制着对共享内存的空间分配,具体情况如下:
shmem
Enable/disable shared memory
最小值
0(disable)
最大值
1(Enable)
缺省值
1
shmmax
Maximum shared memory segment size
最小值
2 Kbytes
最大值
1792 Mbytes
缺省值
0x04000000 (64 Mbytes
shmmni
Maximum segments on system
最小值
3
最大值
memory limited
缺省值
200 identifiers
shmseg
Maximum segments per process
最小值
1
最大值
shmmni
缺省值
120
core_addshmem_read
Flag to include readable shared memory in a process core dump
最小值
0(disable)
最大值
1(Enable)
缺省值
1
core_addshmem_write
Flag to include read/write shared memory in a process core dump
最小值
0(disable)
最大值
1(Enable)
缺省值
1
共享内存是在多个协作的进程间被预留用于保存数据结构和数据的一块区域,共享一块通用的内存空间消除了由于其它程序要使用该数据而必须复制数据到其它位置的需要,减少了处理器时间和内存的消耗。
共享内存管理在许多方面类似于消息和信号量。进程通过系统调用shmget()申请共享内存段,通过传递参数规定共享内存段的大小,一个或多个进程通过使用系统调用shmat()去关联被申请共享内存段,或使用系统调用shmdt()去取消被关联的共享内存段。系统调用shmctl()被用来获得共享内存段的信息或删除不再需要的共享内存段。
IPC信号量能够被用来使用防止共享内存段读写冲突,非常普通的使用方法是一个进程写数据到给定的共享内存段,另外一个进程从这个共享内存段读数据,在这种情况下,当相应的写操作被执行时,写进程分配一个新的共享内存段,协作进程关联该共享内存段。
共享内存是在可交换的共享内存区域分配,共享内存的数据结构保存在系统内核中。
shmmax参数规定单个共享内存段的最大大小,该参数是动态的。shmmni参数规定系统范围内共享内存段的最大数目,shmseg参数规定系统范围内单个进程能够访问的共享内存段的最大数目,core_addshmem_read参数规定当系统崩溃时,是否将共享内存段中只读的共享内存部分写入crash文件,供客户诊断问题时使用,core_addshmem_write参数规定当系统崩溃时,是否将共享内存段中可读写的共享内存部分写入crash文件,供客户诊断问题时使用。 13
1.2.6 内核转储子系统(Kernel Panic Dump Subsystem)
1) 同内核转储相关的参数。
这些参数影响着内核转储操作,确保系统崩溃时,系统内存能够转储到硬盘,具体情况如下:
alwaysdump
Bit-mask of kernel memory pages included in dumps
最小值
0
最大值
none
缺省值
0
dontdump
Bit-mask of kernel memory pages excluded from dumps
最小值
0
最大值
none
缺省值
0
alwaysdump参数和dontdump参数允许的值从0到255,它的值是如下几个类型值的和。
UNUSED
1
没有使用的页面
USERPG
2
用户的页面
BCACHE
4
高速缓冲
KCODE
8
内核文本页面
USTACK
16
进程堆栈
FSDATA
32
文件系统元数据
KDDATA
64
内核动态数据
KSDATA
128
内核静态数据
诊断内核问题,参数值KSDATA + KDDATA + FSDATA + USTACK=240是必须的,需要诊断文件系统问题,则FSDATA是必须的,USTACK主要诊断应用的问题,其它一般不会使用。对于大的主机,对于内核转储操作是有时间限制的,主要同主机性能和内存大小有关,通过alwaysdump参数和dontdump参数来控制需要转储的内容,加快转储时间。命令crashconf及其相关的配置文件/etc/rc.config.d/crashconf控制着那些内容需要转储,在一些罕见的场合,当系统还在启动时就崩溃了,这时alwaysdump参数和dontdump参数就派上用场了。
1.2.7 内存分页子系统(Memory Paging Subsystem)
1) 同内存分页相关的参数。
这些参数规定系统对虚拟内存的操作规则和限制,具体情况如下:
allocate_fs_swapmap
fixed or dynamic swap-data-structure allocation
最小值
0 (allocate swap data structures as needed)
最大值
1 (preallocate necessary kernel data structures)
缺省值
0
maxswapchunks
maximum swap space available to client
最小值
1
最大值
16384
缺省值
256
nswapdev
number of available swap devices
最小值
1
最大值
25
缺省值
10
nswapfs
number of file systems available for swap
最小值
1
最大值
25
缺省值
10
14
remote_nfs_swap
enable/disable swap to remote NFS
最小值
0
最大值
1
缺省值
0
swapmem_on
enable/disable pseudo-swap reservation
最小值
0
最大值
1
缺省值
1
swchunk
client swap-chunk size
最小值
2048
最大值
16384
缺省值
2048
vps_ceiling
Maximum system-selected page size in Kbytes
最小值
4
最大值
65536
缺省值
16
vps_chatr_ceiling
Maximum chatr-selected page size in Kbytes
最小值
4 Kbytes
最大值
65536 Kbytes
缺省值
65536 Kbytes
vps_pagesize
Default user page size in Kbytes
最小值
4
最大值
65536
缺省值
4
系统范围内最大的交换空间由参数maxswapchunks和swchunk联合确定,而nswapdev参数确定最大的交换设备数,如果采用文件系统作交换区,则参数allocate_fs_swapmap 和 nswapfs参数联合确定最大的文件系统数,而参数swapmem_on则确定是否使用伪交换。而3个参数vps_ceiling, vps_chatr_ceiling和vps_pagesize则能够更改虚拟内存的页面大小,确保特定的应用更有效。
参数maxswapchunks规定系统范围内最大的交换块的数目,参数swchunk则定义连续的设备或文件系统的交换块的大小。如果nswapdev参数确定的值大于实际的交换设备数,则内存空间(每个设备约50字节)因为给没有连入的交换设备预留数据结构而浪费一些内存;相反,则有些设备是不能接入系统作交换设备。
文件系统作交换设备是必定慢于裸设备的,因为文件系统需要在读写时要打开文件而裸设备是直接操作硬盘设备,nswapfs参数同nswapdev参数对应,确定能够用于交换的文件系统的数目,参数allocate_fs_swapmap 规定在分配交换空间时,是调用swapon()系统调用还是调用malloc()系统调用,当调用malloc()系统调用时,空间被预先分配确保在一些特点场合文件系统满的错误不会发生;当调用swapon()系统调用时,空间被预先分配是重要的,但它会当一个进程预留了空间后,它会阻止其它进程使用相关的任何资源。
内存分配通常情况是基于可用的虚拟内存的可用性,总的可用内存同总的交换区的大小相同,然而,在安装了大量内存的系统上,这种情况可能是无效,由于内存足够大,系统没有足够的磁盘资源来配置交换区,这时系统不能够使用所有的物理内存,可以开启伪交换功能来解决这个问题。 swapmem_on参数允许伪交换功能,这个参数为1时允许使用内存作为进程的交换区,通常在swapinfo命令下可以观察到,显示为内存,尽管伪交换的缺省优先级是12,但内存开始时用于无效的进程,主要结果是I/O减少,因为无效的进程不必迁移到磁盘交换区域或文件系统上。如果内存压力增加,需要更多的内存页,那么无效的进程就会被移到交换区域。用swapinfo -atm观察正在使用的交换区域的设备PCT USED栏相应增加,表示内存不足。
参数vps_ceiling, vps_chatr_ceiling和vps_pagesize规定系统范围内
为处理虚拟内存,处理器都有TLB(Translation Look-aside Buffer)即转换表高速缓冲的特征,也就是最近被访问过的物理到虚拟地址的转换表被高速缓冲保存,防备这个转换不久还要发生,这是基于程序对地址引用会符合一定的时间的和空间的位置的基本原理,以前,转换表高速缓冲完全由硬件管理达到高速的目的,然而,那牺牲了软件的灵活性,这几年,软件的灵活性超过了高速的目的,尤其是,一些大小固定的物理帧被编为逻辑上的一组后,变成了大页面或超页面,可以通过软件用单个基指针实现,大大缩减了由于页面不在内存而需要去
15
读的时间。例如,一个应用使用数组,每个单元要1K的内存,实际使用了4k的物理帧,在引用数组时经常由于页面不在内存而需要去读硬盘,在读第五个单元时,还要装入转换表,如果应用不使用chatr命令去规定程序的文本段和数据段的大小,内核将自动使用系统规定的页面大小,被选择的大小会同参数vps_ceiling规定的最大页面大小比较,如果被选择的值大,参数vps_ceiling规定的值会被使用,然后,该值会和参数vps_pagesize规定的最小页面大小比较,较大者被使用。
1.2.8. 进程管理子系统(Process Management Subsystem)
进程管理参数在确保系统资源有效的情况下管理系统范围内的进程数、每个用户的进程数、控制CPU的时间分配、控制虚拟内存的分配,具体情况如下:
1) 同内存分配相关的参数。
这些参数控制虚拟内存的分配,具体情况如下:
maxdsiz
maximum process data segment size (32-bit)
最小值
0x400000 (4 Mbytes)
最大值
0x7B03A000 (approx 2 Gbytes)
缺省值
0x4000000 (64 Mbytes)
maxdsiz_64bit
maximum process data segment size (64-bit)
最小值
0x400000 (4 Mbytes)
最大值
4396972769279
缺省值
0x4000000 (64 Mbytes)
maxssiz
maximum process storage segment size (32-bit)
最小值
0x4000 (16 Kbytes)
最大值
0x17F00000 (approx 200 Mbytes
缺省值
0x800000 (8 Mbytes)
maxssiz_64bit
maximum process storage segment size (64-bit)
最小值
0x4000 (16 Kbytes)
最大值
1073741824
缺省值
0x800000 (8 Mbytes)
maxtsiz
maximum process text segment size (32-bit)
最小值
0x40000 (4 Mbytes)
最大值
0x7B033000 (approx 2 Gbytes)
缺省值
0x4000000 (64 Mbytes)
maxtsiz_64bit
maximum process text segment size (64-bit)
最小值
0x40000 (4 Mbytes)
最大值
4398046511103 (approx 4 Tbytes)
缺省值
0x4000000 (64 Mbytes)
进程的虚拟内存被分成文本空间、数据空间、动态存储空间和其它的预留空间。文本空间存储程序的代码、数据空间保存一些变量值、动态存储空间保存一些堆栈,寄存器数据。
16
大部分的单个进程是不会要求大于2GB的虚拟内存。6个参数maxtsiz, maxtsiz_64bit、maxdsiz、 maxdsiz_64bit、 maxssiz和maxssiz_64bit对进程的内存空间分配设置限制。
maxdsiz、maxssiz和maxtsiz这3个参数是所有HP-UX 用户32位程序进程的三个基本的组成部分(数据段、堆栈和文本段),maxdsiz_64bit、maxssiz_64bit和maxtsiz_64bit这3个参数是所有HP-UX 用户64位程序进程的三个基本的组成部分(数据段、堆栈和文本段)。64位程序进程的数据段和文本段可以达到4TB,堆栈可以达到2GB;32位PA-RISC硬件支持单个的进程最大2GB的虚拟内存,
设置限制的目的是防止其它用户滥用内存资源,阻止对内存资源的独占,并不是阻止单个用户访问特定的内存空间,这些参数设置的值的总体值可能超过最大交换空间,这种设置是适当的,因为大多数用户程序的需求是远远少于这些参数设置限制值,这些参数设置限制值的目的是防止用户的误操作而不是用它来使得各个用户平均使用空间来提高整体性能。
2) 同进程相关的参数。
这些参数控制进程的情况,具体情况如下:
executable_stack
Allows or denies program execution on the stack
最小值
0
最大值
2
缺省值
0
nproc
maximum number of processes system-wide
最小值
10
最大值
Memory limited
缺省值
20+(8 * maxusers)
maxuprc
maximum number of processes per user
最小值
3
最大值
nproc-4
缺省值
50
maxusers
Maximum expected simultaneous system users
最小值
0
最大值
memory limited
缺省值
32
nproc参数是maxusers/maxuprc的杂乱设置所影响的另外一个变量,它与系统内的进程数有关,经常在运行ps -ef时,或者使用Glance/GPM和类似的命令时引用。该值通常应当比为非预期的进程增加预留的最大进程数大10-20%。参数nproc和maxuprc专门管理系统的进程,当最大数目用户登入系统后,nproc的值必须足够每个用户有足够的进程;
maxuprc此值确定一个用户标识能够产生的进程数,这对于每个UID都是一个限制因素,而不管登录的数量有多少。较大的maxuprc值可以产生一个环境,在这个环境中,由于杂乱进程的大量产生,失控的用户进程消耗大量的处理器时间。它还可能影响其它的内心变量,导致机器的吞吐率降低。建议增加此变量的值时一定要小心。 maxusers参数被用来确定参数nclist, nproc, nfile and ninode的值,它主要影响系统资源在内核的分配,并不实际控制能够登陆到系统的用户数,它提供了一个粗调值。
executable_stack参数被用来控制程序的堆栈能否执行,该参数的主要目的是防止系统遭到堆栈缓冲溢出的攻击。Hpux的绝大部分程序是不需要在堆栈执行的,一些程序象仿真器、解释器以及一些老版本的java程序需要在堆栈执行,这些程序典型的会自己修改代码,使用这个参数和chatr命令的+es选项,可以使用该功能而不会导致系统受到攻击。
3) 同时分相关的参数。
这些参数进程使用CPU的情况,具体情况如下:
timeslice
time slice allocation between competing processes
最小值
-1
最大值
2147483647 (approximately 8 months)
缺省值
10 (ten 10-msec ticks) 17
系统内核会周期性的检查其他进程请求使用CPU的时间情况,对于较高优先级进程的CPU请求每10毫秒进行一次,当2个或多个在同一个优先级的进程竞争时,CPU的时间被分片到段,段就是由参数timeslice确定,进程以循环的方式在CPU上轮循,防止单个进程垄断CPU时间,除非该进程阻塞或终止。
4) 同内核线程相关的参数。
这些参数控制内核线程的情况,具体情况如下:
max_thread_proc
maximum number of threads that one process can create
最小值
64
最大值
30000
缺省值
64
nkthread
maximum number of kernel threads allowed on the system at same time
最小值
50
最大值
250000
缺省值
(nproc*2)+16
在多CPU的系统上,进程的一部分可以分成线程并发运行在不同的CPU上,参数max_thread_proc确定单个进程能够创建的最大线程数,参数nkthread确定系统范围内能够创建的最大线程数。当系统报kthread: table is full的信息时(可以用dmesg命令或查看日志syslog.log),表明参数nkthread确定的值太小,可以通过系统调用pstat_dynamic的psd_numkthreadsallocd来查看系统的线程数。
1.2.9 旋转锁子系统(Spinlock Pool Subsystem)
旋转锁子系统的参数主要针对多处理器系统的旋转锁池的控制,每个参数规定特定的旋转锁的数目,这些参数主要适用于高级用户,他们对多处理器系统的旋转锁的工作机制很了解,不要轻易修改这些参数的值,除非你很了解这些参数,否则会导致严重的性能问题,具体情况如下:
1) 同旋转锁相关的参数。
bufcache_hash_locks
Buffer-cache spinlock pool
最小值
64
最大值
4096
缺省值
128
chanq_hash_locks
Channel queue spinlock pool
最小值
64
最大值
4096
缺省值
256
dnlc_hash_locks
Number of locks for directory cache synchronization
最小值
64
最大值
4096
缺省值
128
ftable_hash_locks
File table spinlock pool
最小值
64
最大值
4096
缺省值
64
hdlpreg_hash_locks
Set the size of the pregion spinlock pool
最小值
64
最大值
4096
缺省值
128
io_ports_hash_locks
I/O port spinlock pool
最小值
64
最大值
4096
缺省值
64
pfdat_hash_locks
Pfdat spinlock pool
最小值
64
最大值
4096
缺省值
128
region_hash_locks
Process-region spinlock pool
最小值
64
最大值
4096
缺省值
128
sysv_hash_locks
System V interprocess communication spinlock pool
最小值
64
最大值
4096
缺省值
128
18
vas_hash_locks
Sets the size of the vas spinlock pool
最小值
64
最大值
4096
缺省值
128
vnode_cd_hash_locks
Vnode clean/dirty spinlock pool
最小值
64
最大值
4096
缺省值
128
vnode_hash_locks
Vnode spinlock pool
最小值
64
最大值
4096
缺省值
128
简单的说旋转锁是多处理器系统中控制处理器交互一种机制,当一个任务需要多个CPU交互执行时,旋转锁可以让延迟一个CPU的处理,让另外一个CPU去完成任务使得结果可以传递给等待的CPU,旋转锁控制对文件系统的i节点,I/O口,缓冲等其他资源的使用,早期的hpux对所有的资源分配固定数量的旋转锁,从11.0开始,可以对不同类型的资源分配合适数量的旋转锁。通常,如果系统有相关旋转锁的瓶颈问题,首先需要定位是那个资源的旋转锁池有瓶颈,然后增加相应的值。
1.2.10 流子系统(Streams Subsystem)
流是一种特殊的IO管道,连续的数据可以通过它在操作系统和内核的相关裸设备、终端等的驱动之间传递。一个或多个流模块可以插入到流中去执行特别的功能,象数据加密、数据压缩、字符或消息转换、增加协议数据到消息中等等,流中的每一个模块执行一个特定的任务,多个模块可以被推入到给定的流中,同流相关的参数被用来管理同裸设备相关的资源分配和消耗,防止不适当的流行为发生,要说明的是流IO管道是不同于常规的hpux或unix管道。
1) 同流相关的参数。
NSTREVENT
Maximum number of outstanding streams bufcalls that are allowed to exist at any given time on the system
最小值
0
最大值
2147483647
缺省值
50
NSTRPUSH
Maximum number of streams modules that are allowed to
exist in any single stream at any given time on the
system
最小值
none
最大值
none
缺省值
16
NSTRSCHED
Maximum number of streams scheduler daemons that are
allowed to run at any given time on the system
最小值
0
最大值
32
缺省值
0
STRCTLSZ
Maximum number of control bytes allowed in the control
portion of any streams message on the system
最小值
0
最大值
Memory limited
缺省值
1024 bytes
STRMSGSZ
Maximum number of bytes that can be placed in the dataportion of any streams message on the system.
最小值
0
最大值
Memory limited
缺省值
0
nstrpty
System-wide maximum number of streams-based PTYs that
are allowed on the system.
最小值
0
最大值
Memory limited
缺省值
0
streampipes
Force All Pipes to be Streams-Based
最小值
0 (create
最大值
1 (create
缺省值
0
19
HP-UX file system pipes)
streams-based pipes)
NSTREVENT参数限制系统范围内系统调用bufcall在任意时间最大的调用数目,这个参数的目的是保护系统防止系统调用bufcall过多导致资源超负荷。这个值应该等于或大于系统在正常运行时所有的流可能发起的最大系统调用bufcall数。
NSTRPUSH参数规定能够加入到一个流中的最大流模块的数目,这个参数防止能够自动加入流模块到流的进程由于该进程失控而导致系统异常,并不是防止对流模块的滥用,许多系统在一个流中加入的流模块的数目不会超过3或4个,该参数缺省值是16,可以满足几乎所有的极端要求。
NSTRSCHED参数规定在多处理器系统上多处理器流调度进程(smpsched)的数目。单处理器系统上多处理器流调度进程是不被使用的,但在多处理器系统上和单处理器系统上一直有一个单处理器流调度进程(supsched)在运行,如果这个参数值为0,系统将基于系统上的处理器数目来决定允许多少个多处理器流调度进程,如果这个参数值为非0正值,系统上那个创建的多处理器流调度进程(smpsched)的数目就是该值。
STRCTLSZ参数规定系统范围内系统调用putmsg在流的控制部分能够插入的最大的控制数据的字节数目,如果这个参数值为0,则没有任何限制。
STRMSGSZ参数规定系统范围内系统调用putmsg或write在流的数据部分能够插入的最大的数据的字节数目,如果这个参数值为0,则没有任何限制。
nstrpty参数限制系统范围内系统基于流的伪终端的最大的数目,当发送数据到伪终端时,对每一个打开的窗口,一个伪终端是必须存在的。
streampipes参数决定由系统调用pipe创建的管道的类型,如果这个参数值为0,则所有由系统调用pipe创建的管道的类型时普通的hpux文件系统管道,如果这个参数值为非0,则所有由系统调用pipe创建的管道的类型为流类型管道,流模块能够插入到流中,同时pipemod模块和pipedev驱动必须加入内核。
1.2.11 其他参数(Miscellaneous Parameters)
以下这些参数同hpux各个子系统有关,但互不关联。
1) 同排队信号相关的参数。
ksi_alloc_max
System-wide limit of queued signals that can be allocated
最小值
32
最大值
memory limited
缺省值
nproc * 8
ksi_send_max
Maximum number of queued signals that a process cansend and have pending at one or more receivers
最小值
32
最大值
memory limited
缺省值
32
ksi_alloc_max参数限制系统范围内系统能够分配和在用的排队信号最大的数目,ksi是"kernel signal information"的简写,标示是相关排队信号信息的入口,通常系统调用sigqueue、异步IO、定时器等使用排队信号,用户产生的信号(通过kill命令)是不被排队的,一般单个进程大量使用线程,且线程大量使用排队信号时,可以考虑增加该值。 20
ksi_send_max参数规定单个进程能够传送或挂起的排队信号最大的数目,这个限制是基于发送进程。
2) 同终端相关的参数。
nclist
Maximum number of cblocks available for tty/pty I/O
最小值
132
最大值
Memory limited
缺省值
(100 + 16 * maxusers)
npty
Maximum ptys allowed system-wide
最小值
1
最大值
Memory limited
缺省值
60
nstrtel
Number of Telnet Session Device Files
最小值
60
最大值
Memory limited
缺省值
60
nclist参数规定系统范围内系统能够分配字符块(cblocks)的最大的数目,字符块(cblocks)的解释:当终端设备传输数据时,数据以字符块(cblocks)的方式存储的。Nclist的缺省值是(100 + 16 * maxusers),它是基于系统使用100个字符块用于处理到终端的数据传输,加上每个会话平均使用16个字符块的规则算的。除了注册类型的会话外,串行连接也使用字符块,象SLIP连接,UUCP传输,终端仿真等等,如果字符块池耗尽,通过终端设备传输数据时,数据可能丢失因为没有字符块可用,如果这种情况发生,系统会报告WARNING: cblock exhaustion has occurred n times (see termio(7))错误。
npty参数规定系统能够支持的最大的伪终端驱动的数目,伪终端驱动支持伪终端设备对,伪终端是一个字符终端设备对,包括一个主设备和一个从设备,它允许一个服务器进程和一个应用进程通信。
nstrtel参数规定系统能够支持的最大的telnet会话的设备文件的数目。telnet使用2种基于流的伪终端驱动(telm,tels),nstrtel参数确定在系统引导时能够创建的内核数据结构,使得内核能够满足服务器上即将到来的telnet会话。
3) 同内核超时相关的参数。
ncallout
Maximum number of timeouts allowed
最小值
6
最大值
memory limited
缺省值
16+nproc+USING_ARRAY_SIZE+SERVING_ARRAY_SIZE
ncallout参数规定在系统初始化时分配的callout表的大小,当或者是内核内部使用或者是用户发起的超时服务被发起时,callout表的一个条目被使用,当callout表用满时,操作系统将崩溃。在hpux 11.0上对callout表没有动态扩展的机制,当callout表用满时,操作系统将崩溃;在hpux 11.11上对callout表有局部的动态扩展的机制,当callout表用满时,操作系统将试图动态扩展callout表,若系统内存紧张,操作系统无法动态扩展callout表,操作系统将崩溃。
4) 同系统内存预留相关的参数。
unlockable_mem
Memory size reserved for system use
最小值
0
最大值
memory limited
缺省值
0
eqmemsize
Size of equivalently mapped memory pool
最小值
0
最大值
memory limited
缺省值
15
max_mem_window
Enables/configures number of Memory Windows insystem
最小值
0
最大值
memory limited
缺省值
0 21
unlockable_mem参数规定不能够被用户进程锁定的内存大小。内存锁定允许特权用户确定需要保留在内存中的页面,并且不被交换进程影响。这个特征允许你确保内存的可访问时间不会被内存换页或交换进程影响。锁定给特权用户在内存不足的系统上提供了一个工具,代替让这些特权用户进程象其它进程样交换空间,它可以锁定它们的地址空间,一旦特权进程锁定它们的内存页面,它们就没有内存瓶颈,而非特权用户则不得不同其它进程竞争内存空间。
eqmemsize参数规定预留有相同的物理和虚拟地址的页面的基准数目。大多数内存采用传统的交换虚拟地址的模式,当系统启动时,物理内存一般是充足的,为特定的应用,我们可以预留有相同的物理和虚拟地址的页面。实际预留的大小是eqmemsize参数的值同系统启动时动态获得的值相乘,系统启动时动态获得的值一般是每256MB增加一个页面。
max_mem_window参数规定IO映射表、共享库等全局象限范围的使用。32位PA-RISC架构的进程通常对IO映射表、共享库等只是共享象限3和4,如果用户希望对特定的一组进程只是共享象限3,max_mem_window参数可以实现此功能。如果max_mem_window参数为0,32位程序一直使用全局象限范围3和4的共享内存,如果max_mem_window参数大于0,32位程序一直使用象限范围3的共享内存,除非象限范围3的共享内存使用完了。
5) 同磁盘IO等相关的参数。
default_disk_ir
Immediate reporting for disk I/O
最小值
0
最大值
1
缺省值
0
ncdnode
Maximum number of open CD-ROM FS nodes
最小值
14
最大值
memory limited
缺省值
150
o_sync_is_o_dsync
Enable or disable translation of O_SYNC to O_DSYNC
最小值
0
最大值
1
缺省值
0
rtsched_numpr
Number of real-time scheduling priority levels
最小值
32
最大值
512
缺省值
32
scroll_lines
ITE scroll buffer size
最小值
60
最大值
999
缺省值
100
sendfile_max
Special parameter for web-servers
最小值
0
最大值
0x40000
缺省值
0
default_disk_ir参数规定SCSI子系统的立即报告行为,也叫写缓冲使能(Write Cache Enable),当这个功能打开时,系统调用write()在写完缓冲就返回,也包括裸设备写,而不用等待数据写到物理磁盘本身,这可以大大提高写的性能。然而,在数据从缓冲写到磁盘前,如果设备掉电或重置会导致缓冲中的数据丢失,建议不要使用该功能。
ncdnode参数规定内存中任意时刻最大的CD-ROM文件系统的节点数。类似于ninode参数,它只适合于CD-ROM文件系统,CD-ROM文件系统的每个节点数耗用288字节数,例如,如果ncdnode参数为10000,则3MB的内存是需要的。
o_sync_is_o_dsync参数规定系统是否允许系统调用open()和fcntl()将标志O_SYNC转换为O_DSYNC。标志O_SYNC和O_DSYNC主要被系统调用open()和fcntl()来确保数据正确的写到磁盘,如果标志O_SYNC和O_DSYNC没有设置,只要磁盘访问请求被发起,函数就返回并认为访问数据到磁盘成功。如果标志O_SYNC和O_DSYNC有设置,只有磁盘访问请求被完成,函数才返回并认为访问数据到磁盘成功。2个标志O_SYNC和O_DSYNC在上述方面是等同的,只是在一个方面有差异,如果标志O_SYNC有设置,只有磁盘访问请求被完成,并且所有的文件属性(访问时间、修改时间、状态变化时间)被写操作修改并写到物理磁盘,函数才返回并认为访问数据到磁盘成功。 22
如果设置o_sync_is_o_dsync参数为1,则在文件属性被修改前,但文件的数据写到磁盘之后,函数才返回并认为访问磁盘成功,如果设备掉电或重置会导致错误发生,但只是文件属性的错误,不会导致文件的数据丢失,该功能对于提高系统的性能是有益的,但有文件的属性不一致的危险性。如果标志O_SYNC和O_DSYNC没有使用,则o_sync_is_o_dsync参数不会影响系统IO操作。
rtsched_numpr参数规定支持POSIX 1.b实时应用的优先级值的数目,较大的优先级值的数目给应用提供了更大的灵活性,但较大的优先级值的数目会增加操作系统管理队列的负担。
scroll_lines参数规定hpux图形终端滚动缓冲区的行的数目。
sendfile_max参数规定系统调用sendfile()能够使用的缓冲页面的数目。
1.3 调整HP-UX内核参数值和驱动方法
所有的HP-UX内核参数必须使用整数值或由多个正确的整数值表达式定义,所有的HP-UX内核参数可以使用整数值定义,一部分HP-UX内核参数可以使用整数值表达式定义。
a) 用sam修改HP-UX内核参数和驱动:
在sam中,从Kernel Configuration-〉Configurable Parameters窗口的Actions下拉菜单中选中Modify Configurable Parameter,进行相应的修改。这个过程比较简单,这里不多说。
b) 用命令行修改HP-UX内核参数和驱动:
对HP-UX 11i v1,采用如下命令行修改HP-UX内核参数。
1,进入到/stand/build目录
#cd /stand/build
2,用活动的内核产生一个system文件
HP-UX从HP-UX 11i版本引入了可动态调整的HP-UX内核参数,缺省情况,当修改可动态调整的HP-UX内核参数时,命令kmtune会更新/stand/system文件来反映这个变化,为保证可动态调整的HP-UX内核参数的一致性,创建HP-UX内核参数模板时要求从/stand/system复制到/stand/build/system,然后执行以下命令:
#/usr/lbin/sysadm/system_prep -s /stand/build/system
可以使用如下命令察看正在运行的内核的路径。
对于hpux11.11,使用
#kmpath -k
对于hpux11.23,使用
#kcpath -b
3,编辑用活动的内核产生的system文件或者用命令kmtune直接修改对应的值
#vi /stand/build/system
如下是一个system文件的内容,可以直接修改对应的值。
* Drivers and Subsystems
DlkmDrv
GSCtoPCI
PCItoPCI
Tpi2Dlpi
arp
23
asio0
asp
asyncdsk
asyncdsk_included
atm2gsc
atm2pci
atmdiag2
atmgsc
atmpci
autofsc
bs_osm
btlan
btlan1
c720
caam
cachefsc
cb
cdfs
cifs
cip
ciss
clone
core
cxperf
dev_config
dev_olar
devkrs
diag0
diag1
diag2
dlkm
dlpi
dmem
dmp
eavesdrop
echo
el
fcT1
fcT1_cntl
fcT1_fcp
fcd
fcms
fcp
fcp_cdio 24
fcparray
fcpdev
fcpmux
fddi4
ffs
gelan
hpstreams
i2o_cdio
iether
igelan
inet
iomem
iop_drv
ip
ipmi
ipmi_psm
kepd
klog
krs
lasi
lba
ldterm
lv
lvm
maclan
mpt
netdiag1
netqa
nfs_client
nfs_core
nfs_server
nfsm
nms
nuls
olar_psm
olar_psm_if
pa_generic_psm
pa_psm
pat_psm
pci
pckt
pipedev
pipemod
prm
25
ptem
ptm
pts
rawip
rpcmod
sad
sapic
sba
sc
sctl
sdisk
sigatm
stcpmap
strlog
strpty_included
strtelnet_included
tcp
td
telm
tels
timod
tirdwr
tlclts
tlcots
tlcotsod
token_arp
tun
udp
ufs
uipc
vol
vols
vxdmp
vxfs
vxportal
vxvm
wsio
* Kernel Device info
dump lvol
26
* Tunable parameters
STRCTLSZ 0
STRMSGSZ 65535
dbc_max_pct 20
dnlc_hash_locks 512
max_thread_proc 3000
maxdsiz 0X80000000
maxdsiz_64bit 0X80000000
maxssiz 0X800000
maxssiz_64bit 0X800000
maxswapchunks 517
maxtsiz 0X4000000
maxtsiz_64bit 0X40000000
nkthread 6000
nstrpty 60
maxusers 512
nproc 2048
nfile 30000
maxfiles 2048
maxfiles_lim 2048
ncallout 6000
semmns 2048
semmni 1024
如果不用vi来编辑,可以用命令kmtune来修改,例如设置nfile的值为3000。
对于hpux11.11,使用
#kmtune -s nfile=3000 -S /stand/build/system
对于hpux11.23,使用
#kctune maxuprc=512
? 设置驱动程序configured和loadable,使用如下命令:
对于hpux11.11,使用kmsystem,这里的module指的是module的名称,例如asyncdsk
#kmsystem -c y -l y module
对于hpux11.23使用kcmodule,这里的module指的是module的名称,例如asyncdsk
#kcmodule module=loaded
? 设置驱动程序configured和not loadable,使用如下命令:
对于hpux11.11,使用kmsystem,这里的module指的是module的名称,例如asyncdsk
#kmsystem -c y -l n module
对于hpux11.23使用kcmodule,这里的module指的是module的名称,例如asyncdsk
#kcmodule module= static
? 设置驱动程序unconfigured,使用如下命令:
对于hpux11.11,使用kmsystem,这里的module指的是module的名称,例如asyncdsk
#kmsystem -c n module 27
对于hpux11.23使用kcmodule,这里的module指的是module的名称,例如asyncdsk
#kcmodule module= unused
对于驱动程序,可以使用kmsystem命令察看所有Module的名称和配置情况。
$ ./kmsystem
Module Configured Loadable
=================================================
CentIf N -
CharDrv N -
DlkmDrv Y -
GSCtoPCI Y -
PCItoPCI Y -
SCentIf N -
Tpi2Dlpi Y -
ac N -
arp Y -
asio0 Y -
asp Y -
astropmon N -
asyncdsk Y -
asyncdsk_included Y -
atm2gsc Y -
atm2pci Y -
atmdiag N -
atmdiag2 Y -
atmgsc Y -
atmpci Y -
audio N -
autofsc Y -
autox0 N -
beep N -
bs_osm Y -
btlan Y -
btlan1 Y -
btt N -
c720 Y -
c8xx N -
caam Y -
cachefsc Y -
cb Y -
ccio N -
cdfs Y -
cifs Y -
cip Y - 28
ciss Y -
clone Y -
cn N -
coke N -
consp1 N -
core Y -
cpd N -
cxperf Y -
dev_config Y -
dev_olar Y -
devkrs Y -
dewpmon N -
diag0 Y -
diag1 Y -
diag2 Y -
disc3 N -
dlkm Y -
dlpi Y -
dm_sample N -
dm_sample_fsid N -
dmapi N -
dmem Y -
dmp Y -
eavesdrop Y -
echo Y -
el Y -
epic N -
esctl N -
esdisk N -
fcT1 Y -
fcT1_cntl Y -
fcT1_fcp Y -
fcd Y -
fcms Y -
fcp Y -
fcp_cdio Y -
fcparray Y -
fcpdev Y -
fcpmux Y -
fdc N -
fddi4 Y -
ffs Y -
foreign N -
framebuf N - 29
func0 N -
gelan Y -
graph3 N -
gvid N -
gvid_core N -
hcd N -
hd_fabric N -
hid N -
hpstreams Y -
hpstreamsqa N -
hsx Y N
hub N -
i2o_cdio Y -
ica N -
idds N -
iether Y -
igelan Y -
ikepmon N -
inet Y -
install N -
iomap N -
iomem Y -
iop_drv Y -
ip Y -
ipmi Y -
ipmi_psm Y -
ite N -
java N -
jolt N -
kepd Y -
kload N -
klog Y -
krio N -
krm Y Y
krs Y -
ktest N -
ktestio N -
lan2 N -
lan3 N -
lanmux0 N -
lantty0 N -
lasi Y -
lba Y -
ldterm Y - 30
lmodb N -
lmodc N -
lmode N -
lmodr N -
lmodt N -
lo N -
lofs N -
loop N -
lpr2 N -
lpr3 N -
lv Y -
lvm Y -
maclan Y -
mm N -
mpt Y -
mux2 N -
mux4 N -
netdiag1 Y -
netqa Y -
nfs N -
nfs_client Y -
nfs_core Y -
nfs_server Y -
nfsm Y -
nms Y -
nsdiag0 N -
nuls Y -
olar_psm Y -
olar_psm_if Y -
onyx N -
pa_generic_psm Y -
pa_psm Y -
pat_psm Y -
pci Y -
pckt Y -
pepsi N -
pflop N -
pipedev Y -
pipemod Y -
pmon N -
prm Y -
ps2 N -
ptem Y -
ptm Y - 31
pts Y -
pty0 N -
pty1 N -
ram N -
rawip Y -
rpcmod Y -
sad Y -
sapic Y -
sba Y -
sc Y -
schgr N -
scsi1 N -
scsi3 N -
sctl Y -
sdisk Y -
sdm N -
sflop N -
side N -
side_multi N -
sigatm Y -
simdisk N -
sio N -
siofdc N -
sioflop N -
smcpmon N -
sp N -
sppcore N -
sppnuma N -
spt N -
spt0 N -
ssrfc N -
stape N -
stcpmap Y -
strlog Y -
strpty_included Y -
strtelnet_included Y -
superio N -
swsp Y N
swspBus Y N
sy N -
tape2 N -
tape2_included N -
target N -
tcp Y - 32
td Y -
telm Y -
tels Y -
test_weld N -
tidg N -
timod Y -
tirdwr Y -
tivc N -
tlclts Y -
tlcots Y -
tlcotsod Y -
tlo N -
tmx N -
token_arp Y -
tornade N -
ts_1 N -
ts_2 N -
tun Y -
udp Y -
ufs Y -
uipc Y -
usbd N -
vclass N -
vol Y -
vols Y -
vxdmp Y -
vxfs Y -
vxportal Y -
vxvm Y -
wsio Y -
4,编译新内核
对于hpux11.11,执行如下命令编译新内核
#/usr/sbin/mk_kernel -s /stand/build/system
对于hpux11.23,执行如下命令编译新内核,该命令将自动更新所有相关文件。
#mc
5,更新新内核
对于hpux11.11,执行如下命令更新新内核
将旧的system和vmunix文件备份。以被系统能够从旧的内核引导。
#mv /stand/system /stand/system.prev
#mv /stand/build/system /stand/system
Kmupdate重新命名/stand/vmunix到/stand/vmunix.prev并移动新内核为/stand/vmunix
#kmupdate /stand/build/vmunix_test
使用新内核引导系统 33
#cd /
#shutdown –ry 0
c) HP-UX内核参数编译时遇到的问题
HP-UX内核参数有些是相互关联的,怎样关联有2种方法解决,第一是通过sam来更改HP-UX内核参数,当你修改错误时会自动修正或提示,第二是在修改前执行如下命令:
#kmtune
Parameter Current Dyn Planned Module Version
======================================================================NSTRBLKSCHED - - 2
NSTREVENT 50 - 50
NSTRPUSH 16 - 16
NSTRSCHED 0 - 0
STRCTLSZ 1024 - 1024
STRMSGSZ 65535 - 65535
acctresume 4 - 4
acctsuspend 2 - 2
aio_listio_max 256 - 256
aio_max_ops 2048 - 2048
aio_physmem_pct 10 - 10
aio_prio_delta_max 20 - 20
allocate_fs_swapmap 0 - 0
alwaysdump 1 - 1
bootspinlocks - - 256
bufcache_hash_locks 128 - 128
bufpages 0 - (NBUF*2)
chanq_hash_locks 256 - 256
core_addshmem_read 0 Y 0
core_addshmem_write 0 Y 0
create_fastlinks 0 - 0
dbc_max_pct 5 - 5
dbc_min_pct 2 - 2
default_disk_ir 0 - 0
desfree - - 0
disksort_seconds 0 - 0
dnlc_hash_locks 512 - 512
dontdump 0 - 0
dskless_node - - 0
dst 1 - 1
effective_maxpid - - ((NPROC<=30000)?30000:(NPROC*5/4))
eisa_io_estimate - - 0x300
enable_idds 0 - 0
eqmemsize 15 - 15
executable_stack 1 - 1
fcp_large_config 0 - 0 34
file_pad - - 10
fs_async 0 - 0
ftable_hash_locks 64 - 64
hdlpreg_hash_locks 128 - 128
hfs_max_ra_blocks 8 - 8
hfs_max_revra_blocks 8 - 8
hfs_ra_per_disk 64 - 64
hfs_revra_per_disk 64 - 64
hp_hfs_mtra_enabled 1 - 1
hpux_aes_override - - 0
initmodmax 50 - 50
io_ports_hash_locks 64 - 64
iomemsize - - 40000
ksi_alloc_max 65536 - (NPROC*8)
ksi_send_max 32 - 32
lotsfree - - 0
max_async_ports 50 - 50
max_fcp_reqs 512 - 512
max_mem_window 0 - 0
max_thread_proc 1024 - 1024
maxdsiz 0x10000000 - 0x10000000
maxdsiz_64bit 0x40000000 - 0X40000000
maxfiles 2048 - 2048
maxfiles_lim 4096 Y 4096
maxqueuetime - - 0
maxssiz 0x800000 - 0X800000
maxssiz_64bit 0x800000 - 0X800000
maxswapchunks 39000 - 39000
maxtsiz 0x4000000 Y 0X4000000
maxtsiz_64bit 0x40000000 Y 0X40000000
maxuprc 598 Y 598
maxusers 500 - 500
maxvgs 20 - 20
mesg 1 - 1
minfree - - 0
modstrmax 500 - 500
msgmap 16386 - (2+MSGTQL)
msgmax 8192 Y 8192
msgmnb 16384 Y 16384
msgmni 4096 - 4096
msgseg 16384 - 16384
msgssz 8 - 8
msgtql 16384 - 16384
nbuf 0 - 0 35
ncallout 8208 - (16+NKTHREAD)
ncdnode 150 - 150
nclist 8100 - (100+16*MAXUSERS)
ncsize 13980 - (NINODE+VX_NCSIZE)+(8*DNLC_HASH_LOCKS)
ndilbuffers 30 - 30
netisr_priority - - -1
netmemmax - - 0
nfile 14324 - (16*(NPROC+16+MAXUSERS)/10+32+2*(NPTY+NSTRPTY+NSTRTEL))
nflocks 2048 - 2048
nhtbl_scale 0 - 0
ninode 8860 - ((NPROC+16+MAXUSERS)+32+(2*NPTY))
nkthread 8192 - 8192
nni - - 2
no_lvm_disks 0 - 0
nproc 8192 - 8192
npty 60 - 60
nstrpty 60 - 60
nstrtel 60 - 60
nswapdev 10 - 10
nswapfs 10 - 10
nsysmap 16384 - ((NPROC)>800?2*(NPROC):800)
nsysmap64 16384 - ((NPROC)>800?2*(NPROC):800)
o_sync_is_o_dsync 0 - 0
page_text_to_local - - 0
pfdat_hash_locks 128 - 128
public_shlibs 1 - 1
region_hash_locks 128 - 128
remote_nfs_swap 0 - 0
rtsched_numpri 32 - 32
scroll_lines 100 - 100
scsi_max_qdepth 8 Y 8
scsi_maxphys 1048576 - 1048576
sema 1 - 1
semaem 16384 - 16384
semmap 8194 - (SEMMNI+2)
semmni 8192 - 8192
semmns 16384 - 16384
semmnu 1560 - 1560
semmsl 2048 Y 2048
semume 64 - 64
semvmx 32767 - 32767
sendfile_max 0 - 0
shmem 1 - 1
shmmax 0x600000000 Y 0X600000000 36
shmmni 512 - 512
shmseg 120 Y 120
st_ats_enabled 1 - 1
st_fail_overruns 0 - 0
st_large_recs 0 - 0
streampipes 0 - 0
swapmem_on 1 - 1
swchunk 2048 - 2048
sysv_hash_locks 128 - 128
tcphashsz 0 - 0
timeslice 10 - (100/10)
timezone 420 - 420
unlockable_mem 0 - 0
vas_hash_locks 128 - 128
vnode_cd_hash_locks 128 - 128
vnode_hash_locks 128 - 128
vps_ceiling 16 - 16
vps_chatr_ceiling 1048576 - 1048576
vps_pagesize 4 - 4
vx_fancyra_enable 0 - 0
vx_maxlink 32767 - 32767
vx_ncsize 1024 - 1024
vxfs_max_ra_kbytes 1024 - 1024
vxfs_ra_per_disk 1024 - 1024
从它的输出中我们可以查出HP-UX内核参数的关联性,主要表现在一部分HP-UX内核参数可以使用整数值表达式定义,例如nfile内核参数的值缺省时同多个参数相关,其由如下表达式定义:(16*(NPROC+16+MAXUSERS)/10+32+2*(NPTY+NSTRPTY+NSTRTEL))。
HP-UX内核参数的值也不是能够无限制的变大的,它的极限在操作系统一层也作了限制,这些限制文件在/usr/conf/master.d目录下,不同文件规定不同的HP-UX内核参数的值的上下限。/usr/conf/master.d/core-hpux 文件包含如下信息:
*range acctresume<=101
*range acctresume>=-100
*range acctsuspend<=100
*range acctsuspend*range acctsuspend>=-100
*range (bufpages==0)||(64<=bufpages)
*range dskless_node<=1
*range dskless_node>=0
*range dst<=5
*range dst>=0
*range eqmemsize>=0
*range executable_stack<=2
*range executable_stack>=0
*range fs_async<=1 37
*range fs_async>=0
*range maxdsiz<=0xfffff000
*range maxdsiz>=256*1024
*range maxdsiz_64bit<(4*1024*1024*1024*1024 - 1024*1024*1024)
*range maxdsiz_64bit>=256*1024
*range maxfiles<=60000
*range maxfiles>=30
*range maxfiles_lim<=60000
*range maxfiles_lim>=30
*range maxssiz<=383*1024*1024
*range maxssiz>=256*1024
*range maxssiz_64bit<=1024*1024*1024
*range maxssiz_64bit>=256*1024
*range maxswapchunks<=16384
*range maxswapchunks>=1
*range maxtsiz<=1024*1024*1024
*range maxtsiz>=256*1024
*range maxtsiz_64bit<4*1024*1024*1024*1024
*range maxtsiz_64bit>=256*1024
*range maxuprc<(nproc-4)
*range maxuprc<=(nproc-4)
*range maxuprc>=3
*range max_thread_proc>=64
*range max_thread_proc<=nkthread
*range maxusers<=4096
*range maxusers>=0
*range (nbuf==0)||(nbuf>=16)
*range ncallout>=6
*range ncallout>=nkthread
*range netisr_priority<=127
*range netisr_priority>=-1
*range netmemmax >=-1
*range tcphashsz<=256*1024
*range tcphashsz>=0
*range nfile>=14
*range nflocks>=2
*range ninode>=14
*range ncsize>=60
*range nclist>=132
*range nproc<=4194304
*range nproc>=10
*range effective_maxpid<=8388607
*range effective_maxpid>=30000
*range nkthread<=4194304
38
*range nkthread>=50
*range npty>=1
*range nswapdev<=25
*range nswapdev>=1
*range nswapfs<=25
*range nswapfs>=0
*range scroll_lines<=999
*range scroll_lines>=60
*range sendfile_max>=0
*range sendfile_max<=0x40000
*range aio_max_ops>=1
*range aio_max_ops<=0x100000
*range aio_listio_max>=2
*range aio_listio_max<=0x10000
*range aio_physmem_pct>=5
*range aio_physmem_pct<=50
*range aio_prio_delta_max>=0
*range aio_prio_delta_max<=20
*range swchunk<=65536
*range swchunk>=1
*range timeslice<=2147483647
*range timeslice>=-1
*range timezone<=720
*range timezone>=-720
*range unlockable_mem>=0
*range ksi_send_max>=32
*range ksi_alloc_max>=32
*range nhtbl_scale>=0
*range nhtbl_scale<=8
该文件包括除内存分页子系统的大部分HP-UX内核参数的上下限定义,依据具体情况,我们可以修改HP-UX内核参数的上下限定义,使得系统能够让HP-UX内核参数超过缺省的上下限定义值。
内存分页子系统的HP-UX内核参数的上下限定义在/usr/conf/master.d/sysv-shm,/usr/conf/master.d/sysv-sem,/usr/conf/master.d/sysv-msg, 该含如下信息:
$ cat sysv-shm
*
* @(#)B.11.11_LR
*
* File: sysv-shm
*
$TUNABLE
*
* The following entries form the tunable parameter table. Any of these
* values can be overwritten in the dfile. However, before changing any
39
* value, know the ramifications of your change.
*
*range shmem<=1
*range shmmax<=0x40000000
*range shmmax>=2*1024
*range shmmni<=8192
*range shmmni>=3
*range shmseg<=shmmni
*range shmseg>=1
*
* Shared Memory Constants
shmem SHMEM 1
shmmax SHMMAX 0X4000000
shmmni SHMMNI 200
shmseg SHMSEG 120
$ cat sysv-sem
*
* @(#)B.11.11_LR
*
* File: sysv-sem
*
$TUNABLE
*
* The following entries form the tunable parameter table. Any of these
* values can be overwritten in the dfile. However, before changing any
* value, know the ramifications of your change.
*
*range sema<=1
*range semaem<=32767
*range semaem<=semvmx
*range semaem>=0
*range semmap<=(semmni+2)
*range semmap<=32767
*range semmap>=4
*range semmni<=semmns
*range semmni>=2
*range semmns<=32767
*range semmns>=2
*range semmsl>=2048
*range semmsl<=10240
*range semmnu<=(nproc-4)
*range semmnu>=1
*range semume<=semmns 40
*range semume>=1
*range semvmx<=65535
*range semvmx>=1
*
* Semaphore Constants
sema SEMA 1
semaem SEMAEM 16384
semmap SEMMAP (SEMMNI+2)
semmni SEMMNI 64
semmns SEMMNS 128
semmsl SEMMSL 2048
semmnu SEMMNU 30
semume SEMUME 10
semvmx SEMVMX 32767
$ cat sysv-msg
*
* @(#)B.11.11_LR
*
* File: sysv-msg
*
$TUNABLE
*
* The following entries form the tunable parameter table. Any of these
* values can be overwritten in the dfile. However, before changing any
* value, know the ramifications of your change.
*
*range mesg<=1
*range msgmap<=(msgseg+2)
*range msgmap<=(msgtql+2)
*range msgmap>=3
*range msgmax<=(msgssz*msgseg)
*range msgmax<=64*1024*1024
*range msgmax<=msgmnb
*range msgmax>=0
*range msgmnb<=(msgssz*msgseg)
*range msgmnb<=64*1024*1024
*range msgmnb>=0
*range msgmni>=1
*range msgseg<=32767
*range msgseg>=1
*range msgssz>=1
*range msgtql>=1
*
41
* Message Constants
mesg MESG 1
msgmap MSGMAP (2+MSGTQL)
msgmax MSGMAX 8192
msgmnb MSGMNB 16384
msgmni MSGMNI 50
msgseg MSGSEG 2048
msgssz MSGSSZ 8
msgtql MSGTQL 40
该文件包括内存分页子系统的HP-UX内核参数的上下限定义,依据具体情况,我们可以修改这些HP-UX内核参数的上下限定义,使得系统能够让HP-UX内核参数超过缺省的上下限定义值。
在更改了HP-UX内核参数限制文件目录/usr/conf/master.d下的文件后,HP-UX的系统管理工具sam的配置文件/var/sam/boot.config依然保存着旧值,当用HP-UX的系统管理工具sam更改HP-UX内核参数时,依然会报超过极限的错误,这时应该退出HP-UX的系统管理工具sam,然后直接删除/var/sam/boot.config文件或执行如下命令重建新值。
#/usr/sam/lbin/getkinfo -b

你可能感兴趣的:(hpux)