当前位置: 首页 > news >正文

QNX 性能分析工具(hogs pidin tracelogger)

hogs List the processes that are hogging the CPU

https://www.qnx.com/developers/docs/7.0.0/index.html#com.qnx.doc.neutrino.utilities/topic/h/hogs.html
hogs -P -t $samples_dur > cpu_usage.txt

hogs
在这里插入图片描述
在这里插入图片描述

运行结果

参数:
在这里插入图片描述

选项:
-i 迭代次数  
限制输出的迭代次数(默认:无限制)。
-m [e][t][p][s]
指定要包含在每个进程内存总量中的内存映射类型:
e - MAP_ELF 映射
t - MAP_STACK 映射
s - MAP_SHARED 映射
p - MAP_PRIVATE 映射(默认)
您可以将这些类型连接起来;例如,-msp 给出共享和私有映射的内存。
-p 优先级
以给定的优先级运行进程(默认:与父进程相同)。
-S [c|m|p]
按以下方式排序:
c - CPU(默认)
m - 内存
p - 进程 ID
-s 秒
两次更新之间休眠此长时间(默认:3 秒)。
-% 百分比 [c|m]
仅显示消耗此百分比或更多 CPU(c,默认)或内存(m)的进程。您可以使用此选项减少输出量。

内存映射类型

1. e - MAP_ELF 映射
含义: ELF可执行文件和共享库的映射
用途: 存储程序代码段、数据段等
特点:
通常是只读的代码段或可写的数据段
多个进程可以共享同一个ELF文件的代码段
包括程序的.text、.data、.bss等段2. t - MAP_STACK 映射
含义: 线程栈空间映射
用途: 为每个线程分配的栈内存
特点:
每个线程都有独立的栈空间
通常有栈大小限制
支持栈的自动增长(在限制范围内)
在pidin输出中可能显示为 "stack(current/max)" 格式3. s - MAP_SHARED 映射
含义: 共享内存映射
用途: 多个进程间共享的内存区域
特点:
多个进程可以访问同一块物理内存
修改对所有映射该区域的进程可见
常用于进程间通信(IPC)
包括共享库的数据段4. p - MAP_PRIVATE 映射
含义: 私有内存映射
用途: 进程私有的内存区域
特点:
采用写时复制(Copy-On-Write)机制
初始时可能与其他进程共享,但写入时会创建私有副本
包括进程的堆内存、私有数据段等

在这里插入图片描述

pidin Display information about the processes in the system (QNX Neutrino)

https://www.qnx.com/developers/docs/7.0.0/index.html#com.qnx.doc.neutrino.utilities/topic/p/pidin.html

https://blog.csdn.net/Benjenson/article/details/144611834

