CPU负载和CPU利用率浅析

本文详细解释了CPU利用率和负载的概念及其计算方式,并探讨了如何通过top命令来查看Linux系统的CPU使用情况。此外,还提供了关于多核处理器的系统负荷评估准则及最佳观察时长的建议。

CPU利用率是指CPU工作时间占总时间的比重,公式如下:

     Utilization= work_time/total_time,

     其中,total_time=work_time+idle_ime. 可见,总时间由一段连续时间内的CPU工作时间长度和CPU空闲时间长度组成。

举个简单例子,在单处理器中,线程1,先工作10ms,线程2再工作30ms,之后CPU空闲60ms。则此100ms时间段内,CPU的利用率就是40%,


CPU平均负载(load average)是指某段时间内占用cpu时间的进程和等待cpu时间的进程数,这里等待cpu时间的进程是指等待被唤醒的进程,不包括处于wait状态进程。


在Linux中,可通过top命令查看系统负载情况,如下:

root@B-OPS-9-3:~# top
top - 15:42:46 up 22 days, 21:54,  2 users,  load average: 8.01, 5.70, 5.22
Tasks: 903 total,   1 running, 893 sleeping,   9 stopped,   0 zombie
%Cpu(s):  9.0 us,  3.9 sy,  0.0 ni, 87.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  13199470+total, 12066608+used, 11328624 free,   636844 buffers
KiB Swap: 13418086+total,   807680 used, 13337318+free. 75965232 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                   
  813 42439     20   0 29.797g 0.012t   5368 S  45.9  9.5  12424:57 beam.smp                                                                                                                  
28238 root      20   0 3179240 244176  25876 S  13.9  0.2   3909:42 qemu-system-x86                                                                                                           
64792 root      20   0 3181724 237820  26016 S  13.9  0.2   3788:20 qemu-system-x86  


CPU利用率和负载是CPU两个方面的刻画,高利用率不一定高负载,负载只与进程数目有关。因此,在刻画CPU繁忙程度的时候,可把两者结合。

CPU负载-多核处理器

芯片厂商往往在一个CPU内部,包含多个CPU核心,这被称为多核CPU。
在系统负荷方面,多核CPU与多CPU效果类似,所以考虑系统负荷的时候,必须考虑这台电脑有几个CPU、每个CPU有几个核心。然后,把系统负荷除以总的核心数,只要每个核心的负荷不超过1.0,就表明电脑正常运行。
怎么知道电脑有多少个CPU核心呢?

"cat /proc/cpuinfo"命令,可以查看CPU信息。"grep -c 'model name' /proc/cpuinfo"命令,直接返回CPU的总核心数。


系统负荷的经验法则

1.0是系统负荷的理想值吗?
不一定,系统管理员往往会留一点余地,当这个值达到0.7,就应当引起注意了。经验法则是这样的:
当系统负荷持续大于0.7,你必须开始调查了,问题出在哪里,防止情况恶化。
当系统负荷持续大于1.0,你必须动手寻找解决办法,把这个值降下来。
当系统负荷达到5.0,就表明你的系统有很严重的问题,长时间没有响应,或者接近死机了。你不应该让系统达到这个值。

对于我的机器,有24个core,那么,load多少合适呢?


#grep 'model name' /proc/cpuinfo | wc -l
24

答案是:


#echo "0.7*24" |bc
16.8

最佳观察时长

最后一个问题,"load average"一共返回三个平均值----1分钟系统负荷、5分钟系统负荷,15分钟系统负荷,----应该参考哪个值?
如果只有1分钟的系统负荷大于1.0,其他两个时间段都小于1.0,这表明只是暂时现象,问题不大。
如果15分钟内,平均系统负荷大于1.0(调整CPU核心数之后),表明问题持续存在,不是暂时现象。所以,你应该主要观察"15分钟系统负荷",将它作为电脑正常运行的指标。

