|
|
#!/bin/bash
# 权限检查
[ "$(id -u)" -ne 0 ] && { echo "错误:需要 root 权限运行" >&2; exit 1; }
# 启动和停止服务
start oiface
stop gameopt_hal_service-1-0
start vendor.urcc-hal-aidl
pm install-existing --user 0 com.oplus.cosa
pm enable com.oplus.cosa
# 设置 CPU 频率
xs() { chmod 666 $2; echo $1 > $2; chmod 444 $2; echo $2 $1; }
xs 2600000 /sys/devices/system/cpu/cpu7/cpufreq/scaling_max_freq
xs 2600000 /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
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=(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")
# 主循环,持续监控进程
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}')
if [ -n "$CURRENT_PID" ]; then
# 跳过 system_server 的进程
if [[ "$CMDLINE" == *"system_server"* ]]; then
echo "跳过 system_server 进程:PID=$CURRENT_PID"
sleep 1
continue
fi
# 检查是否已经记录过该 PID 的线程 ID
if [ -z "${PID_TID_MAP[$CURRENT_PID]}" ]; then
# 如果未记录,查找并记录 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}')
PID_TID_MAP[$CURRENT_PID]=$FIRST_TID
echo "记录新的 PID:$CURRENT_PID,线程 ID:$FIRST_TID"
else
FIRST_TID=${PID_TID_MAP[$CURRENT_PID]}
echo "使用已记录的 PID:$CURRENT_PID,线程 ID:$FIRST_TID"
fi
# 为记录的线程分配 CPU 核心
taskset -p $HIGH_MASK_CPU $FIRST_TID
# 设置该线程的实时调度优先级
chrt -r -p $FIRST_TID 1
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
fi
sleep 0.25
done
保存到一个核心.sh里面
下面这段用于启动
sh 放点我执行下面(8e版).sh &
保存到一个启动核心.sh里面
通过启动核心.sh启动 |
|