RK性能调整¶
- 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