概念

注意,一个arm soc不仅包括 核心s ,还包括其他模块 CPU  GPU  基带  总线 显示加速器 ISP 视频编解码器 音频处理器 Memory控制器 传感器处理单元 DDR Flash 显示接口 Camera接口 射频RF USB接口
  • 从单核到多核

这里提到的“处理器单元”是指“logic CPU”,而不是“physical CPU”。举个例子,如果一个“physical CPU”包含2个core,并且一个core包含2个hardware thread。则一个“处理器单元”就是一个hardware thread。从最早的单核单线程CPU到单核多线程,多核多线程,以及多路CPU的情况。UPUni processor一个pcb板上有一个cpu,且cpu有一个thread
SMPSymmetric Multi-Processing一个pcb板子上有多个cpu,且每个cpu有一个thread
CMPChip multiprocessors一个pcb板子上有1个cpu,且cpu有多个核心,每个核心有一个thread// CMP是通过“复制”物理核心来扩展处理器在多线程软件中的性能
SMTSimultaneous multithreading一个pcb板子上有1个cpu,且cpu有一个核心,核心有多个thread// 当一个thread 阻塞时,如果此时有空闲thread可用,可让同一个处理器上的剩余空闲线程同步(关键在同步,意思是不能同时占有)执行并共享核心的执行资源// SMT的设计思想是充分利用每个核心的资源。 // 如果一个线程处于停顿状态等待内存,另一个线程的指令则可以使用这个物理核心的所有执行单元,让物理核心利用的更加充分
NUMANon Uniform Memory Access Architecture一个pcb板子有1或多个CPU , 每个板子用 专用网络TCPIP 连接.UP系统只有一个处理器单元,即单核CPU系统多发射多发射是单核中 芯片设计中 一个流水线中 后端 的概念表示的是 调度器 到 执行单元 的宽度,如附录图A所示,该涉及为8发射// 多 : 同时大于1个// 发射 : 发射 一个 uOp 给 一个执行单元// 因为执行单元很多 , 所以 可以 做多发射 SMP系统有多个处理器单元。各个处理器之间共享总线,内存等等。在操作系统看来,各个处理器之间没有区别。SMP的全称是“对称多处理“(Symmetrical Multi-Processing)技术,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台电脑不再由单个CPU组成,而同时由多个处理器运行操作系统的单一复本,并共享内存和一台计算机的其他资源。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。系统将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力。所有的处理器都可以平等地访问内存、I/O和外部中断。在对称多处理系统中,系统资源被系统中所有CPU共享,工作负载能够均匀地分配到所有可用处理器之上。SMP处理器结构的灵活性比较突出。但是,当半导体工艺进入0.18微米以后,线延时已经超过了门延迟,要求微处理器的设计通过划分许多规模更小、局部性更好的基本单元结构来进行。对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。主要特征就是:共享所有资源服务器的多路CPU便是如此,CPU之间的共享内存的,但是通过处理器之间的点对点连接实现互访(mesh连接)。是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。在这种技术的支持下,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。像双至强,也就是我们所说的二路,这是在对称处理器系统中最常见的一种(至强MP可以支持到四路,AMD Opteron可以支持1-8路)。也有少数是16路的。但是一般来讲,SMP结构的机器可扩展性较差,很难做到100个以上多处理器,常规的一般是8个到16个,不过这对于多数的用户来说已经够用了。在高性能服务器和工作站级主板架构中最为常见,像UNIX服务器可支持最多256个CPU的系统,其实qemu从代码设计上也是最大支持256个virtual cpu。构建一套SMP系统的必要条件是:支持SMP的硬件包括主板和CPU;支持SMP的系统平台,再就是支持SMP的应用软件。 为了能够使得SMP系统发挥高效的性能,操作系统必须支持SMP系统,如WINNT、LINUX、以及UNIX等等32位操作系统。即能够进行多任务和多线程处理。多任务是指操作系统能够在同一时间让不同的CPU完成不同的任务;多线程是指操作系统能够使得不同的CPU并行的完成同一个任务。 要组建SMP系统,对所选的CPU有很高的要求,首先、CPU内部必须内置APIC(Advanced Programmable Interrupt Controllers)单元。Intel 多处理规范的核心就是高级可编程中断控制器(Advanced Programmable Interrupt Controllers--APICs)的使用;再次,相同的产品型号,同样类型的CPU核心,完全相同的运行频率;最后,尽可能保持相同的产品序列编号,因为两个生产批次的CPU作为双处理器运行的时候,有可能会发生一颗CPU负担过高,而另一颗负担很少的情况,无法发挥最大性能,更糟糕的是可能导致死机。CMP单芯片多处理器(Chip multiprocessors,简称CMP),也指多核心。CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。由于CMP结构已经被划分成多个处理器核来设计,每个核都比较简单,有利于优化设计,因此更有发展前途。目前,IBM 的Power 4芯片和Sun的 MAJC5200芯片都采用了CMP结构。多核处理器可以在处理器内部共享缓存,提高缓存利用率,同时简化多处理器系统设计的复杂度。2005年下半年,Intel和AMD的新型处理器也将融入CMP结构。新安腾处理器开发代码为Montecito,采用双核心设计,拥有最少18MB片内缓存,采取90nm工艺制造,它的设计绝对称得上是对当今芯片业的挑战。它的每个单独的核心都拥有独立的L1,L2和L3 cache,包含大约10亿支晶体管。CMP的核间通讯带宽比SMP大得多,从而不会成为性能瓶颈CMP的核间延迟比SMP小得多CMP可以提供新的轻量级的一致性和同步原语CMP  Chip multiprocessors 单芯片多处理器,也指多核心。其思想是将大规模并行处理器中的SMP集成到同一芯片内,各个处理器并行执行不同的进程。主要特征:单个CPU,多个核心,各核心有独立的L1缓存,有共享的最底层缓存L3(有的只有L2)现在几乎所有的台式计算机都使用这种多核CPU。服务器的架构属于SMP+CMP。CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。与CMP比较, SMP处理器结构的灵活性比较突出。但是,当半导体工艺进入0.18微米以后,线延时已经超过了门延迟,要求微处理器的设计通过划分许多规模更小、局部性更好的基本单元结构来进行。相比之下,由于CMP结构已经被划分成多个处理器核来设计,每个核都比较简单,有利于优化设计,因此更有发展前途。目前,IBM 的Power 4芯片和Sun的 MAJC5200芯片都采用了CMP结构。多核处理器可以在处理器内部共享缓存,提高缓存利用率,同时简化多处理器系统设计的复杂度。最近,Intel和AMD的新型处理器也融入CMP结构。新安腾处理器开发代码为Montecito,采用双核心设计,拥有最少18MB片内缓存,采取90nm工艺制造,它的设计绝对称得上是对当今芯片业的挑战。它的每个单独的核心都拥有独立的L1,L2和L3 cache,包含大约10亿支晶体管。 CMP和 SMT一样,致力于发掘计算的粗粒度并行性。CMP可以看做是随着大规模集成电路技术的发展,在芯片容量足够大时,就可以将大规模并行处理机结构中的SMP(对称多处理机)或DSM(分布共享处理机)节点集成到同一芯片内,各个处理器并行执行不同的线程或进程。在基于SMP结构的单芯片多处理机中,处理器之间通过片外 Cache或者是片外的共享存储器来进行通信。而基于DSM结构的单芯片多处理器中,处理器间通过连接分布式存储器的片内高速交叉开关网络进行通信。由于SMP和DSM已经是非常成熟的技术了,CMP结构设计比较容易,只是后端设计和芯片制造工艺的要求较高而已。正因为这样,CMP成为了最先被应用于商用CPU的“未来”高性能处理器结构。SMT同时多线程Simultaneous multithreading,简称SMT。SMT可通过复制处理器上的结构状态,让同一个处理器上的多个线程同步执行并共享处理器的执行资源,可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。当没有多个线程可用时,SMT处理器几乎和传统的宽发射超标量处理器一样。SMT最具吸引力的是只需小规模改变处理器核心的设计,几乎不用增加额外的成本就可以显著地提升效能。多线程技术则可以为高速的运算核心准备更多的待处理数据,减少运算核心的闲置时间。这对于桌面低端系统来说无疑十分具有吸引力。Intel从3.06GHz Pentium 4开始,所有处理器都将支持SMT技术。 Intel的hyper-threading其实就是 two-thread SMT.NUMANUMA即非一致访问分布共享存储技术,它是由若干通过高速专用网络(TCPIP)连接起来的独立节点构成的系统,各个节点可以是单个的CPU或是SMP系统。在NUMA中,Cache 的一致性有多种解决方案,需要操作系统和特殊软件的支持。图2中是Sequent公司NUMA系统的例子。这里有3个SMP模块用高速专用网络联起来,组成一个节点,每个节点可以有12个CPU。像Sequent的系统最多可以达到64个CPU甚至256个CPU。显然,这是在SMP的基础上,再用NUMA的技术加以扩展,是这两种技术的结合。 ---------------------------------------------------------------
实例1: x86-CPU
Comet Lake-S的第十代酷睿桌面级处理器i9-10900K10核心20线程10核心/每CPU      采用了 CMP 技术2thread/每核心   采用了 SMT 技术,intel 官方称 Hyper-Threading (超线程)
AMD正式发布线程撕裂者3990X64核心128线程64核心/每CPU     采用了 CMP 技术2thread/每核心   采用了 SMT 技术,intel 官方称 Hyper-Threading (超线程)
---------------------------------------------------------------
- [ARM架构CPU这么强,为什么没有一家有超线程技术?](https://www.chiphell.com/thread-1640394-1-1.html)
- [ARM架构CPU这么强,为何没有一家有超线程技术](http://ask.zol.com.cn/x/12020479.html)
- [ARM处理器一直采用单核心单线程设计的原因](http://server.zol.com.cn/333/3334138.html)
- [2015-8-26,最强国产ARM架构处理器:号称打败Intel顶级芯片](https://community.arm.com/cn/b/blog/posts/arm-intel)
- 2018-12-19,ARM宣布了用于汽车的Cortex-A65AE架构,它同时也是ARM架构下首个SMT同步多线程技术内核。 // https://www.arm.com/products/silicon-ip-cpu/cortex-a/cortex-a65ae
- [ARM发布首款多线程核心Cortex-A65AE:应用于自动驾驶 7纳米工艺](http://www.eetop.cn/view-6905652.html)实例2:arm-soc骁龙865(2019.12 , 7nm)         // 高通处理器规格表 http://www.mydrivers.com/zhuanti/tianti/01/index_gaotong.html一大核Kryo 585(A77改)+三中核Kryo 585(A77改)+四小核Kryo 585(A55改)8核心/每cpu  采用了 CMP 技术手机 arm soc 目前(2020-5-18 23:02:11)都是 单线程,没有采用SMT技术Mavell(美满电子)奉上了第三代ARM芯片“ThunderX3”台积电7nm DUV工艺Marvell自主研发架构指令集兼容ARM v8.3+96核384线程96核心/每cpu 采用了 CMP 技术4线程/每核心  采用了 SMT 技术
  • 多核术语
BSP : boot strap processer
AP  : Application processer // 除去 BSP的 所有processer- x86专用
local APIC : 本地可编程高级中断控制器
IO APIC : IO可编程高级中断控制器
IPI : 处理器间中断
  • 多核技术总览

    • 多核处理器的九大关键技术
    • SMP实现中的关键技术
  • 逻辑核心和PE

PE,逻辑核心(logic core),一个逻辑核心上可以跑一个线程
常用PE(process element)表示一个计算单元,具体功能不尽相同
PE的实现可以是 cpu gpu dsp fpga asic , npu apu ...

MPcores芯片分类

  • 同构芯片

  • 异构芯片
CPU、DSP、 AI加速器(NPU)  GPU、ASIC、FPGA 的 混合 组合.

CPU适合逻辑控制、串行运算与通用类型数据运算,GPU拥有大规模并行计算架构,擅长处理诸如图形计算等多重任务。由于深度学习通常需要大量的但并不复杂的训练算法,因此相比CPU而言,GPU更适合深度学习运算。FPGA(现场可编程门阵列)是一直可编程的半定制芯片,具有并行处理优势,并且也可以设计成具有多内核的形态。FPGA最大的优势在于其可编程的特性,用户可以根据需要的逻辑功能对电路进行快速烧录来实现自定义硬件功能。ASIC芯片(相较于CPU、GPU等通用型芯片以及半定制的FPGA来说)的计算能力和计算效率都直接根据特定的算法的需要进行定制的,因此ASIC芯片具有体积小、功耗低、可靠性高、计算性能高、计算效率高等优势。所以在其所针对的特定的应用领域,ASIC芯片的能效表现要远超CPU、GPU等通用型芯片以及半定制的FPGA。

芯片厂商

  • 服务器芯片厂商
intel amd  arm
  • 桌面芯片厂商
intel amd
  • 嵌入式芯片厂商
st nxp bcom
  • stm手册下载地址
st st nxp nxp
同构 异构 同构 异构
STM32WB(CM0+CM4) i.MX 6DualLite (2 x A9) K32 L3(CM4+CM0+)
STM32H7(M4+M7) i.MX 6DualPlus (2 x A9) i.MX RT1170(M4+M7)
stm32MP1(M4+A7) i.MX 6Quad (4 x A9) i.MX RT600(M33+DSP Tensilica HIFI4)
i.MX 6QuadPlus (4 x A9) i.MX 6SoloX(A9+M4)
i.MX 7ULP (A7+M4)
i.MX 7Dual( 2 x A7 + M4)
i.MX 8 (2A72+4A53+2M4F+DSP+2GPU)
  • 嵌入式手机芯片厂商
// 芯片厂商
苹果 高通 华为 三星 MTK 展讯
// 做芯片的手机厂商
苹果 华为 三星 小米 vivo
第一代AI芯片骁龙820上的Zeroth神经元处理器、
第二代AI芯片骁龙835集成了骁龙神经处理引擎SDK,能够利用芯片的异构计算能力来加强机器学习。
第三代AI芯片骁龙845集成高通最新推出的人工智能引擎AI Engine,能够实现最顶尖的终端AI处理。
目前,骁龙835、骁龙710、骁龙660等AI芯片都支持了该人工智能引擎AI Engine



操作系统对SMP的支持

  • 一个操作系统如果要支持SMP,则其实现主要分为三种方式

    • 基于同步原语扩展的实时操作系统 : VxWorks、RealOS
    • 基于微内核和分布式技术的实时操作系统 : QNX
    • 传统的SMP结构的实时操作系统 : Linux
  • 这三种实现方式都必须解决以下问题 ,问题1 ,问题2:

    • 处理器间的同步与互斥
    • Cache与内存间的一致性问题
    • 中断处理
    • 进程调度
    • 体系结构
    • 系统引导和初始化
  • 另外我们看一个SMP操作系统的具体实现

    • Linux中对于SMP系统的实现

如何在软件上操作多核

  • 对于软件,核心是什么

  • 单核上的软件

  • 多核上的软件
// 启动// 调度// 中断

多核上的arm-linux

  • ARM多核引导过程
  • Linux双核SMP系统启动流程 Zynq-ARM-CortexA9
  • arm-Linux芯片级移植与底层驱动(基于3.7.4内核) --SMP多核启动以及CPU热插拔驱动
exynos 4412
  • log
// log
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d
[    0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
...
[    0.000000] CPU EXYNOS4412 (id 0xe4412011)
...
[    0.000000] SLUB: Genslabs=13, HWalign=32, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
...
[    0.075000] CPU1: Booted secondary processor
[    0.095000] CPU2: Booted secondary processor
[    0.115000] CPU3: Booted secondary processor
[    0.115000] Brought up 4 CPUs
[    0.115000] SMP: Total of 4 processors activated (7969.17 BogoMIPS).
...
[    1.268981] Switched to NOHz mode on CPU #0
[    1.269056] TCP bind hash table entries: 65536 (order: 7, 786432 bytes)
[    1.269204] Switched to NOHz mode on CPU #2
[    1.269211] Switched to NOHz mode on CPU #1
[    1.269218] Switched to NOHz mode on CPU #3
...
[    1.705707]  CPU type:
[    1.705718]  Exynos 4412
...
[   20.450248] CPU1: shutdown
[   21.523901] CPU2: shutdown
[   22.047218] CPU3: shutdownroot@android:/ #
  • SMP启动过程
在Linux系统中,对于多核的ARM芯片,在Bootrom代码中,每个CPU都会识别自身ID如果ID是0,则引导Bootloader和Linux内核执行如果ID不是0,则Bootrom一般在上电时将其置于WFI(WaitFortInerrupt)或者WFE(WaitForEvent)状态 // 该CPU会等待CPU0给其发CPU核间中断或事件(一般通过SEV指令)以唤醒它。
BSPkernel_initsmp_prepare_cpusplatform_smp_prepare_cpus // arch/arm/mach-exynos4/platsmp.c // 这部分的具体实现方法是与SoC相关的,由芯片的设计以及芯片内部的Bootrom决定/*                                                                           * Write the address of secondary startup into the                           * system-wide flags register. The boot monitor waits                        * until it receives a soft interrupt, and then the                          * secondary CPU branches to this address.                                   */__raw_writel(BSYM(virt_to_phys(exynos4_secondary_startup)), S5P_VA_SYSRAM);  // 0x F840 0000smp_init // kernel/smp.cfor_each_present_cpucpu_up_cpu_up__cpu_upboot_secondary // arch/arm/mach-exynos4/platsmp.cgic_raise_softirq //  arch/arm/common/gic.cwritel_relaxed(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT);Brought up 4 CPUssmp_cpus_doneSMP: Total of 4 processors activated (7969.17 BogoMIPS).APsexynos4_secondary_startup // arch/arm/mach-exynos4/headsmp.Sb   secondary_startupsecondary_startup // arch/arm/kernel/head.Sadr r4, __secondary_dataldmia   r4, {r5, r7, r12}       @ address to jump to aftermov r13, r12            @ __secondary_switched addressARM(   add pc, r10, #PROCINFO_INITFUNC ) @ initialise processorTHUMB( add r12, r10, #PROCINFO_INITFUNC    )THUMB( mov pc, r12             )__secondary_switched // arch/arm/kernel/head.Sunsigned int cpu = smp_processor_id();printk("CPU%u: Booted secondary processor\n", cpu);CPU1: Booted secondary processorCPU2: Booted secondary processorCPU3: Booted secondary processor
  • cpu热插拔
$ ls /sys/devices/system/cpu/
cpu0  cpuidle   kernel_max  nohz_full  online    power    smt     vulnerabilities
cpu1  isolated  modalias    offline    possible  present  ueventstatic SYSDEV_ATTR(online, 0644, show_online, store_online);store_online // drivers/base/cpu.ccpu_down_cpu_downtake_cpu_down__cpu_disableplatform_cpu_disable // arch/arm/mach-exynos4/hotplug.c/*                                                                           * we don't allow CPU 0 to be shutdown (it is still too special              * e.g. clock tick interrupts)                                               */ return cpu == 0 ? -EPERM : 0;
  • arm-Linux SMP启动流程学习(一)
  • arm-Linux SMP启动流程学习(二)

多核上的x86-linux

  • x86-linux SMP 启动过程学习笔记

// 启动根据intel公司中的资料,系统上电后,会根据MP Initialization Protocol随机选择一个CPU作为BSP,只有BSP会运行BIOS程序,其他AP都进入等待状态,BSP发送IPI中断触发后才可以运行。
具体的MP Initialization Protocol细节,可以参考Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1 第8章。在SMP中,首先要对各个处理器进行初始化。
然后BSP工作,而其它的CPU(AP)则停留在一个初始化好的中断屏蔽状态休眠。
BSP继续进行启动过程,在执行到操作系统的start_kernel之前,BSP所进行的工作与单处理器系统所做的工作是相同的。
在start_kernel中,BSP通过smp_init1.smp_boot_cpus 设置 各cpu 处于待命模式(等待被BSP发送IPI指令)并为每个CPU建立一个0号进程,填充 task_struct的eip 为 start_secondary并为 每个cpu设置 中断入口trampoline.S,用于AP 响应 IPI中断并发送IPI中断 // 此时 AP接收到IPI中断开始动作,并循环在 start_secondary 中的  while (!atomic_read(&smp_commenced)) rep_nop();  2.smp_threads_ready = 1 表示各个AP 的idle 进程已经建立3.smp_commenence 让各 AP 继续执行指令然后不同的核心开始做不同的工作:当BSP初始化完毕所有的AP之后,就继续执行start_kernel中的其余部分代码。 // BSP 的 0 号进程 是 init_taskAP 开始执行指令? // Idle 进程指令吗?1. AP接收到IPI,跳转到 trampoline.S2. 在 trampoline.S 中 装入gdt和idt,然后跳转到head.s入口执行startup_323. 在 startup_32 中, 根据 ready变量,跳转到 initialize_secondary4. 在 initialize_secondary 中, 设置current 的 堆栈指针和指令指针, 函数返回之后转至current->thread.esp,即跳至start_secondary5. 在 start_secondary 中5.1 cpu_init5.2 smp_callin5.3 while (!atomic_read(&smp_commenced)) rep_nop();5.4 local_flush_tlb5.5 return cpu_idle(); // cpu_idle 不会return// 调度task_struct 新增成员调度时机 变化schedule 函数变化// 中断本地APIC的作用:1,接收理本地外部中断(直接连在LINTIN 0/1上的设备)。2,接收本地内部中断(除法错误等软件上的中断)。3,接收来自IO APIC的中断。IO APIC的作用:1,接收系统总线上的IPI消息。2,接收外部设备的中断。3,将接收到的中断分发给本地APIC。注意:1,外设可以通过LINTIN0/1直接连在某一个本地APIC上,不经过IO APIC。2,处理器间中断先由IO APIC接收,然后分发给相应的本地APIC。这似乎暗示着中断的分发策略完全是IO APIC的事情,本地APIC只是接收从IO APIC发过来的中断,并不区分是IPI还是外部中断。IO APIC的作用类似于以太网交换机。
x86-Linux对SMP的支持主要体现在三个方面:启动过程:BSP负责操作系统的启动,在启动的最后阶段,BSP通过IPI激活各个AP在系统的正常运行过程中,BSP和AP基本上是无差别的。进程调度:与UP系统的主要差别是执行进程切换后,被换下的进程有可能会换到其他CPU上继续运行。在计算优先权时,如果进程上次运行的CPU也是当前CPU,则会适当提高优先权,这样可以更有效地利用Cache。中断系统:为了支持SMP,在硬件上需要APIC中断控制系统。Linux定义了各种IPI的中断向量以及传送IPI的函数。

多核上的mips-linux

  • mips-linux SMP启动代码分析

Linux多核负载均衡


调度器 和 SMP负载均衡 区别调度器 : 关注的 一个CPU上某一些 个体的行为SMP负载均衡 : 关注的 SMP 之间 负载是否均衡CPU负载公式1.0 // 3.8 之前CPU负载 = 就绪队列的总权重公式问题:如果cpu0和cpu1上有分别有1个进程cpu0 上的进程 不停歇的用cpucpu1 上的进程 用半秒,sleep半秒.按照公式算,cpu0上的负载等于cpu1上的负载但是cpu0上的负载明显大于cpu1的负载考虑了进程权重,没考虑进程行为(cpu密集型,io密集型)公式改进:为了改进,引入了历史负载.CPU当前负载 = f(就绪队列的总权重,历史负载)进程的CPU使用率进程A的CPU使用率=一分钟内进程A实际占用CPU的时间/一分钟内调度器分配给进程A的时间内核根据 判断进程的 CPU使用率 , 如果进程A的CPU使用率>进程B的CPU使用率,那么 进程A 相较于进程B更偏向于 CPU密集型.CPU负载公式2.0 // 3.8 及之后CPU负载=(CPU运行时间/CPU总时间)*就绪队列总权重CPU总时间 : 采样的总时间问题:CPU总时间是采样时间,那么算出来的这个负载可以说是该采样时间内的平均负载但是我们想要的负载不是平均负载那么时间足够短不就行了???但是linux内核中提到了衰减效应,也就是说 1分钟前的CPU运行时间 对现在的影响 远比5分钟前的CPU运行时间 要大所以在 (CPU运行时间/CPU总时间) 这一项, 对 采样时间 内 的 不同时刻的的 运行时间进行了权重化CPU负载公式3.0decay_avg_load = (decay_sum_runnable_time/decay_sum_period_time)*weight累积衰减执行时间/累积衰减采样时间

附录

  • 图A

soc(十一) MPCores相关推荐

  1. NanoPi NEO Air使用十一:编写SPI驱动点亮TFT屏幕,ST7789V

    NanoPi NEO Air使用一:介绍 NanoPi NEO Air使用二:固件烧录 NanoPi NEO Air使用三:OverlayFS.CPU温度和频率.wifi.蓝牙.npi-config ...

  2. 华为Mate 30系列5G版屠榜双十一:当之无愧的5G爆品

    10月31日,国内三大运营商正式上线了5G商用套餐,并支持国内50个一二线城市用户办理.这标志着我国正式进入5G商用时代,5G时代的大门已经向普通消费者敞开.适逢双十一,三大运营商顺水推舟开启了在双十 ...

  3. 阿里平头哥研发专用 SoC 芯片;部分 MacBook Pro 被禁止上飞机;VS Code 1.37 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  4. 嵌入式linux备份flash,嵌入式Linux裸机开发(十一)——Nandflash

    嵌入式Linux裸机开发(十一)--Nandflash 一.Nand Flash简介 NandFlash是Flash的一种,具有容量较大,改写速度快等优点,适用于大量数据的存储.NandFlash没有 ...

  5. 五、RISC-V SoC内核——中断 代码讲解

    tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值->译码->执行三级流水线. 另外,在最后一个章节中会上传额外添加详细注释的工程代码 ...

  6. 一、RISC-V SoC内核——取指 代码讲解

    在开篇中我们对RISC-V及其SoC软核工程进行了简单介绍,现在来介绍取指模块: tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值->译码 ...

  7. 二、RISC-V SoC内核注解——译码 代码讲解

    tinyriscv这个SoC工程的内核cpu部分,采用经典的三级流水线结构进行设计,即大家所熟知的:取值->译码->执行三级流水线. 另外,在最后一个章节中会上传额外添加详细注释的工程代码 ...

  8. 七、RISC-V SoC内核——总线 代码讲解

    上一篇博文中注释了通用寄存器reg.v模块,现在来介绍总线模块rib.v: 另外,在最后一个章节中会上传额外添加详细注释的工程代码,完全开源,如有需要可自行下载. (这个RIB总线协议为工程原作者自定 ...

  9. 十、RISC-V SoC外设——timer定时器 代码讲解

    上一篇博文中注释了SPI外设模块,现在来介绍timer定时器模块. 另外,在最后一个章节中会上传额外添加详细注释的工程代码,完全开源,如有需要可自行下载. 目录 0 RISC-V SoC注解系列文章目 ...

最新文章

  1. linux内核 task_struct 中自旋锁的应用
  2. Centos下Web中间件Jboss应用发布start和stop脚本范例
  3. 《深入理解Java虚拟机》读书笔记七
  4. 记一次Linux服务器因redis漏洞的挖矿病毒入侵
  5. android-DNS服务找不到
  6. NSDictionary NSArray 转中文输出
  7. iphone屏幕突然变暗_iPhone 玩游戏时屏幕突然变暗,来看看是什么原因?
  8. 2020顶会指南:征稿截止时间、举办地、举办时间一览
  9. 大数据之_亿级分布式日志管理ELK_工作笔记001_ELK认识介绍
  10. Linux 基本命令不能用的解决方法
  11. 如何在Firefox中播放MID文件?
  12. MQL5由简到繁系列一
  13. 表情包制作html,人脸表情包制作,如何用人脸制作表情包
  14. 英特尔推出SD卡巨细电脑 配Atom处理器
  15. c语言种子数使用方法,C语言中的srand的用法,什么是种子?
  16. 大脑构造图与功能解析_人类大脑的生理构造及功能分区
  17. 雅思专家另类视角,解读不一样的美国大学专业排名
  18. pc客户端网易云部分电台节目播放过程中声音消失的问题
  19. 手机抓包的两种方法:wireshark抓包和fiddler抓包
  20. jump Server开源堡垒机的部署以及资产管理

热门文章

  1. 一文弄懂Python中的pprint
  2. 领导最喜欢提拔的10种人
  3. java异常处理方式
  4. 我的飞信发展方案(二)
  5. python读取txt中的一列称为_Python读取文本中的数字
  6. cxf精简jar整合,亲测无误
  7. 超详细的Git下载安装、环境变量配置教程
  8. Windows安装配置Git
  9. 自助投胎系统--多重if练习
  10. php购物车数量加减代码,js实现购物车商品数量加减