iostadd 内核服务

用途

注册用于更新 伊奥斯塔 子例程报告的 I/O 统计信息的 I/O 统计信息结构。

语法

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/iostat.h>
#include <sys/devinfo.h>
int iostadd ( devtype,  devstatp)
int devtype;
union {
       struct ttystat *ttystp;
       struct dkstat  *dkstp;
       } devstatp;

描述

约斯塔德 内核服务用来注册在设备上维护统计信息所需的 I/O 统计信息结构。 约斯塔德 服务通常由 tty , disk 或 CD-ROM 设备驱动程序调用,以提供 伊奥斯塔 子例程所使用的统计信息。 伊奥斯塔 子例程显示系统上 tty 和磁盘设备的统计信息。 对于每个已配置的设备,必须使用 约斯塔德 服务一次。

约斯塔德 内核服务以及 德克斯塔 结构支持多路径 I/O (MPIO)。 对于 MPIO 设备而言,锚点是磁盘的 德克斯塔 结构。 此锚点必须是通过使用 约斯塔德 内核服务注册的第一个 德克斯塔 结构。 以后注册的任何路径 dkstat 结构都必须引用 dkstat.dk_mpio_anchor 字段中锚点 dkstat (磁盘) 结构的地址。

对于 tty 设备, 开发类型 参数的值为 DD_tty。 在这种情况下, 约斯塔德 服务会使用 德夫斯塔普 参数来返回指向 Ttystat 结构的指针。

对于 开发类型 值为 DD_DISKDD_CD-ROM的磁盘或 CD-ROM 设备,调用者必须提供固定且已初始化的 德克斯塔 结构作为输入参数。 此结构由 约斯塔德 内核服务的条目上的 德夫斯塔普 参数指向。

如果对设备的设备驱动程序支持已终止,那么必须通过调用 伊奥斯特德尔 内核服务来取消注册向 约斯塔德 内核服务注册的 德克斯塔 Ttystat 结构。

I/O 统计信息结构

iostadd 内核服务使用在 usr/include/sys/iostat.h 文件中找到的两个结构: ttystat 结构和 dkstat 结构。

Ttystat 结构中包含以下字段:

字段 描述
rawinch 由 tty 设备接收到的原始字符计数
caninch 从规范处理生成的规范字符的计数
outch 输出到 tty 设备的字符计数

约斯塔德 内核服务使用的第二个结构是 德克斯塔 结构,该结构包含有关磁盘设备的信息。 该结构包含以下字段:

字段 描述
diskname 磁盘逻辑设备的 32 个字符的字符串名称
dknextp 指向链中下一个 德克斯塔 结构的指针
dk_status 磁盘条目状态标志
dk_time 磁盘处于活动状态的时间
dk_bsize 块中的字节数
dk_xfers 与磁盘之间的传输的次数
dk_rblks 从磁盘读取的块的数量
dk_wblks 已写入磁盘的块数
dk_seeks 磁盘的寻道操作数
dk_version 德克斯塔 结构的版本
dk_q_depth 队列深度
dk_mpio_anchor 指向路径数据锚点 (磁盘) 的指针
dk_mpio_next_path 指向链中的下一个路径 德克斯塔 结构的指针
dk_mpio_path_id 路径标识

tty 设备驱动程序支持

rawinchTtystat 结构中的字段必须按 tty 设备所接收的字符数递增。 该caninchTtystat 结构中的字段必须以通过规范处理生成的输入字符数递增。 该outch字段由输出到 tty 设备的字符数增加。 这些字段必须由设备驱动程序递增,但永远不会被清除。

磁盘设备驱动程序支持

磁盘设备驱动程序必须执行以下四个任务:

  • 在设备初始化过程中分配并引脚dkstat结构。
  • Update thedkstat.diskname设备逻辑名的字段。
  • Update thedkstat.dk_bsize字段,其中包含设备上某个块中的字节数。
  • Set all other fields in the structure to 0.
如果磁盘设备驱动程序支持 MPIO ,那么它必须执行以下任务:
  • 在设备初始化期间分配 德克斯塔 结构并将其置顶。
  • 使用设备的逻辑名更新 dkstat.diskname 字段。
  • 使用设备上块中的字节数更新 dkstat.dk_bsize 字段。
  • dkstat.dk_version 的值设置为 dk_qd_mpio_magic
  • 如果添加的 dkstat 结构是磁盘,请将 dkstat.dk_mpio_anchor 的值设置为 0。
  • dkstat.dk_mpio_anchor 的值设置为路径的锚点 (磁盘) dkstat 结构的地址,如果添加的 dkstat 结构是路径,那么将 dkstat.dk_mpio_path_id 设置为路径的标识。
  • 将所有其他字段设置为 0。

