iostadd 内核服务
用途
注册用于更新 伊奥斯塔 子例程报告的 I/O 统计信息的 I/O 统计信息结构。
语法
描述
约斯塔德 内核服务用来注册在设备上维护统计信息所需的 I/O 统计信息结构。 约斯塔德 服务通常由 tty , disk 或 CD-ROM 设备驱动程序调用,以提供 伊奥斯塔 子例程所使用的统计信息。 伊奥斯塔 子例程显示系统上 tty 和磁盘设备的统计信息。 对于每个已配置的设备,必须使用 约斯塔德 服务一次。
约斯塔德 内核服务以及 德克斯塔 结构支持多路径 I/O (MPIO)。 对于 MPIO 设备而言,锚点是磁盘的 德克斯塔 结构。 此锚点必须是通过使用 约斯塔德 内核服务注册的第一个 德克斯塔 结构。 以后注册的任何路径 dkstat 结构都必须引用 dkstat.dk_mpio_anchor 字段中锚点 dkstat (磁盘) 结构的地址。
对于 tty 设备, 开发类型 参数的值为 DD_tty。 在这种情况下, 约斯塔德 服务会使用 德夫斯塔普 参数来返回指向 Ttystat 结构的指针。
对于 开发类型 值为 DD_DISK 或 DD_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.
- 在设备初始化期间分配 德克斯塔 结构并将其置顶。
- 使用设备的逻辑名更新
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_rblks和dkstat.dk_wblks字段必须按已读或已写的块数递增。
如果设备支持离散寻道命令,dkstat.dk_seek字段必须按发送到设备的寻道命令的数目递增。 如果设备不支持离散寻道命令,则两个dkstat.dk_seek和dkstat.dk_xrate字段的值必须为 0。
基本内核将更新dkstat.dk_nextp和dkstat.dk_time字段。 初始化后,设备驱动程序不会对它们进行修改。 对于 MPIO 设备,基本内核还会更新 dkstat.dk_mpio_next_path 字段。
- 将
dkstat.dk_version的值设置为 dk_qd_service2_magic。 - 如果驱动程序不支持 MPIO ,请将
dkstat.ident.adapter字段设置为适配器名称。
- 增加每个读传输的
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 统计信息。 此参数的可能值为:
|
| 德夫斯塔普 | 指向由 开发类型 参数指定的设备类型的 I/O 统计信息结构。 对于 DD_tty的 开发类型 参数,将返回已置顶 Ttystat 结构的地址。 对于 DD_DISK 或 DD_CD-ROM的 开发类型 参数,该参数是一个输入参数,它指向调用者先前分配的 德克斯塔 结构。 在支持存储密钥的平台上,所传递的 德夫斯塔普 参数必须位于 KKEY_PUBLIC 或 KKEY_BLOCK_DEV 保护域中。 |
执行环境
仅可从 流程环境 调用 约斯塔德 内核服务。
返回值
| 项 | 描述 |
|---|---|
| 重大安全事件数量 | 指示未检测到任何错误。 |
| EINVAL | 表明 开发类型 参数指定了无效的设备类型。 对于 MPIO 设备,指示找不到用于路径 德克斯塔 结构的锚点。 |