pidin
Display information about the processes in the system (QNX Neutrino)
Syntax:
pidin [-hklv] [-d delay] [-F formats] [-f formats] [-M formats][-n node] [-o prio] [-P pid] [-p pid] [shorthand ...]
Runs on:
QNX NeutrinoOptions:
-d delay
The delay, in tenths of a second, to use when looping with the -l option. The default is 10.
-F formats
A combination of format codes, like the format string for printf(). Each code consists of a percent sign (%), an optional width for the field, and a format character (e.g., "%I %60N"). For more information, see “Format characters,” below.
If you don't specify any format codes, the default is "%a %b %N %p %J %B".-f formats
The same as the -F option, but the formats parameter is a contiguous string of format codes that gets expanded. For example, -f mbe is expanded to -F "%m %b %e".
-h
Display a brief usage message.
-k
Keep displaying data for PIDs and TIDs until an error occurs, for example, encountering a PID/TID in an unknown state (because the PID/TID is partially alive).
-l
Loop mode; display statistics every delay tenths of a second (specified with the -d option).
-M formats
A combination of format characters, each following a percent sign (%), like the format string for printf(), that controls the formatting of information about memory regions. For more information, see “Memory format characters,” below.
-n node
The name of the remote node from which to get the information.
The -n option isn't compatible with the o format or the extsched and fds shorthands. Instead, you can use on -f; for example:
on -f remote_node pidin fds
-o prio
Run at prio priority.
-P pid
Show only the process family you're interested in (pid may be a name or number).
-p pid
Show only the process you're interested in (pid may be a name or number).
If the pid for the -P or -p option is a number, it's interpreted as a process ID; otherwise, it's interpreted as a name. To avoid confusion, don't assign a numerical name to a process.
-v
(QNX Neutrino 7.0 or later) Be verbose; provide additional information that depends on the format characters or shorthand, as described below.
shorthand
A name that represents a certain combination of format codes or a special command:
arguments
backtrace
channels
environment
extsched
family
fds
flags
info
irqs
libs
mapinfo
memory
net
pmem
rc
regs
rmasks
sched
session
signals
syspage
threads
timers
times
tolerance
ttimes
users
You need to type only as many characters of the name as are required to uniquely identify it. For more information, see “Shorthand forms,” below.用户可以通过 -F 或 -f 选项指定格式字符,例如:
A:显示参数。
a:显示进程 ID。
B:显示您被阻塞的内容,输出包括一个 Blocked 列,其值取决于线程的状态。
b:显示线程 ID。
C:显示进程的一个子进程的进程 ID。
c:显示进程的代码大小。
D:显示进程的调试标志。
d:显示进程的数据大小。
E:显示环境。
e:显示父进程 PID。
F:以十六进制显示线程的标志。
f:以十六进制显示进程的标志。
G:显示进程的一个兄弟进程的进程 ID。
H:显示每个线程的调度特定信息。
h:显示线程名称;如果线程没有名称,pidin 显示线程的 ID(tid)。
I:显示 PID 和 TID,用连字符连接。
i:显示运行掩码和继承掩码。
J:显示线程的状态。
j:显示一个十六进制数,其位表示哪些信号被阻塞。
K:显示执行的最后一个内核调用。
k:显示进程的能力。
L:显示会话 ID。
l:显示线程上次运行的 CPU。
M:显示 PID 拥有的内存。
m:显示线程的栈大小。
N:显示进程的短名称。
n:显示进程的长名称。
O:显示加载的共享库。
o:显示与进程相关的连接 ID 和文件描述符。
P:显示进程组。
p:显示线程优先级。
Q:显示中断处理程序。
q:显示调用例程的地址回溯。
R:显示计时器信息。
r:显示寄存器的值。
S:显示信号忽略掩码。
s:显示信号排队掩码。
T:显示线程数。
t:显示进程启动的时间。
U:显示进程的用户 ID(数字)。
u:显示在用户空间运行的纳秒数。
V:显示进程的组 ID(数字)。
v:显示在系统空间运行的纳秒数。
W:显示进程的有效用户 ID(数字)。
w:显示进程的已终止子进程在用户空间运行的纳秒数。
X:显示进程的有效组 ID(数字)。
x:显示进程的已终止子进程在系统空间运行的纳秒数。
Y:显示进程的设置用户 ID(数字)。
y:显示线程启动的时间。
Z:显示进程的设置组 ID(数字)。
z:显示线程在用户和系统空间运行的纳秒数。

在这里插入图片描述

tracelogger :Log tracing information into an event file

https://www.qnx.com/developers/docs/7.0.0/index.html#com.qnx.doc.neutrino.utilities/topic/t/tracelogger.html

原文翻译

属性和标识选项

  • -A attribute:添加属性到日志中
    • 格式:name=value
    • 禁用字符:::, TRACE_, =
    • 可多次使用以添加多个属性
    • 示例:-A MACHINE_NAME=tx86 -A PERIOD=1s

缓冲区管理选项

  • -b num:设置tracelogger中动态缓冲区的最大数量
    • 默认值:64
    • 每个缓冲区约11KB
  • -k num:设置内核中分配的缓冲区数量
    • 默认值:32
    • 每个缓冲区约16KB

运行模式选项

  • -c:连续模式运行(默认为迭代模式)
  • -d1:守护进程模式
    • 使tracelogger被动运行
    • 将跟踪控制权交给应用程序
  • -r:环形模式记录事件(不刷新缓冲区)
    • 默认为线性模式(填满的缓冲区立即刷新)

文件和输出选项

  • -f file:指定存储日志事件的文件名
    • 默认:/dev/shmem/tracebuffer.kev
    • 特殊值:- 表示输出到stdout
    • 支持FIFO特殊文件(通过mkfifo创建)
  • -M:直接映射日志文件而不是写入
    • 要求日志文件必须在共享内存中
    • 必须配合-S选项使用

时间和持续时间选项

  • -s num:指定记录持续时间(秒)
    • 默认值:0(无限制)
  • -D seconds:启用内核事件的周期性刷新
  • -n num_buffers:迭代模式下要填充的缓冲区数量
    • 默认值:32
    • 设置为0表示无限制迭代

事件类型和过滤选项

  • -a:(QNX Neutrino 7.0+)启用安全类事件
  • -E:启用事件(即使在守护进程模式下)
  • -w:记录宽事件(默认记录快速事件)
  • -F num:过滤特定类别的事件
    • 0:不设置任何过滤
    • 1:禁用内核调用类
    • 2:禁用中断类
    • 3:禁用进程类
    • 4:禁用线程类
    • 5:禁用虚拟线程类
    • 6:禁用通信类
    • 7:禁用系统类
    • 可使用多个-F选项,例如:-F2 -F5

内存管理选项

  • -P:在共享内存块中保留内核仪器化缓冲区
    • 退出时不释放内核缓冲区内存
  • -R:重用之前通过-P选项创建的内核仪器化缓冲区
  • -p addr:指定用于内核缓冲区的物理内存地址
  • -S size:设置日志文件的最大大小
    • 单位:M(兆字节)、K(千字节)、字节(默认)
    • 使用-M选项时必须指定

