首页 > 其他分享 >QNX 性能分析工具

QNX 性能分析工具

时间:2023-11-18 09:22:05浏览次数:32  
标签:性能 QNX idle 线程 0% 进程 0k 工具 com

QNX 性能分析工具

小结

  • hogs:列出最占用 CPU/RAM 的进程,可以统计内存占用详细情况【可单个进程】
  • pidin:显示进程信息、系统信息、库信息...【可单个进程】
  • ps:显示进程信息【可单个进程】
  • top:多核平均占用,不能针对单个进程?
  • ttop:和 top 类似,显示更多线程,单核占用率
  • tracelogger:记录内核事件,保存到 kev 文件,可以用 QNX Momentics 分析各个线程的活动情况

hogs

列出占用 CPU 的进程

参数

-m [e][t][p][s] 统计 ELF/STACK/SHARED/PRIVATE(默认) 内存映射,例如可以用 `-msp` 参数统计 shared 和 private 映射之和
-S [c|m|p] 按照 CPU(默认)、内存、PID 排序
-% <num> [c|m] 只显示 CPU(默认)或内存占用超过 num% 的进程
---TLDR---
-i <iter> 打印 iter 次
-s <sec> 刷新间隔,默认 3

例子

# 显示进程 39379114 及各个核的占用情况,每 1s 刷新一次
hogs -s 1 39379114

# 统计 shared 和 private 内存映射,并按内存占用排序
hogs -msp -Sm

#  显示 CPU 占用超过 10% 的进程
hogs -% 10c

输出列

MSEC: 自上次结果以来,该进程运行的 ms 数
PIDS: 本次迭代中,进程运行时间的占所有其他进程运行时间的百分比
SYS: 本次迭代中,进程运行时间的占迭代时间的百分比
MEMORY: 进程内存用量,取决于 -m 参数
      PID           NAME  MSEC PIDS  SYS       MEMORY
 39379107     MyProcess1   554   1%  18%  17288k   0%
 39358626     MyProcess2   779   2%  25%   7808k   0%
 39379114     MyProcess3   788   2%  26%  15960k   0%
        0         [idle]  2409   6%  80%      0k   0%
        1         [idle]  2976   8%  99%      0k   0%
        2         [idle]  2942   8%  98%      0k   0%
        3         [idle]  3003   8% 100%      0k   0%
        4         [idle]  2993   8%  99%      0k   0%
        5         [idle]  3007   8% 100%      0k   0%
        6         [idle]  3021   8% 100%      0k   0%
        7         [idle]  3013   8% 100%      0k   0%
        8         [idle]  1795   4%  59%      0k   0%
        9         [idle]   974   2%  32%      0k   0%
       10         [idle]  1043   2%  34%      0k   0%
       11         [idle]  3023   8% 100%      0k   0%

pidin

显示进程信息,功能非常强大

参数

-F "%a %b %N %p %J %B"
-fabNpJB 和 -F 类似,简化版
-p prio 以 prio 优先级运行
-P <pid> pid 可以是进程名或 PID

例子

# 显示 MyProcess 进程的 pid、tid、线程名及完整路径
pidin -fabhn -P MyProcess

# 显示系统信息(CPU、内存、进程、线程)
pidin info

# 显示 MyProcess 进程库信息
pidin -P MyProcess libs

ps

无参数:默认列:PID TTY TIME CMD
-a 打印和当前终端关联的进程信息
-A or -e 打印所有进程信息
-f 完整列,增加 UID PPID C STIME
-l 更详细的列

UID PID PPID C STIME TTY TIME CMD
用户 ID 进程 ID 父进程 ID 启动时间 ??累积 CPU 时间 完整命令

ps 不显示僵尸进程,如果要查看僵尸进程,可以用 pidin

top

参数

-t 显示线程名
-z <num> 显示资源消耗最高的 num 个线程
--- TLDR ---
-b batch mode,用于后台,不响应“交互”按键,但是可以响应 Ctrl+C
-d 不刷新屏幕,而是持续输出?
-i <number> 刷新 number 次后自动结束
-n <node> 在远程 node 上运行 top
-p <priority> 以指定优先级运行

