绑定cpu核失效问题分析

问题描述:

刚开始设置的cpu亲和度是0x10 也就是cpu4上。log发现过了200ms cpu亲和度变成了0xFF

知识点:

CPU 亲和度是指操作系统调度程序将特定进程或线程分配给特定 CPU 核心的能力。这种调度策略旨在优化性能和资源利用率,通过将特定任务分配给特定的 CPU 核心,以最大程度地减少 CPU 缓存的切换和通信开销,从而提高系统整体性能。
CPU 亲和度可以以不同的方式实现:
1.硬亲和度(Hard Affinity)
:在硬亲和度调度中,操作系统严格遵循将特定进程或线程绑定到特定 CPU 核心的规则。这意味着操作系统将任务限制在特定的 CPU 上执行,不会在不同的 CPU 之间进行迁移。硬亲和度通常通过特定的系统调用或 API 来实现。
2.软亲和度(Soft Affinity)
:在软亲和度调度中,操作系统给出了一个建议,但并不强制要求将特定任务绑定到特定的 CPU 核心。操作系统可能会尽力将任务调度到建议的 CPU 上执行,但仍然有可能在不同的 CPU 之间进行迁移,特别是在负载均衡或性能优化的情况下。
CPU 亲和度的应用场景包括需要最大化单个任务的性能、减少缓存失效、降低线程通信开销等。然而,过度使用 CPU 亲和度可能会导致系统不平衡,使得某些 CPU 核心负载过重,而其他核心处于空闲状态。因此,在实际应用中需要权衡考虑,并根据特定的需求和系统特征来选择适当的调度策略。

问题分析:

猜测cpu可能中途掉线了被重新分配,对应的log如下process %d (%s) no longer affine to cpu
对应的kernel代码如下
kernel/msm-4.19/kernel/sched/core.c

static int select_fallback_rq(int cpu, struct task_struct *p, bool allow_iso)
{

/*
         * Don't tell them about moving exiting tasks or
         * kernel threads (both mm NULL), since they never
         * leave kernel.
         */
        if (p->mm && printk_ratelimit()) {
            printk_deferred("process %d (%s) no longer affine to cpu%d\n",
                    task_pid_nr(p), p->comm, cpu);
        }
 }

修改策略:

1、修改绑定的cpu策略,不绑定单独的核数 防止掉线
2、修改cpu簇最小在线数量为cpu数量

查看cpu在线数的
adb shell cat /sys/devices/system/cpu/cpu*/online
查看最小
adb shell “cat /sys/devices/system/cpu/cpu*/core_ctl/min_cpus”
查看最大
“/sys/devices/system/cpu/cpu*/core_ctl/max_cpus”
设置cpu在线
echo 0 > sys/devices/system/cpu/cpu4/online
echo 1 > sys/devices/system/cpu/cpu4/online

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值