__stat 内置变量

此内置变量通过使用 Vue 脚本提供对各种 AIX® 内核组件的系统统计信息的访问。 系统统计信息作为可从任何 ProbeVue 脚本的任何探针点访问的正在运行的计数器提供。 未添加新的探针点以支持系统统计信息。 要访问系统统计信息,必须具有aix.ras.probevue.trace内核跟踪特权。

由于以下原因,系统统计信息很有用:
  • 可以在不开启系统跟踪或组件跟踪的情况下访问统计信息。
  • 只能显示必填字段。 无法使用当前统计信息命令来执行此操作。 通过直接从内核结构访问字段,可以避免复制大量数据。
  • 现在,系统统计信息在 Vue 脚本中可用,以轻松完成算术逻辑操作。 例如,可以使用 ProbeVue 来添加两个磁盘上的操作数。
Vue 内置 __stat 变量允许在全局级别和各个组件级别检索统计信息。 数据作为正在运行的计数器提供, Vue 脚本需要定期访问计数器。 您可以保存所需的值,并计算增量值以获取所需的结果。 由于以下原因,您可以访问系统统计信息:
  • 通过使用 Vue 脚本编写简单的统计信息工具,而不调用 C/C++ API 以每秒或按用户请求的时间间隔打印计数器的增量值。
    • 在增量值超过阈值时监视计数器值。 当该值超过阈值时,脚本会记录消息。
    • 使用 Vue 脚本在计数器的实际值 (不是增量值) 超过阈值 (例如,磁盘的最大服务时间) 时记录消息。
内置 __stat 变量提供了不同的方式来访问源中的统计信息。 从不同的系统组件获取系统统计信息的源。 统计信息访问方式如下所示。
同步方式访问
ProbeVue 在运行 Vue 脚本时提供对系统统计信息的直接访问。 此类型的直接访问是实时数据访问。 缺省情况下, ProbeVue 选择实时数据访问 (如果可用)。 在此方式下可能无法访问每个统计信息,因为组件未提供直接访问,或者在当前线程中无法进行直接访问。
异步或高速缓存方式
定期从源收集数据,并在 ProbeVue中进行高速缓存。 Vue 脚本使用高速缓存来访问数据。 将在单个会话或所有会话级别调整高速缓存刷新时间间隔。 每个源组件都提供了以异步方式访问统计信息的方法。 在此类情况下,您可以使用 fetch_stats_async_only 可调参数以高速缓存方式提供对所有统计信息的访问权。 当您无法实时数据或要监视不需要实时数据的系统时,将使用高速缓存方式。
示例
  1. 以下示例显示名为 hdisk9 的磁盘每秒的 I/O 传输次数:
    
    @@interval:*:clock:1000
    {
        printf("Number of transfers = %lld\n", __stat.io.disk.hdisk9->transfers);
    }
    
  2. 以下示例显示服务时间单位为微秒:
    
    @@syscall:*:read:exit
    {
        rdservtime = __stat.io.disk.hdisk10->rd_service_time;
        printf(“rdservtime=%lld microseconds\n”, rdservtime);
    }

__stat 内置语法

使用 __stat 内置表达式的一般语法如下: __stat.<level1_keyword>[.<level2_keyword>.....][.<inst1_keyword>....]-><fieldname>

下表显示了 "存储器 IO 统计信息" 的预定义级别和实例:
表 1. 预定义的级别和实例
内置变量 级别 0 Level 1 实例 0 实例 1 字段名称
统计 io 磁盘 hdisk [0...n]  
hdisk [0...n] 路径 [0...n]
统计 io 适配器 vscsi [0....n]  
统计 io 适配器 fcs [0...n]  
下表显示了 "网络统计信息" 的预定义级别和实例:
表 2。 预定义的级别和实例
内置变量 级别 0 Level 1 级别 2 实例 0 字段名称
统计 net 适配器   ent [0...n]
统计 net interface   en [0....n]
统计 net 协议 ip  
统计 net 协议 ipv6  
统计 net 协议 tcp  
统计 net 协议 udp  
统计 net 协议 icmp  
统计 net 协议 icmpv6  
统计 net 协议 IGMP  
统计 net 协议 arp