返回列表 发新帖

8e核心线程.sh

[复制链接]

124

主题

1391

回帖

5741

积分

硕士生

Rank: 6Rank: 6

金币
2753
好评
11
信誉
98
QQ
发表于 2025-3-23 17:18:03 来自手机  | 显示全部楼层 | 阅读模式  来自 广西
# 启动和停止服务
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
回复

使用道具 举报

93

主题

6097

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1276
好评
6
信誉
106
发表于 2025-3-23 18:21:37 来自手机  | 显示全部楼层  来自 福建
支持一下,虽然没看懂怎么用
回复

使用道具 举报

0

主题

2575

回帖

5615

积分

硕士生

Rank: 6Rank: 6

金币
2994
好评
1
信誉
100
发表于 2025-3-23 22:47:36 来自手机  | 显示全部楼层  来自 山东
小白有理解门槛
回复

使用道具 举报

12

主题

5247

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
1594
好评
16
信誉
578

考神MT论坛帅哥MT论坛新人MT论坛最佳新人MT论坛活跃会员

发表于 2025-3-24 18:21:49 来自手机  | 显示全部楼层  来自 广东
感谢分享哦
回复

使用道具 举报

13

主题

7594

回帖

1万

积分

博士生

导师

Rank: 7Rank: 7Rank: 7

金币
3874
好评
0
信誉
100

考神

发表于 2025-5-6 04:13:04 | 显示全部楼层  来自 河北
楼主辛苦,支持!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表