热门标签 | 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 数据解析器收集的输出结果如下所示:


推荐阅读
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
  • CentOS 6.5 上安装 MySQL 5.7.23 的详细步骤
    本文详细介绍如何在 CentOS 6.5 系统上成功安装 MySQL 5.7.23,包括卸载旧版本、下载安装包、配置文件修改及启动服务等关键步骤。 ... [详细]
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社区 版权所有