参考文献:https://www.cnblogs.com/muahao/p/6492665.html
<think>好的,我现在需要帮助用户解决海思芯片CPU使用率过高的问题。首先,我得仔细分析用户的问题。用户提到在使用海思芯片的系统中,尤其是在ARM设备中进行音频转码时,CPU占用过高,导致其他进程不稳定,并且他们提到了使用EasyAACEncoder作为解决方案。但用户可能还想知道更多的原因解决方法。 接下来,我需要回顾用户提供的引用资料,特别是引用4,里面提到海思芯片在音频转码时浮点运算效率低,导致CPU占用高,而解决方案是使用EasyAACEncoder。此外,引用3提到海思SD3403方案有8GB内存,支持多任务处理,这可能提示优化内存管理可能有帮助。引用2提到npu-smi工具可以查看硬件利用率,这可能帮助监控CPU使用情况。 首先,我需要确定导致CPU使用率高的可能原因。常见的原因包括高负载运算(如音频转码)、软件优化不足、硬件资源分配不合理、进程调度问题等。根据引用4,浮点运算效率低是主要原因之一,尤其是在音频转码时。另外,可能还存在多进程资源竞争、缺乏硬件加速、代码优化不足等问题。 然后,我需要整理解决方案。用户已经知道EasyAACEncoder,但可能还需要其他方法。例如,启用硬件加速(如NPU或GPU)、优化算法减少浮点运算、调整进程优先级、负载均衡、使用监控工具定位问题等。同时,引用2提到的npu-smi工具可以用来监控NPU的状态,可能帮助判断是否有效利用了硬件加速单元。 还需要考虑海思芯片的具体架构,是否有专用的DSP或AI核心来处理特定任务,如引用3提到的海思方案的大内存支持,可能优化内存管理或任务分配有助于减少CPU负担。此外,引用1提到的低功耗解决方案可能涉及电源管理策略,调整这些策略可能有助于降低CPU负载。 然后,我需要将这些思路结构化,分点列出原因解决方案,确保每个点都有依据,并正确引用提供的资料。例如,在提到硬件加速时,可以引用引用2中的NPU信息工具,说明监控利用NPU的可能性。在提到转码优化时,引用4的EasyAACEncoder作为解决方案。 最后,生成相关问题,这些问题需要围绕用户的问题扩展,例如如何监控海思芯片的资源使用,其他优化方法,硬件加速的具体应用,以及与其他芯片的对比等,帮助用户进一步理解解决问题。 需要注意的是,回答必须使用中文,数学公式正确使用$...$$$...$$格式,虽然当前问题可能不涉及数学公式,但如果有需要的地方要确保格式正确。同时,引用标注要自然,例如在提到工具或解决方案时添加对应的引用标记。 总结步骤: 1. 分析用户的问题提供的引用资料。 2. 确定CPU使用率高的可能原因。 3. 整理每个原因的解决方案,并关联引用资料。 4. 结构化回答,分点说明原因解决方案。 5. 生成相关问题,引导用户深入探讨。 现在需要检查是否有遗漏点,比如是否提到内存管理、进程调度或其他可能的优化策略。同时,确保每个解决方案都有对应的引用支持,例如引用3提到的大内存可能用于优化多任务处理,引用4的转码工具,引用2的监控工具等。</think>### 海思芯片 CPU 使用率过高原因及解决方案 #### 一、主要原因分析 1. **浮点运算效率低** 海思芯片的ARM架构对浮点运算支持较弱,例如音频转码(如PCM转AAC)需大量浮点计算,导致CPU负载激增[^4]。 2. **软件未优化硬件加速** 未充分利用海思芯片内置的硬件加速模块(如NPU、DSP),依赖纯CPU计算[^2][^3]。 3. **多进程资源竞争** 高负载任务(如音视频转码)与其他服务竞争CPU资源,引发调度延迟性能瓶颈[^4]。 4. **代码算法效率不足** 未针对嵌入式场景优化算法(如冗余计算、高复杂度逻辑),加剧CPU负担[^4]。 --- #### 二、解决方案 1. **启用硬件加速** - **NPU/DSP 加速**:将计算密集型任务(如AI推理、编解码)卸载到专用硬件模块,减少CPU占用[^3]。 ```bash npu-smi info -i 0 # 监控NPU利用率[^2] ``` - **使用优化库**:例如通过`EasyAACEncoder`实现高效音频转码,避免纯CPU浮点运算。 2. **算法优化** - 替换浮点运算为定点运算,例如音频处理中使用整数运算替代浮点运算。 数学示例:定点数乘法 $x \cdot y \approx (x \times y) >> n$($n$为缩放因子)。 - 采用低复杂度编解码器(如G.711替代AAC),或预计算查表法减少实时计算量。 3. **资源管理与调度** - **进程优先级调整**:通过`nice`或`cgroups`限制转码进程的CPU配额,保障核心服务资源。 - **内存优化**:利用海思芯片的8GB LPDDR4X内存,减少频繁I/O操作(如缓存复用、零拷贝技术)。 4. **系统级监控与调优** - 实时监控CPU利用率: ```bash top -H -p <pid> # 查看线程级CPU占用 ``` - 分析热点函数:通过`perf`或`gprof`定位高负载代码段,针对性优化。 --- #### 三、实践案例 以音频转码场景为例: 1. 原方案:纯CPU浮点运算转码AAC → CPU占用率90%+。 2. 优化后: - 采用`EasyAACEncoder`启用硬件加速 → CPU占用降至30%。 - 调整转码进程优先级,避免抢占其他服务资源。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Poo_Chai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值