内核统计信息
为了协助进行性能调优,Oracle Solaris 内核提供了 kstat(3KSTAT) 功能。stat 功能提供了一套函数和数据结构,以供设备驱动程序和其他内核模块导出特定于模块的内核统计信息。
stat 是用于记录设备使用情况的可计量方面的数据结构。stat 存储为以 null 终止的链接列表。每个 stat 都有一个通用的头区和一个特定于类型的数据区。头区由 kstat_t 结构定义。
内核统计信息结构成员
stat 结构的成员包括:
- ks_class[KSTAT_STRLEN]
stat 类型分类为 bus、controller、device_error、disk、hat、kmem_cache、
stat、misc、net、nfs、pages、partition、rps、
Ufa、vm 或 men。
- ks_crtime
stat 的创建时间。ks_crtime 通常用于计算各个计数器的速率。
- ks_data
指向 stat 的数据区。
- ks_data_size
数据区大小总额(字节)。
- ks_instance
创建此 stat 的内核模块的实例。ks_instance 与 ks_module 和 ks_name 结合使用,以便为 stat 指定唯一且有意义的名称。
- ks_kid
stat 的唯一 ID。
- ks_module
[KSTAT_STRLEN]
标识创建此 stat 的内核模块。ks_module 与 ks_instance 和 ks_name 结合使用,以便为 stat 指定唯一且有意义的名称。KSTAT_STRLEN 可设置 ks_module 的最大长度。
- ks_name
[KSTAT_STRLEN]
为 stat 指定的名称,与 ks_module 和 ks_instance 结合使用。KSTAT_STRLEN 可设置 ks_module 的最大长度。
- ks_ndata
为以下可支持多个记录的 stat 类型指示数据记录的个数:KSTAT_TYPE_RAW、KSTAT_TYPE_NAMED 和 KSTAT_TYPE_TIMER
- ks_next
指向链表中的下一个 stat。
- ks_resv
保留的字段。
- ks_snaptime
上一数据快照的时间戳,在计算速率时很有用。
- ks_type
数据类型,对于二进制数据可为 KSTAT_TYPE_RAW,对于名称/值对可为 KSTAT_TYPE_NAMED,对于中断统计信息可为 KSTAT_TYPE_INTR,对于 I/O 统计信息可为 KSTAT_TYPE_IO,对于事件计时器可为 KSTAT_TYPE_TIMER。
内核统计信息结构
不同类型的 stat 的结构如下所示:
- kstat(9S)
由设备驱动程序导出的每条内核统计信息 (stat) 都由头区和数据区构成。 stat (9S) 结构是统计信息的头部分。
- kstat_intr(9S)
中断 stat 的结构。中断类型包括:
驱动程序通常只报告从其处理程序中声明的硬中断和软中断,但度量虚假类中断对自动向量化的设备很有用,以便查找特定系统配置中的任何中断延迟信息。具有多个相同类型中断的设备应使用多个结构。
- kstat_io(9S)
I/O stat 的结构。
- kstat_named(9S)
命名的 stat 的结构。命名的 stat 是名称-值对数组。这些对位于 kstat_named 结构中。
内核统计信息函数
用于使用 stat 的函数包括:
- kstat_create(9F)
分配和初始化 kstat(9S) 结构。
- kstat_delete(9F)
从系统中删除 stat
- kstat_install(9F)
向系统中添加完全初始化的 stat。
- kstat_named_init(9F) 、
kstat_named_setstr(9F)
初始化已命名的 stat。kstat_named_setstr() 将 st(一个字符串)与已命名的 stat 指针相关联。
- kstat_queue(9F)
许多 I/O 子系统都至少有两个基本的事务队列要管理。一个队列用于已接受但尚未开始处理的事务。另一个队列用于正在进行处理但尚未处理完的事务。因此,保留了两个累积时间统计量:等待时间和运行时间。等待时间是提供服务之前的时间。运行时间是提供服务期间的时间。kstat_queue() 函数系列可根据驱动程序等待队列和运行队列之间的转换来管理这些时间:
Oracle Solaris 以太网驱动程序的内核统计信息
下表中介绍的 stat 接口是从驱动程序中获取以太网物理层统计信息的有效方法。以太网驱动程序应导出这些统计信息,以指导用户更好地诊断和修复以太网物理层问题。除 link_up 之外,所有统计信息在未提供时的缺省值均为 0。应将 link_up 统计信息的值假定为 1。
以下示例给出了所有共享的链路设置。在这种情况下,可使用 Mei 来过滤统计信息。
stat ce:0:mii:link_*
表 23-2 以太网 MII/GMII 物理层接口内核统计信息
| | |
xcvr_addr
| KSTAT_DATA_UINT32
| 提供当前正在使用的收发器的 MEI 地址。
|
xcvr_id
| KSTAT_DATA_UINT32
| 提供当前正在使用的收发器的特定供应商 ID 或设备 ID。
|
xcvr_inuse
| KSTAT_DATA_UINT32
| 指示当前正在使用的收发器的类型。IEEE aPhytType 可枚举以下集合: (0) 其他未定义
(1) 不存在 MEI 接口,但未连接任何收发器
(2) 10 Mb/s Clause 7 10 Mb/s Manchester
(3) 100BASE-T4 Clause 23 100 Mb/s 8B/6T
(4) 100BASE-X Clause 24 100 Mb/s 4B/5B
(5) 100BASE-T2 Clause 32 100 Mb/s PAM5X5
(6) 1000BASE-X Clause 36 1000 Mb/s 8B/10B
(7) 1000BASE-T Clause 40 1000 Mb/s 4D-PAM5
此集合比 ifMauType 指定的集合小,后者定义为包括上述所有类型及其半双工/全双工选件。由于 cap_* 统计信息可提供此信息,因此可从 xcvr_inuse 和 cap_* 的组合中派生缺少的定义,以提供 ifMayType 的所有组合。
|
cap_1000fdx
| KSTAT_DATA_CHAR
| 指示设备支持 1 Gb/s 的全双工传输。
|
cap_1000hdx
| KSTAT_DATA_CHAR
| 指示设备支持 1 Gb/s 的半双工传输。
|
cap_100fdx
| KSTAT_DATA_CHAR
| 指示设备支持 100 Mb/s 的全双工传输。
|
cap_100hdx
| KSTAT_DATA_CHAR
| 指示设备支持 100 Mb/s 的半双工传输。
|
cap_10fdx
| KSTAT_DATA_CHAR
| 指示设备支持 10 Mb/s 的全双工传输。
|
cap_10hdx
| KSTAT_DATA_CHAR
| 指示设备支持 10 Mb/s 的半双工传输。
|
cap_asmpause
| KSTAT_DATA_CHAR
| 指示设备支持非对称暂停以太网流量控制。
|
cap_pause
| KSTAT_DATA_CHAR
| 指示当 cap_pause 设置为 1,cap_asmpause 设置为 0 时,设备支持对称暂停以太网流量控制。当 cap_asmpause 设置为 1 时,cap_pause 具有以下含义:
|
cap_rem_fault
| KSTAT_DATA_CHAR
| 指示设备支持远程故障指示。
|
cap_autoneg
| KSTAT_DATA_CHAR
| 指示设备支持自动协商。
|
adv_cap_1000fdx
| KSTAT_DATA_CHAR
| 指示设备正在通告支持 1 Gb/s 的全双工传输。
|
adv_cap_1000hdx
| KSTAT_DATA_CHAR
| 指示设备正在通告支持 1 Gb/s 的半双工传输。
|
adv_cap_100fdx
| KSTAT_DATA_CHAR
| 指示设备正在通告支持 100 Mb/s 的全双工传输。
|
adv_cap_100hdx
| KSTAT_DATA_CHAR
| 指示设备正在通告支持 100 Mb/s 的半双工传输。
|
adv_cap_10fdx
| KSTAT_DATA_CHAR
| 指示设备正在通告支持 10 Mb/s 的全双工传输。
|
adv_cap_10hdx
| KSTAT_DATA_CHAR
| 指示设备正在通告支持 10 Mb/s 的半双工传输。
|
adv_cap_asmpause
| KSTAT_DATA_CHAR
| 指示设备正在通告支持非对称暂停以太网流量控制。
|
adv_cap_pause
| KSTAT_DATA_CHAR
| 指示当 adv_cap_pause 设置为 1,adv_cap_asmpause 设置为 0 时,设备正在通告支持对称暂停以太网流量控制。当 adv_cap_asmpause 设置为 1 时,adv_cap_pause 具有以下含义:
|
adv_rem_fault
| KSTAT_DATA_CHAR
| 指示设备遇到故障,设备将把该故障转发给链路合作伙伴。
|
adv_cap_autoneg
| KSTAT_DATA_CHAR
| 指示设备正在通告支持自动协商。
|
lp_cap_1000fdx
| KSTAT_DATA_CHAR
| 指示链路合作伙伴设备支持 1 Gb/s 的全双工传输。
|
lp_cap_1000hdx
| KSTAT_DATA_CHAR
| 指示链路合作伙伴设备支持 1 Gb/s 的半双工传输。
|
lp_cap_100fdx
| KSTAT_DATA_CHAR
| 指示链路合作伙伴设备支持 100 Mb/s 的全双工传输。
|
lp_cap_100hdx
| KSTAT_DATA_CHAR
| 指示链路合作伙伴设备支持 100 Mb/s 的半双工传输。
|
lp_cap_10fdx
| KSTAT_DATA_CHAR
| 指示链路合作伙伴设备支持 10 Mb/s 的全双工传输。
|
lp_cap_10hdx
| KSTAT_DATA_CHAR
| 指示链路合作伙伴设备支持 10 Mb/s 的半双工传输。
|
lp_cap_asmpause
| KSTAT_DATA_CHAR
| 指示链路合作伙伴设备支持非对称暂停以太网流量控制。
|
lp_cap_pause
| KSTAT_DATA_CHAR
| 指示当 lp_cap_pause 设置为 1,lp_cap_asmpause 设置为 0 时,链路合作伙伴设备支持对称暂停以太网流量控制。当 lp_cap_asmpause 设置为 1 时,lp_cap_pause 具有以下含义:
|
lp_rem_fault
| KSTAT_DATA_CHAR
| 指示链路合作伙伴遇到链路故障。
|
lp_cap_autoneg
| KSTAT_DATA_CHAR
| 指示链路合作伙伴设备支持自动协商。
|
link_asmpause
| KSTAT_DATA_CHAR
| 指示链路正采用非对称暂停以太网流量控制来运行。
|
link_pause
| KSTAT_DATA_CHAR
| 指示暂停功能的精度。指示当 link_pause 设置为 1,link_asmpause 设置为 0 时,链路正采用对称暂停以太网流量控制来运行。当 link_asmpause 设置为 1 且相对于链路的本地视图时,link_pause 具有以下含义:
|
link_duplex
| KSTAT_DATA_CHAR
| 指示链路双工模式。 link_duplex = 0 链路关闭,且双工模式未知。
link_duplex = 1 链路打开,且处于半双工模式。
link_duplex = 2 链路打开,且处于全双工模式。
|
link_up
| KSTAT_DATA_CHAR
| 指示链路是打开还是关闭。 link_up = 0 链路关闭。
link_up = 1 链路打开。
|
|