C++ 获取 CPU 信息与绑核
获取线程ID
1 | uint64_t getThreadId(void) |
获取 CPU 核数
C++ 11
1 |
|
sysconf
适用于 android、iOS、macOS(>= 10.4,Tiger)平台。
1 |
|
Android 源码中,sysconf 最终会调用到 get_nprocs()/get_nprocs_conf(), 读取系统目录 sys/devices/system/cpu 下的文件,进行统计返回。
- _SC_NPROCESSORS_CONF ==> get_nprocs_conf() ==> 读取系统目录sys/devices/system/cpu下的文件,并匹配 cpu? 形式的目录来统计数目 ==> 返回系统CPU核心数
- _SC_NPROCESSORS_ONLN ==> get_nprocs() ==> 读取系统文件/sys/devices/system/cpu/online的值 ==> 获取当前系统可用的CPU核心数
sysctl
适用于 iOS、macOS。
1 |
|
Win32
1 | SYSTEM_INFO sysinfo; |
ObjectiveC
1 |
|
获取运行当前线程的 CPU 核
syscall
适用于 android 平台。
1 |
|
设置亲和性(绑核)
1 |
|
- sched_setaffinity 即可以设置进程绑核,也可以对线程进行绑核。Android 平台需要通过 syscall 间接调用,直接调用 sched_setaffinity 无效。
- thread_policy_set/thread_policy_set 在 iphone 真机(arm)验证,返回 KERN_NOT_SUPPORTED。在模拟器(x86)验证,调用成功。
工具
Systrace(Android)
命令行方式
Android SDK 中提供了 systrace 命令,用于跟踪系统的 I/O 操作、内核工作队列、CPU 负载以及 Android 各个子系统的运行状况等。命令路径在 android-sdk/platform-tools/systrace 文件夹下。
1 | 进入到 SDK/platform-tools/systrace 目录 |
常用的 options:
options | 描述 |
---|---|
-h | 帮助 |
-l | 列举可用的tags,也可以使用命令: adb shell atrace –list |
-o < FILE > | 输出的目标文件,默认当前目录 |
-t < TIME > | 执行时间,默认5s |
-a < APP_NAME > | 追踪应用包名,用逗号进行分隔 |
-e < DEVICE_SERIAL > | 指定设备 |
抓取到的 my_systrace.html 需要使用 chrome 浏览器打开。
首次执行时,可能遇到 Python 执行错误:No module named xxx(如 win32con、six 等)。此时,执行 pip install xxx 即可。
图形操作
在 Android 9(API 级别 28)或更高版本的设备上,还可以使用“系统跟踪”系统应用生成 Systrace 报告,然后在 Perfetto 界面 中打开。使用步骤:
- 启用开发者选项。在调试部分,进入 System Tracing(系统跟踪)菜单,打开 Show Quick Settings tile(显示快捷设置图标)选项。
- 通过系统快捷设置,开启录制。
- 运行 app 逻辑。
- 通过系统快捷设置,关闭录制。(一般会缓存最近的 10-30 秒事件)
- 通过分享或者 adb 命令行方式获取录制的 Perfetto 文件 .perfetto-trace(老版本为 Systrace 文件 .ctrace)。
- 使用 Perfetto 打开 trace 文件并进行分析。(对于 Perfetto 文件,使用 Open trace file。对于 Systrace 文件,使用 Open with legacy UI)
1 | adb 获取录制的 trace 文件 |
Perfetto 要用 最新版本的 chrome 浏览器。
System Trace(iOS)
Snapdragon profiler(Android)
对于使用高通骁龙芯片的安卓手机(Android 5.0以上)可以使用 Snapdragon profiler (简称 sdp)进行系统跟踪。此工具可以进行截帧分析,捕获CPU、GPU、DSP、内存、功率、网络连接和设备运行时的发热数据等等。
sdp 既可以通过 UI 运行,也可以在命令行中运行。如果遇到异常问题(闪退、无响应等),可以在 console 日志中找到原因。
sdp 支持以下三种分析方式:
- 实时性能数据(RealTime)
- 时间线抓取分析(Trace Capture)
- 抓帧分析(Snapshot Capture)
Snapdragon profiler 依赖 adb,macOS 上需要安装 mono。
参考文献
https://developer.android.com/ndk/guides/cpu-features
https://www.cnblogs.com/roger-yu/p/15233874.html
https://mlog.club/article/1863514
https://developer.android.com/topic/performance/tracing/command-line?hl=zh-cn
https://developer.qualcomm.com/software/snapdragon-profiler
https://www.jianshu.com/p/ab22238a9ab1