如果设备支持离散寻道命令,dkstat.dk_xrate字段必须设置为设备的传输速率能力(KB/秒)。 然后,必须使用iostadd内核服务注册设备的dkstat结构。

在磁带机操作更新期间,dkstat.dk_status字段必须显示设备的繁忙状态或非繁忙状态。 可以通过设置和重置 IOST_DK_BUSY 标志来完成此操作。 该dkstat.dk_xfers对于启动到设备或从设备进行的每个传输,字段必须递增。 该dkstat.dk_rblksdkstat.dk_wblks字段必须按已读或已写的块数递增。

如果设备支持离散寻道命令,dkstat.dk_seek字段必须按发送到设备的寻道命令的数目递增。 如果设备不支持离散寻道命令,则两个dkstat.dk_seekdkstat.dk_xrate字段的值必须为 0。

基本内核将更新dkstat.dk_nextpdkstat.dk_time字段。 初始化后,设备驱动程序不会对它们进行修改。 对于 MPIO 设备,基本内核还会更新 dkstat.dk_mpio_next_path 字段。

注: 同一个 德克斯塔 结构不得注册多次。
除了基本任务之外,如果磁盘驱动程序支持 伊奥斯塔 命令的 -D 选项,那么该驱动程序在调用 约斯塔德 内核服务之前必须执行下列任务:
  • dkstat.dk_version 的值设置为 dk_qd_service2_magic
  • 如果驱动程序不支持 MPIO ,请将 dkstat.ident.adapter 字段设置为适配器名称。
在 I/O 操作期间,驱动程序必须执行以下任务:
  • 增加每个读传输的 dkstat.__dk_rxfers 字段。
  • 使用正在进行的 I/O 请求数更新 dkstat.dk_q_depth 字段。
  • 当正在进行的 I/O 请求数达到最大队列深度时,增大 dkstat.dk_q_full 字段。
  • dkstat.dk_rserv 字段增大服务时间,这是 devstrat 内核服务向适配器驱动程序发送读请求时与 iodone 内核服务从适配器驱动程序返回请求时之间的增量时间基值。
  • 当驱动程序再次尝试失败的读请求时,请增大 dkstat.dk_rtimeout 字段。
  • 当驱动程序将失败的读请求作为错误返回时,请增大 dkstat.dk_rfailed 字段。
  • 使用读请求的最短服务时间更新 dkstat.dk_min_rserv 字段。
  • 使用读请求的最长服务时间更新 dkstat.dk_max_rserv 字段。
  • dkstat.dk_wserv 字段增大服务时间,这是 devstrat 内核服务向适配器驱动程序发送写请求与 iodone 内核服务从适配器驱动程序返回请求之间的增量时间基值。
  • 当驱动程序再次尝试失败的写请求时,请增大 dkstat.dk_wtimeout 字段。
  • 当驱动程序将失败的写请求作为错误返回时,请增大 dkstat.dk_wfailed 字段。
  • 使用写请求的最短服务时间更新 dkstat.dk_min_wserv 字段。
  • 使用写请求的最长服务时间更新 dkstat.dk_max_wserv 字段。
  • 当驱动程序入队并使 I/O 请求出队时,增大和减小 dkstat.dk_wq_depth 字段。
  • dkstat.dk_wq_time 字段增大为等待时间,这是驱动程序对 I/O 请求进行排队时与 devstrat 内核服务将请求发送到适配器驱动程序时之间的增量时间基值。
  • 使用最短等待时间更新 dkstat.dk_wq_min_time 字段。
  • 使用最长等待时间更新 dkstat.dk_wq_max_time 字段。

参数

描述
DEVTYPE 指定要保留其 I/O 统计信息的设备类型。 在 /usr/include/sys/devinfo.h 文件中定义了各种设备类型。 目前,仅针对磁盘, CD-ROM 和 tty 设备保留 I/O 统计信息。 此参数的可能值为:
DD_DISK
对于磁盘
DD_CD-ROM
对于 CD-ROM
DD_TTY
对于 tty 设备
德夫斯塔普 指向由 开发类型 参数指定的设备类型的 I/O 统计信息结构。 对于 DD_tty开发类型 参数,将返回已置顶 Ttystat 结构的地址。 对于 DD_DISKDD_CD-ROM开发类型 参数,该参数是一个输入参数,它指向调用者先前分配的 德克斯塔 结构。

在支持存储密钥的平台上,所传递的 德夫斯塔普 参数必须位于 KKEY_PUBLICKKEY_BLOCK_DEV 保护域中。

执行环境

仅可从 流程环境 调用 约斯塔德 内核服务。

返回值

描述
重大安全事件数量 指示未检测到任何错误。
EINVAL 表明 开发类型 参数指定了无效的设备类型。 对于 MPIO 设备,指示找不到用于路径 德克斯塔 结构的锚点。