|
|
# 启动和停止服务
setprop persist.sys.oiface.enable 0
start oiface
start gameopt_hal_service-1-0
start vendor.urcc-hal-aidl
# 设置 CPU 频率
xs() { chmod 666 $2; echo $1 > $2; chmod 444 $2; echo $2 $1; }
xs 2800000 /sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq
xs 2800000 /sys/devices/system/cpu/cpu7/cpufreq/scaling_min_freq
for file in /sys/devices/system/cpu/cpu*/core_ctl/enable; do
xs 0 $file
done
#!/bin/bash
#HIGH_CORES=()可配置,括号里填核心编号
# 高优先级核心编号
HIGH_CORES=(6 7)
HIGH_MASK=0
# 计算 HIGH_MASK
for CORE in "${HIGH_CORES[@]}"; do
HIGH_MASK=$((HIGH_MASK | (1 << CORE)))
done
# 转换为十六进制格式
HIGH_MASK_CPU=$(printf "%x" "$HIGH_MASK")
#ALL_CORES=()可配置,括号里填核心编号
ALL_CORES=(0 1 2 3 4 5 6 7) # 全部核心编号
ALL_MASK=0
# 计算 ALL_MASK
for CORE in "${ALL_CORES[@]}"; do
ALL_MASK=$((ALL_MASK | (1 << CORE)))
done
# 转换为十六进制格式
ALL_MASK_CPU=$(printf "%x" "$ALL_MASK")
# 已处理的PID集合
PROCESSED_PIDS=()
# 主循环,持续监控进程
while true; do
# 获取当前前台应用的 PID
CURRENT_PID=$(ps -eo res,pid,cmdline --sort=+res | tail -n 1 | awk '{print $2}')
CMDLINE=$(ps -eo res,pid,cmdline --sort=+res | tail -n 1 | awk '{print $3}')
# 如果没有获取到PID,跳过本次循环
if [ -z "$CURRENT_PID" ]; then
sleep 0.2
continue
fi
# 跳过 system_server 的进程
if [[ "$CMDLINE" == *"system_server"* ]]; then
echo "跳过 system_server 进程:PID=$CURRENT_PID"
sleep 1
continue
fi
# 如果已经处理过该PID,跳过本次循环
if [[ " ${PROCESSED_PIDS[@]} " =~ " ${CURRENT_PID} " ]]; then
echo "跳过已处理的PID:$CURRENT_PID"
sleep 0.2
continue
fi
# 如果未记录,查找并记录 CPU 占用最高的线程的 tid
cpu_usage=$(ps -T -p $CURRENT_PID -o pid,tid,%cpu | awk 'NR > 1')
FIRST_TID=$(echo "$cpu_usage" | sort -k3nr | awk 'NR==1 {print $2}')
echo "处理新的 PID:$CURRENT_PID,线程 ID:$FIRST_TID"
# 为记录的线程分配 CPU 核心
taskset -p $HIGH_MASK_CPU $FIRST_TID
# 设置该线程的实时调度优先级
chrt -f -p $FIRST_TID 85
echo "$FIRST_TID taskset $HIGH_MASK_CPU $FIRST_TID chrt"
sleep 1
# 为其余线程分配 CPU 核心 0-7
for TID in $(ps -T -p $CURRENT_PID -o tid=); do
if [ "$TID" != "$FIRST_TID" ]; then
taskset -p $ALL_MASK_CPU $TID
echo "$TID taskset $ALL_MASK_CPU"
fi
done
# 将当前PID加入已处理的PID集合
PROCESSED_PIDS+=("$CURRENT_PID")
sleep 0.2
done
|
|