例子

# 显示线程名、显示资源消耗最高的 40 个线程
top -tz 40 | grep MyProcess

交互

可以进入 top 界面之后,按键交互。如果 top 带了 -b 参数则无法响应以下按键

? 或 h 显示帮助
d 屏幕刷新间隔,默认 5s
l 立即刷新
k 杀进程
n 显示的线程数,5~40,默认 10
q 退出 top

ttop

Thread Monitor

参数

-p 采样周期,单位 us,默认 1s(1000000)
-r 刷新时间,单位 s,默认 3s
-d 运行总时长,单位 s,默认 10s
-l 在实时输出中,显示多少个线程,默认 20

例子

尽可能多地显示进程 36434092 的所有线程信息

./ttop -l 200 | grep 36434092

注:ttop 显示的 CPU 占用率是相对一个核的,而 top 显示的 CPU 占用是平摊到所有核的

tracelogger

从 instrumented 内核接收事件,保存到文件(默认 /dev/shmem/tracebuffer.kev,kev:kernel events)。然后可以在 Momentics 中分析。
在 Momentics 的 QNX System Profile 的 Perspective,Timeline 面板可以看到各个线程活动情况(nanosleep/running/condvar/receive...)

注:必须以 root 运行,必须是 instrumented 版本的 procnto(如 procnto*-instr),QNX Neutrino 7.0 之后只提供 instrumented

Reference

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.ide.userguide/topic/analyze_performance.html

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.ide.userguide/topic/appprofiler_purpose.html
https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.ide.userguide/topic/appprofiler_tool.html
https://www.qnx.com/developers/docs/7.0.0/index.html#com.qnx.doc.neutrino.user_guide/topic/fine_tuning.html

QNX 性能分析

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.ide.userguide/topic/analyze_performance.html

Momentics 支持 Application Profiler 和 Valgrind-cachegrind

可以

  • 监控性能:
  • !profile 程序:可以分析函数调用情况及各个函数花费时间!!
  • 调查性能瓶颈:测量应用的缓存不命中、堆内存使用、如何和其他进程交互

可以导出性能分析数据,

profile 应用

需要从 IDE 启动,也可以 attach。

采样、函数调用计数

从 IDE 启动的都会固定周期报告 执行位置
相比测量函数 runtimes 开销更小,但不准确:两次采样间隔中间函数可能执行了很多次。也不能用于 timer-synchronized programs

必须统计足够长的时间才能更准确
必须在编译和链接时,加上 -p 参数

从命令行 profile(有很多限制!)
增加编译选项,拷到板子,设置 PROFDIR 环境变量,运行 binary。
注意:app 必须正常退出才能得到 gmon.out 文件。可以在收到信号时,调 exit()
限制:

  • 看不到各个线程!
  • 动态库结果没有!
  • 必需以 root 运行,否则没有 sampling info

测量函数运行时间

进入、退出函数时,报告时间戳。相比采样执行位置,开销更大。用于多线程可能会改变时序、行为。
编译选项:-finstrument-functions
链接选项:-lprofilingS

有些情况只能离线 profile,导出文件、导入 IDE

  • host 和 target 不在一个网络
  • target 上没有 qconn 服务

性能瓶颈分析

之前的profile结果告诉你那个函数时间长,接下来需要进一步分析为什么函数慢

常见的导致性能问题的原因:

  • 大量的堆使用。分配、释放堆空间,可以看 heap usage
  • 受其他进程影响:可以查看内核 event trace,看是否有 饥饿、优先级反转等问题
  • 缓存不命中:Valgrind Cachegrind

Momentics + Valgrind

可以分析

  • Memcheck:内存泄漏
  • Massif:堆内存使用
  • Helgrind:线程同步问题
  • Cachegrind:缓存使用

标签:性能,QNX,idle,线程,0%,进程,0k,工具,com
From: https://www.cnblogs.com/tengzijian/p/17754730.html

