QNX 性能分析工具

QNX 性能分析工具

QNX 性能分析工具

小结

hogs:列出最占用 CPU/RAM 的进程,可以统计内存占用详细情况【可单个进程】

pidin:显示进程信息、系统信息、库信息...【可单个进程】

ps:显示进程信息【可单个进程】

top:多核平均占用,不能针对单个进程?

ttop:和 top 类似,显示更多线程,单核占用率

tracelogger:记录内核事件,保存到 kev 文件,可以用 QNX Momentics 分析各个线程的活动情况

Momentics Profiler/Valgrind

hogs

列出占用 CPU 的进程

参数

-m [e][t][p][s] 统计 ELF/STACK/SHARED/PRIVATE(默认) 内存映射,例如可以用 `-msp` 参数统计 shared 和 private 映射之和

-S [c|m|p] 按照 CPU(默认)、内存、PID 排序

-% [c|m] 只显示 CPU(默认)或内存占用超过 num% 的进程

---TLDR---

-i 打印 iter 次

-s 刷新间隔,默认 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

例子

# 显示 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 个线程

--- TLDR ---

-b batch mode,用于后台,不响应“交互”按键,但是可以响应 Ctrl+C

-d 不刷新屏幕,而是持续输出?

-i 刷新 number 次后自动结束

-n 在远程 node 上运行 top

-p 以指定优先级运行

例子

# 显示线程名、显示资源消耗最高的 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

Momentics + Application Profiler/Valgrind-cachegrind

可以

监控性能

Profile 程序:可以分析函数调用情况及各个函数花费时间

调查性能瓶颈:测量应用的缓存不命中、堆内存使用、如何和其他进程交互

可以导出性能分析数据。

profile 应用

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

采样、函数调用计数

相比测量函数 runtimes 开销更小,但不准确:两次采样间隔中间函数可能执行了很多次。也不能用于 timer-synchronized programs。

必须统计足够长的时间才能更准确

必须在编译和链接时,加上 -p 参数

从 IDE 启动

会自动以固定周期报告执行位置

从命令行离线 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:缓存使用

Reference

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

相关推荐

民用机场专用设备标准现状及电动地面设备现状分析
关于我手贱误删了电脑自带的相机……
365bet提款要求

关于我手贱误删了电脑自带的相机……

📅 07-24 👁️ 1525
分销和一件代发哪个好?两者有什么区别?
365bet官方网站是多少

分销和一件代发哪个好?两者有什么区别?

📅 11-03 👁️ 3800