- cpu信息
1) 搭载八核(Cortex-A76 x 4 + Cortex-A55 x 4)64位 CPU,主频高达2.4 GHz。
2) cat /proc/cpuinfo
CPU part: 0xd05 代表 Cortex-A55 小核心
CPU part: 0xd0b 代表 Cortex-A76 大核心
小核(A55)的CPU variant是0x2
大核(A76)的CPU variant是0x4
3) lscpu
4) 查看cpu频率:cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
5)查看cpu最大频率:cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq
6)查看cpu拓扑结构:cat /sys/devices/system/cpu/cpu*/topology/physical_package_id
每个物理 CPU 封装都有一个唯一的 ID
相同的 physical_package_id 表示这些逻辑 CPU 核心属于同一个物理 CPU 封装
7)查看cpu频率当前策略
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance:始终保持最高频率
powersave:始终保持最低频率
ondemand:根据负载动态调节
interactive:交互式动态调节
conservative类似ondemand,但频率调节更保守
userspace允许用户空间程序直接控制CPU频率,可以通过编程方式精确控制
schedutil与Linux调度器深度集成的调频策略,根据调度器信息来调节频率,是较新的调频策略,效率较高
8)查看cpu频率支持的策略
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
9)设置新策略(需要root权限)
echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
echo performance | tee $(find /sys/ -name *governor)
- DDR信息
1) 查看ddr频率
cat /sys/class/devfreq/dmc/cur_freq(单位hz)
2)查看ddr可行频率
cat /sys/class/devfreq/dmc/available_frequencies
3)设置ddr频率
echo userspace > /sys/class/devfreq/dmc/governor
echo 2112000000 > /sys/class/devfreq/dmc/userspace/set_freq
- CPU亲和性
1)查看
taskset -c -p pid
2) 设置
设置进程的 CPU 亲和性(限制只能在 CPU0 上运行)
taskset -c -p 0 pid
设置进程在多个 CPU 上运行
taskset -c -p 0,1,2 pid
// c++设置cpu亲和性
#include <sched.h>
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(4, &cpuset);
int ret = sched_setaffinity(0, sizeof(cpuset), &cpuset);
if (ret == -1)
{
LOG(ERROR) << "Failed to set CPU affinity: " << strerror(errno);
}
cpu_set_t get_cpuset;
CPU_ZERO(&get_cpuset);
if (sched_getaffinity(0, sizeof(get_cpuset), &get_cpuset) == -1) {
LOG(ERROR) << "Failed to get CPU affinity: " << strerror(errno);
} else {
for (int i = 0; i < CPU_SETSIZE; i++) {
if (CPU_ISSET(i, &get_cpuset)) {
LOG(INFO) << "Thread running on CPU " << i;
}
}
}
# python设置cpu亲和性
import os
import psutil
cpuset = {6, 7}
try:
p = psutil.Process(os.getpid())
p.cpu_affinity(cpuset)
except Exception as e:
print(f"Failed to set CPU affinity: {e}")
- 查看进程状态
watch -n 1 "ps -mo pid,tid,psr,pcpu,comm -p pid"(psr为cpu号)
htop -p pid
watch -n 1 "ps -mo pid,tid,psr,pcpu,comm -C mas"
htop -p $(pgrep name)
其它:
ls -l /proc/<pid>/task/
cat /proc/pid/stat | cut -d' ' -f39
pidstat -p pid -t 1
pstack <pid>
进程状态:
R (Running)进程正在运行中或在运行队列中等待运行
S (Sleep)可中断的睡眠状态,进程正在等待某个事件完成(如等待 I/O 操作)
D (Disk Sleep)不可中断的睡眠状态,通常是在进行 I/O 操作,此时进程不响应任何信号
Z (Zombie)僵尸进程,进程已经终止,但父进程还没有回收它的资源
T (Stopped)进程被停止,可能是被调试器暂停或收到 SIGSTOP 信号
I (Idle)空闲状态的内核线程
X (Dead)死亡状态,进程即将被销毁
// 获取线程id和库线程id
#include <sys/syscall.h>
#include <unistd.h>
// 获取系统级线程ID (在整个系统中唯一)
pid_t tid = syscall(SYS_gettid);
// 获取 pthread 库的线程ID (仅在进程内唯一)
pthread_t ptid = pthread_self();
LOG(INFO) << "============================Thread ID: " << tid << " pthread_id: " << ptid;
- 性能
#!/system/bin/sh
echo 1 > /sys/devices/system/cpu/cpu0/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu1/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu2/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu3/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu4/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu5/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu6/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu7/cpuidle/state1/disable
echo "NPU available frequencies:"
cat /sys/class/devfreq/fdab0000.npu/available_frequencies
echo "Fix NPU max frequency:"
echo userspace > /sys/class/devfreq/fdab0000.npu/governor
echo 1000000000 > /sys/class/devfreq/fdab0000.npu/userspace/set_freq
cat /sys/class/devfreq/fdab0000.npu/cur_freq
echo "CPU available frequencies:"
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies
cat /sys/devices/system/cpu/cpufreq/policy4/scaling_available_frequencies
cat /sys/devices/system/cpu/cpufreq/policy6/scaling_available_frequencies
echo "Fix CPU max frequency:"
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
echo 1800000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspeed
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq
echo userspace > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor
echo 2352000 > /sys/devices/system/cpu/cpufreq/policy4/scaling_setspeed
cat /sys/devices/system/cpu/cpufreq/policy4/scaling_cur_freq
echo userspace > /sys/devices/system/cpu/cpufreq/policy6/scaling_governor
echo 2352000 > /sys/devices/system/cpu/cpufreq/policy6/scaling_setspeed
cat /sys/devices/system/cpu/cpufreq/policy6/scaling_cur_freq
echo "GPU available frequencies:"
cat /sys/class/devfreq/fb000000.gpu/available_frequencies
echo "Fix GPU max frequency:"
echo userspace > /sys/class/devfreq/fb000000.gpu/governor
echo 1000000000 > /sys/class/devfreq/fb000000.gpu/userspace/set_freq
cat /sys/class/devfreq/fb000000.gpu/cur_freq
echo "DDR available frequencies:"
cat /sys/class/devfreq/dmc/available_frequencies
echo "Fix DDR max frequency:"
echo userspace > /sys/class/devfreq/dmc/governor
echo 2112000000 > /sys/class/devfreq/dmc/userspace/set_freq
cat /sys/class/devfreq/dmc/cur_freq