相关文章

  • 正则表达式工具:强大且高效的模式匹配利器
    https://www.cnblogs.com/Amd794/p/17813641.htmlhttps://amd794.com/regularGraph正则表达式,或称为regex,是一种强大的文本处理工具,它以特定的字符串模式匹配为基础,并有能力进行复杂的搜索、编辑和操作。尽管其语法可能初看起来复杂,但掌握正则表达式将使您能够以高效且准确的方......
  • 关于电商应用性能指标 DTU 的评估
    DTU全称DatabaseTransactionUnit,是一种用于评估和衡量云数据库性能的指标。它最常用于关系型数据库管理系统(RDBMS),特别是在云计算环境中,如MicrosoftAzureSQLDatabase和AmazonRDS等。DTU是一个关键的性能度量标准,帮助开发者和数据库管理员了解其数据库实例的性能状况,以便更......
  • 抖音快手小红书贴吧cookie上号登录工具,可对接私信评论!谷歌浏览器内核开发
    这个源码是用精易VIP模块开发的,优点:由C++开发,专为易语言深度定制,自动化测试框架,纯C++开发,为易语言进行针对性优化,并且结合易语言人群的编程习惯,采用更人性化的命名规范,执行效率更高,使得操作更简单,稳定性更强。所以它是直接调用谷歌谷歌浏览器内核的,只要你的账号支持在谷歌浏览器......
  • 小程序性能如虎添翼!选对框架事半功倍!
    引言:嘿,小程序大侠们!是不是有时候觉得小程序的加载速度慢得像是在看蜗牛爬行?别怕,今天我们要聊的是“使用适当的小程序框架”——就像是给小程序穿上了“轻便战甲”,让你的小程序速度飞起来!在这次的“战甲之旅”中,我们将告诉你如何选对小程序框架,轻松事半功倍地进行性能优化,让你的小......
  • DOORS和Reqtify—需求管理和需求追溯工具
    产品概述    IBMRationalDOORS可实现对整个产品的全生命周期需求管理,覆盖从需求、到设计以及测试阶段,是一款被广泛使用的企业级专业需求管理工具。DOORS可以将项目开发过程中产生的各级需求和与需求相关的文件、网址URL进行链接管理,同时能够对需求进行影响分析。DOORS自......
  • 【MAT】内存分析工具
    MAT下载Linux版本:链接:https://pan.baidu.com/s/1jdYASRmM01zFgh_wxmdEWA?pwd=6aww提取码:6awwMAC版本:链接:https://pan.baidu.com/s/1Dzi0frJ0oNessPfbmy-tmw?pwd=q8rm提取码:q8rm(之前下载的时候,eclipse老是打不开,挺累的。)......
  • 使用reposync工具将yum安装包保存到本地的方法
    使用reposync工具将yum安装包保存到本地的方法版权声明:原创作品,谢绝转载!否则将追究法律责任。—————作者:kirin1、修改yum配置#修改配置文件[root@kirin365data]#vim/etc/yum.confcachedir=/usr/local/cache#包保存的路径keepcache=1#1为保存0为不保存2、reposy......
  • 重写Java中Arrays数组工具类提供的sort()排序函数中的比较器类Comparator的compare()
    排序方法是我们日常开发或者写功能函数,或者实现算法时,常调用的方法。有时甚至,开发人员自己还要写一写排序算法。今天,我们来修改Java官方提供的Arrays工具类中的静态排序sort()方法。反问一下,为什么要重写呢?官方提供的还不够你用?回答:确实不够用,官方默认是对数字,特别是sort比较的......
  • 拼多多商家私信群发脚本,按键精灵版工具,源码分享
    也是用按键精灵写的,实现的功能就是通过图色识别拼多多商品列表然后逐个对商家客服进行私信,私信内容可以在脚本里面提前配置好,代码怎么部署?回答:粘贴到你的按键精灵就行了,因为代码完全开源。UI界面:  脚本代码:=============================================='创建布局名称......
  • 抖音导入ID,UID自动关注脚本,按键精灵开源版工具
    这个源码是按键精灵开发的,前几天刚给客户定制的,这边直接分享出来,你可以自己打开按键精安卓端的,然后把我分享的代码一键粘贴过去就能用。UI界面:  按键精灵完整代码:【手机】==================================================='创建布局名称Dim布局名称,点击坐标,话术,......