调试选项

  • -v[v…]:详细模式,更多的v字符表示更高的详细级别

运行模式详解

模式选项内核行为tracelogger行为
连续模式-c记录事件捕获事件并持续运行直到终止
守护进程模式-d1不记录事件*被动等待*
迭代模式(默认)-n记录事件捕获指定数量的缓冲区数据后终止
环形模式-r记录事件直到收到SIGINT信号或TraceEvent(_NTO_TRACE_STOP)调用才开始捕获事件**
基于时间-s记录事件在指定时间内捕获事件

*守护进程模式下,只有当应用程序调用TraceEvent(_NTO_TRACE_START)时记录才开始,直到调用TraceEvent(_NTO_TRACE_STOP)或终止tracelogger为止。

**环形模式终止跟踪时,tracelogger会停止记录事件,然后短暂重启并再次停止以捕获由_NTO_TRACE_START命令发出的状态信息。

使用示例

快速系统性能检查
# 记录10秒的系统活动,包含详细信息
tracelogger -s 10 -w -v -f /dev/shmem/system_check.kev
  • -s 10:记录10秒
  • -w:宽事件模式(更详细的信息)
  • -v:详细输出模式
  • -f:指定输出文件
应用程序启动分析
# 记录应用启动过程中的前20个缓冲区
tracelogger -n 20 -w -f /dev/shmem/app_startup.kev
实时系统监控
# 连续监控模式,输出到标准输出
tracelogger -c -f - -v
  • -c:连续模式
  • -f -:输出到stdout
特定事件类别分析
# 只关注进程和线程活动,过滤其他干扰
tracelogger -F1 -F2 -F6 -F7 -w -s 60 -f /dev/shmem/process_thread.kev
  • -F1:禁用内核调用类
  • -F2:禁用中断类
  • -F6:禁用通信类
  • -F7:禁用系统类
  • 只保留进程类(3)、线程类(4)、虚拟线程类(5)
6. 网络通信分析
# 专注于通信类事件
tracelogger -F1 -F2 -F3 -F4 -F5 -F7 -w -c -f /dev/shmem/network.kev

只保留通信类(6)事件,用于分析网络和IPC通信。

kev文件生成后,使用qnx ide查看

官网帮助文档
https://www.qnx.com/developers/docs/7.0.0/index.html#com.qnx.doc.ide.userguide/topic/exporting_sysprofiler_results.html

1.QNX导出tracelogger日志(.kev)到Win
2.Win打开QNX IDE,使用导入功能导入kev文件并完成解析

具体步骤

1.scp kev文件到跳板机
在这里插入图片描述

2.scp 跳板机拷贝到Win
3.Win打开QNX IDE,并完成kev解析

或者直接
scp -o ProxyJump=root@跳板机ip root@目标机ip:/tmp/test.kev ./

kev解析后会生成类似文件
在这里插入图片描述

http://www.xdnf.cn/news/1323253.html

相关文章:

  • IOPaint 远程修图:cpolar 内网穿透服务实现跨设备图片编辑
  • Less (CSS 预处理器)
  • 贪心算法(Greedy Algorithm)详解
  • html页面打水印效果
  • 跨平台RTSP播放器深度对比:开源方案与商业SDK的取舍之道
  • 无人机迫降模式技术要点解析
  • 【C语言16天强化训练】从基础入门到进阶:Day 2
  • 基于ssm jsp中学校园网站源码和答辩PPT论文
  • 深入解析StatefulSet与K8s服务管理
  • 解锁 JavaScript 高级技能:从基础到实战的进阶指南
  • 【案例】ECharts 环形图中心下移后,如何保持中间图片和文案居中
  • 20250818在荣品的PRO-RK3566开发板跑Buildroot的时候使用在线秒表https://tool.hiofd.com/stopwatch/
  • 决策树:机器学习中的强大工具
  • 机器学习(决策树)
  • VLN视觉语言导航(3)——神经网络的构建和优化 2.3
  • 理解AQS的原理并学习源码
  • 大厂 | 华为半导体业务部2026届秋招启动
  • Spark 运行流程核心组件(三)任务执行
  • 【lucene】tip文件详解
  • 08.常见文本处理工具
  • 基于Spring Boot+Vue的社区便民服务平台 智慧社区平台 志愿者服务管理
  • 咨询进阶——解读咨询顾问技能模型
  • QT 字节大小端转序方法
  • axure chrome 浏览器插件的使用
  • kafka的pull的依据
  • 关系型数据库与非关系型数据库
  • 冒泡排序——简单理解和使用
  • 嵌入式第三十一天(线程间的机制,IPC机制)
  • JAVA经典面试题:数据库调优
  • rust 从入门到精通之变量和常量