【前言】

写了一段时间博客发现,以实际例子来说明一件事,可能会让读者更容易理解那些知识。

从今天开始从手机优化的案例来逐篇对算法的优化做一个简单的总结专栏。

1. 为什么需要绑核操作?

需求决定一切:

  • 需要程序更快执行完成
  • 需要程序避开频繁的CPU调度
  • 需要屏蔽干扰条件验证算法的性能
  • Power Saved

2. 如何找到我们需要的CPU核?

   通过shell可以看到SOC的CPU信息:

cat proc/cpuinfoprocessor    : 0 ~ 7
BogoMIPS    : 38.40
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0 / 0x1
CPU part    : 0xd46 / 0xd47 / 0xd48
CPU revision    : 0
  • processor : CPU idx
  • CPU implementer : CPU arch文件描述位于:cpu.h
//cpu.h
static const int ARM = 0x41;
static const int NVIDIA = 0x4e;
static const int QUALCOMM = 0x51;
...
  • CPU architecture: 基于ARM公司开发的精简指令集架构的指令集架构
  • CPU part:              CPU的架构,在cputype.h中描述

    //arch/arm64/include/asm/cputype.h
    #define QCOM_CPU_PART_KRYO_7XX_SILVER   0xD46
    #define QCOM_CPU_PART_KRYO_7XX_GOLD 0xD47
    #define QCOM_CPU_PART_KRYO_7XX_GOLD_PLUS 0xD48

    3. 如何绑核?

通常,我们会把进程绑定到大核簇或者小核簇,或者当个cpu上面,以提高程序执行效率。

硬CPU亲和性(affinity):

为啥加硬,你都开始强上了。。。Lock to CpU:

task_struct --> cpus_allowed --> 8 cpu --> 8位的位掩码
default:
如果一个进程可以在任何 CPU 上运行,并且能够根据需要在处理器之间进行迁移,那么位掩码就全是1.
cpu_set_t cpuset;
CPU_ZERO(&cpuset);     //对CPU对应位置进行清0操作
CPU_SET(0, &cpuset);   //0: 对需要绑定的CPU设置
sched_setaffinity(0, sizeof(cpuset), &cpuset)  //0:代表自己pidsched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask)
sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask)

绑核需要注意是,子进程会继承父进程的绑核关系。

4. 查看cpu绑定?

ps -o pid,psr,comm -p 166     PID PSR COMM
166   2 [kswapd0:0]

频率调节模式
ondemand:按需快速动态调整CPU频率, 一有cpu计算量的任务,就会立即达到最大频率运行,等执行完毕就立即回到最低频率
conservative:保守模式,类似于ondemand,但调整相对较缓
performance:性能模式,只有最高频率,不考虑消耗的电量,流畅度没得说
powersave: 省电模式,通常以最低频率运行,流畅度极低
userspace:用户自定义模式,系统将变频策略的决策权交给了用户态应用程序

手机上的算法优化 —— CPU绑定(CPU affinity)相关推荐

  1. 手机上的算法优化 —— 内存压缩算法

    [前言] 随着手机APP的升级,手机的内存也越来越大,在有限的内存空间里存放更多的数据,成为了对developer的挑战,接下来我会介绍一下内存中最常使用的几种算法,并剖析一下适合的使用场景. 由于鄙 ...

  2. 手机上的算法优化 —— cache miss

    [前言] cache是利用局部性原理(时间.空间),更好的解决硬件间速率不匹配的问. 现代CPU的Cache一般分为三级: L1,Cache生产成本最高,容量最小,但是速度最快,处理器访问一级Cach ...

  3. cubic算法优化_安卓cpu优化tcp拥塞算法cubic和reno怎么选择?

    上述具体的论文可以参考:CUBIC: A New TCP-Friendly High-Speed TCP Variant 1. tcp cubic数学模型 CUBIC在设计上简化了BIC-TCP的窗口 ...

  4. cubic算法优化_安卓cpu优化 tcp拥塞算法cubic和reno怎么选择

    上述具体的论文可以62616964757a686964616fe59b9ee7ad9431333365643662参考:CUBIC: A New TCP-Friendly High-Speed TCP ...

  5. Redis实例绑定CPU物理核优化Redis性能

    进入本次Redis性能调优之前,首先要知道CPU结构也会影响Redis的性能.接下来,具体了解一下! 为什么CPU结构也会影响Redis的性能? 主流的 CPU 架构 一个 CPU 处理器中一般有多个 ...

  6. 0.基于C++的图像处理算法实现、INTEL CPU上SSE加速、ARM CPU上NEON加速

    基于C++的图像处理算法实现.INTEL CPU上SSE加速.ARM CPU上NEON加速 基于C++的图像处理算法在INTEL CPU上SSE加速实现 基于C++的图像处理算法在ARM CPU上NE ...

  7. 《仙剑奇侠传online》游戏后台优化分析:CPU、内存与启动时间

    一.服务器CPU性能优化 1.1寻路算法JPS优化 MMORPG游戏中服务器中需要对NPC寻路,然而A*算法及其各种优化并不让人满意,因此寻路算法也成为瓶颈之一. 因此,本文介绍JPS的效率.多线程. ...

  8. 优化你的CPU来做深度学习

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 对于想学习深度学习的同学们来说,学习资源网上有很多,但是计算 ...

  9. 获取redis实例绑定cpu的情况

    redis是一个单线模型的nosql类型的数据库,而目前接触到的服务器大都是多核的,比如8c,16c,32c,64c等等.为了充分利用主机,在一台主机上必然会部署多个redis实例,默认情况cpu会随 ...

最新文章

  1. SQLite的数据类型总结
  2. 6D位姿估计Point Pair Feature (PPF)算法详解
  3. 我的 Rokid 之路 附:记事本技能全部源代码
  4. java 并发编程 aqs_Java并发编程之AQS
  5. java 监控 收集资料2(收集中)
  6. nginx 限制上传文件大小
  7. reStructuredText(.rst)语法规则快速入门
  8. 点读笔客户端_新手妈妈如何选购点读笔
  9. 格鲁吉亚理工学院计算机全美排名,乔治亚理工大学环境工程排名2019年
  10. 富文本编辑器quill的集成
  11. ImportError: libgdal.so.20: cannot open shared object file: No such file or directory
  12. PPC WM5 输入法屏蔽插件
  13. GCC 编译安装在线文档
  14. linux c Make file 的生成
  15. 我的世界java雪村种子_我的世界:5个珍藏级开局种子,第4个大家都在找,最后1个最富有...
  16. c# winform 无边框窗体 移动办法
  17. Windows平台视频显示问题
  18. 2023年出入境政策-喜忧参半
  19. 写好 JS 条件语句的 5 条守则
  20. 虚拟机 Ubuntu 14.04 LTS (64 bits) 下安装 Kurento v6 并运行 kurento-hello-world

热门文章

  1. TaskMan(任务侠),进程监控小程序
  2. 旺旺商聊PC28算账机器人软件用到OpenCV让AI速度达到巅峰
  3. 词达人小工具2.0 开放源码 C/Python
  4. oracle 使用杂记
  5. 广西大学考计算机可以拿创新学分吗,广西大学生创新创业也能挣学分
  6. 使用poi根据模版生成word文档并转换成PDF文件(可处理doc文件与docx文件版)
  7. 正则表达式匹配可以更快更简单 (but is slow in Java, Perl, PHP, Python, Ruby, ...)
  8. pytest学习和使用12-Unittest和Pytest参数化详解
  9. 国土局土地档案管理软件系统(Java+SSH+MySQL)
  10. Windows10 在睡眠或休眠状态下自动唤醒