Solaris OS 提供了内核统计信息结构,以便针对驱动程序实现计数器。使用 DTrace 功能可以实时分析性能。本节介绍有关设备性能的以下主题:
内核统计信息-Solaris OS 提供一组数据结构和函数,用于捕获内核中的性能统计信息。内核统计信息(名为 kstat)可使驱动程序在系统运行时导出连续统计信息。可通过使用 kstat 函数以编程方式处理 kstat 数据。
用于动态检测过程的 DTrace-使用 DTrace 可向驱动程序中动态添加检测过程,这样您便可以执行诸如分析系统和度量性能等任务。DTrace 利用了预定义的 kstat 结构。
为了协助进行性能调优,Solaris 内核提供了 kstat(3KSTAT) 功能。kstat 功能提供了一套函数和数据结构,以供设备驱动程序和其他内核模块导出特定于模块的内核统计信息。
kstat 是用于记录设备使用情况的可计量方面的数据结构。kstat 存储为以 null 终止的链接列表。每个 kstat 都有一个通用的头区和一个特定于类型的数据区。头区由 kstat_t 结构定义。
Sun Developer Network 上的文章 "Using kstat From Within a Program in the Solaris OS"(从 Solaris OS 的程序中使用 kstat)(URL 为 http://developers.sun.com/solaris/articles/kstat_api.html)提供了有关如何使用 kstat(3KSTAT) 和 libkstat(3LIB) API 从 Solaris OS 中提取度量的两个实用示例。这两个示例分别是 "Walking Through All the kstat"(遍历所有 kstat)和 "Getting NIC kstat Output Using the Java Platform"(使用 Java 平台获取 NIC kstat 输出)。
kstat 类型分类为 bus、controller、device_error、disk、hat、kmem_cache、kstat、misc、net、nfs、pages、partition、rps、ufs、vm 或 vmem。
kstat 的创建时间。ks_crtime 通常用于计算各个计数器的速率。
指向 kstat 的数据区。
数据区大小总额(以字节为单位)。
创建此 kstat 的内核模块的实例。ks_instance 与 ks_module 和 ks_name 结合使用,以便为 kstat 指定唯一且有意义的名称。
kstat 的唯一 ID。
标识创建此 kstat 的内核模块。ks_module 与 ks_instance 和 ks_name 结合使用,以便为 kstat 指定唯一且有意义的名称。KSTAT_STRLEN 可设置 ks_module 的最大长度。
为 kstat 指定的名称,与 ks_module 和 ks_instance 结合使用。KSTAT_STRLEN 可设置 ks_module 的最大长度。
为以下可支持多个记录的 kstat 类型指示数据记录的个数: KSTAT_TYPE_RAW、KSTAT_TYPE_NAMED 和 KSTAT_TYPE_TIMER
指向链表中的下一个 kstat。
保留的字段。
上一数据快照的时间标记,在计算速率时很有用。
数据类型,对于二进制数据可为 KSTAT_TYPE_RAW,对于名称/值对可为 KSTAT_TYPE_NAMED,对于中断统计信息可为 KSTAT_TYPE_INTR,对于 I/O 统计信息可为 KSTAT_TYPE_IO,对于事件计时器可为 KSTAT_TYPE_TIMER。
由设备驱动程序导出的每条内核统计信息 (kstat) 都由头区和数据区构成。kstat(9S) 结构是统计信息的头部分。
中断 kstat 的结构。中断类型包括:
硬中断-源自硬件设备自身
软中断-因系统使用某些系统中断源而引起
监视程序中断-由定期计时器调用引起
虚假中断-输入了中断入口点,但没有需要提供服务的中断
多个服务-在从任何其他类型返回之前检测到中断并提供了服务
驱动程序通常只报告从其处理程序中声明的硬中断和软中断,但度量虚假类中断对自动向量化的设备很有用,以便查找特定系统配置中的任何中断延迟信息。具有多个相同类型中断的设备应使用多个结构。
I/O kstat 的结构。
命名的 kstat 的结构。命名的 kstat 是名称-值对数组。这些对位于 kstat_named 结构中。
分配和初始化 kstat(9S) 结构。
从系统中移除 kstat。
向系统中添加完全初始化的 kstat。
初始化已命名的 kstat。kstat_named_setstr() 将 str(一个字符串)与已命名的 kstat 指针相关联。
许多 I/O 子系统都至少有两个基本的事务队列要管理。一个队列用于已接受但尚未开始处理的事务。另一个队列用于正在进行处理但尚未处理完的事务。因此,保留了两个累积时间统计量:等待时间和运行时间。等待时间是提供服务之前的时间。运行时间是提供服务期间的时间。kstat_queue() 函数系列可根据驱动程序等待队列和运行队列之间的转换来管理这些时间:
下表中介绍的 kstat 接口是从驱动程序中获取以太网物理层统计信息的有效方法。以太网驱动程序应导出这些统计信息,以指导用户更好地诊断和修复以太网物理层问题。除 link_up 之外,所有统计信息在未提供时的缺省值均为 0。应将 link_up 统计信息的值假定为 1。
以下示例给出了所有共享的链路设置。在这种情况下,可使用 mii 来过滤统计信息。
kstat ce:0:mii:link_*表 22–2 以太网 MII/GMII 物理层接口内核统计信息
DTrace 是一种全面的动态跟踪工具,用于检查用户程序和操作系统自身的行为。通过 DTrace,可以收集环境中处于关键位置(称为探测器)的数据。通过 DTrace 可以记录栈跟踪、时间标记、函数的参数或探测器触发频率计数等数据。由于 DTrace 允许动态插入探测器,因此无需重新编译代码。有关 DTrace 的更多信息,请参见《Solaris 动态跟踪指南》和《DTrace User Guide 》。DTrace BigAdmin System Administration Portal(DTrace BigAdmin 系统管理门户网站)包含许多指向有关 DTrace 的文章、XPert 会话和其他信息的链接。