热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QNX系统架构第四章:仪表化微内核

QNX微内核(procnto-instr)的监测版本内置了高级跟踪与分析工具,能够实现实时系统监控。该模块适用于单处理器及多处理器系统。

QNX 微内核(procnto-instr)的监测版本集成了高级别的跟踪与分析功能,支持实时监控系统运行状态。此模块既适合单CPU环境,也适用于SMP(对称多处理器)系统。

procnto-instr 模块具有低开销和高性能的特点——在不进行记录的情况下,其性能几乎与标准内核相当,通常仅慢约2%。尽管增加了大约30KB的代码量(针对x86系统),这一增加对于获取强大的工具功能和灵活性来说是微不足道的。根据最终产品的尺寸需求,可以选择将其作为开发工具或直接用于生产环境。

监测模块的设计是非侵入性的,即无需修改程序源码即可监控程序与内核的交互。用户可以灵活地选择监控内核与系统中任一线程或进程间的多种交互,包括但不限于内核调用、状态变更及其他系统活动,甚至中断处理。这些活动在监测过程中被统称为事件。

监测概览

内核监测的核心任务包括:

  1. 因各种系统活动触发,微内核(procnto-instr)产生跟踪事件,并将这些事件复制到一个环形缓冲区中。
  2. 当缓冲区中的事件数量达到预设阈值时,内核会通知数据采集工具。
  3. 数据采集工具随后将缓冲区中的跟踪事件写入输出设备,如串行端口或事件文件等。
  4. 最后,数据解析工具对事件进行解读,并将结果呈现给用户。

事件控制

考虑到实时系统中发生的活动数量庞大,内核产生的事件量可能会非常大,这对数据量、处理能力和存储资源都是考验。然而,用户可以轻松控制输出的数据量,通过设置初始条件、应用预定义的内核过滤器或自定义事件处理器等方式来动态管理事件的生成。

数据采集工具(如 tracelogger)收集数据后,用户可以在收集到相关事件后立即或稍后进行分析。集成开发环境(IDE)中的系统分析工具以图形界面展示这些数据,使用户能够直观地了解系统内部的运作情况。

事件生成模式

除了使用过滤器控制事件流外,还可以指定内核采用两种不同的事件生成模式之一,这两种模式分别为快速模式和详细模式。快速模式下,每个事件携带的信息较少,而详细模式则包含更多细节。这种灵活性允许用户根据需要调整系统设置,因为每种模式都是针对单个事件的。

环形缓冲区

内核可以将所有跟踪事件存储在一个内部环形缓冲区中,而不是直接发送到外部设备。当特定条件被触发时,可以编程将缓冲区内容转储至外部设备,这对于捕捉在特定运行条件下出现的难以发现的问题非常有效。

数据解析

事件数据包含高精度的时间戳和生成事件的CPU ID,这有助于诊断多处理器系统中常见的复杂定时问题。事件格式还记录了CPU平台(如 x86、ARM 等)和字节序类型,便于远程实时或离线分析。利用数据解析工具,用户可以从多个角度查看数据输出,例如系统的时间线视图、活动线程/进程的运行视图以及基于状态的进程/线程事件视图。

为了帮助用户更好地解析事件数据流,我们提供了一个库(traceparser),用户可以利用这个库编写自定义的数据解析器。

使用 IDE 进行系统分析

系统分析工具包(SAT)的 IDE 模块不仅作为综合的仪器控制工具,也是强大的后处理可视化工具。在 IDE 中,开发人员可以配置所有的跟踪事件和模式,并自动将日志文件传输到远程系统进行分析。作为可视化工具,IDE 提供了一系列丰富的事件和流程过滤器,旨在帮助开发人员迅速筛选出大量事件集合中的关键信息,以便专注于感兴趣的事件。

主动追踪

虽然监测内核为系统进程、线程和状态的仪器化和监控提供了透明的方法,但应用程序也可以主动参与事件收集过程。通过使用 TraceEvent() 库调用,应用程序可以直接向跟踪流中插入自定义事件。这一功能在构建大型、紧密耦合的多组件系统时尤为重要。

例如,下面的代码展示了如何通过简单的函数调用来向事件流中添加两个整数值事件(26, 1975)和一个字符串事件(“My Event”):

#include 
#include

#define MYEVENTCODE 12

int main(int argc, char **argv) {
printf("My pid is %d \n", getpid());
// 向事件流中插入两个整数事件 (26, 1975)
TraceEvent(_NTO_TRACE_INSERTSUSEREVENT, MYEVENTCODE, 26, 1975);
// 向事件流中插入一个字符串事件 (My Event)
TraceEvent(_NTO_TRACE_INSERTUSRSTREVENT, MYEVENTCODE, "My Event");
return 0;
}

使用 traceprinter 数据解析器收集的输出结果如下所示:


推荐阅读
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
author-avatar
MiltonW_825
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有