soc(十一) MPCores

概念
注意,一个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的情况。

UP
	Uni processor
	一个pcb板上有一个cpu,且cpu有一个thread
SMP
	Symmetric Multi-Processing
	一个pcb板子上有多个cpu,且每个cpu有一个thread
CMP
	Chip multiprocessors
	一个pcb板子上有1个cpu,且cpu有多个核心,每个核心有一个thread
	// CMP是通过“复制”物理核心来扩展处理器在多线程软件中的性能
SMT
	Simultaneous multithreading
	一个pcb板子上有1个cpu,且cpu有一个核心,核心有多个thread
	// 当一个thread 阻塞时,如果此时有空闲thread可用,可让同一个处理器上的剩余空闲线程同步(关键在同步,意思是不能同时占有)执行并共享核心的执行资源
	// SMT的设计思想是充分利用每个核心的资源。 
	// 如果一个线程处于停顿状态等待内存,另一个线程的指令则可以使用这个物理核心的所有执行单元,让物理核心利用的更加充分
NUMA
	Non 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.

NUMA
	NUMA即非一致访问分布共享存储技术,它是由若干通过高速专用网络(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-10900K
		10核心20线程
			10核心/每CPU  	采用了 CMP 技术
			2thread/每核心   采用了 SMT 技术,intel 官方称 Hyper-Threading (超线程)
AMD正式发布线程撕裂者3990X
	64核心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+
	96384线程
	96核心/每cpu 采用了 CMP 技术
	4线程/每核心  采用了 SMT 技术


  • 多核术语
BSP : boot strap processer
AP 	: Application processer // 除去 BSP的 所有processer

- x86专用
local APIC : 本地可编程高级中断控制器
IO APIC : IO可编程高级中断控制器
IPI : 处理器间中断
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
ststnxpnxp
同构异构同构异构
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操作系统的具体实现


如何在软件上操作多核
  • 对于软件,核心是什么

  • 单核上的软件

  • 多核上的软件
// 启动

// 调度

// 中断

多核上的arm-linux
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: shutdown

root@android:/ # 
  • SMP启动过程
在Linux系统中,对于多核的ARM芯片,在Bootrom代码中,每个CPU都会识别自身ID
	如果ID是0,则引导Bootloader和Linux内核执行
	如果ID不是0,则Bootrom一般在上电时将其置于WFI(WaitFortInerrupt)或者WFE(WaitForEvent)状态 // 该CPU会等待CPU0给其发CPU核间中断或事件(一般通过SEV指令)以唤醒它。
BSP
	kernel_init
		smp_prepare_cpus
			platform_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 0000

		smp_init // kernel/smp.c
			for_each_present_cpu
				cpu_up
					_cpu_up
						__cpu_up
							boot_secondary // arch/arm/mach-exynos4/platsmp.c
								gic_raise_softirq //  arch/arm/common/gic.c
									writel_relaxed(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT);

			Brought up 4 CPUs
			smp_cpus_done
				SMP: Total of 4 processors activated (7969.17 BogoMIPS).


APs
	exynos4_secondary_startup // arch/arm/mach-exynos4/headsmp.S
		b   secondary_startup

		secondary_startup // arch/arm/kernel/head.S
			adr r4, __secondary_data
			ldmia   r4, {r5, r7, r12}       @ address to jump to after
			mov r13, r12            @ __secondary_switched address
			ARM(   add pc, r10, #PROCINFO_INITFUNC ) @ initialise processor
			THUMB( add r12, r10, #PROCINFO_INITFUNC    )
			THUMB( mov pc, r12             )


		__secondary_switched // arch/arm/kernel/head.S
			unsigned int cpu = smp_processor_id();
			printk("CPU%u: Booted secondary processor\n", cpu);
				CPU1: Booted secondary processor
				CPU2: Booted secondary processor
				CPU3: 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  uevent


static SYSDEV_ATTR(online, 0644, show_online, store_online);

store_online // drivers/base/cpu.c
	cpu_down
		_cpu_down
			take_cpu_down
				__cpu_disable
					platform_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;
多核上的x86-linux

// 启动

根据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 18章。

在SMP中,首先要对各个处理器进行初始化。
然后BSP工作,而其它的CPU(AP)则停留在一个初始化好的中断屏蔽状态休眠。
BSP继续进行启动过程,在执行到操作系统的start_kernel之前,BSP所进行的工作与单处理器系统所做的工作是相同的。
在start_kernel中,BSP通过smp_init
	1.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_task
	AP 开始执行指令? // Idle 进程指令吗?
		1. AP接收到IPI,跳转到 trampoline.S
		2. 在 trampoline.S 中 装入gdt和idt,然后跳转到head.s入口执行startup_32
		3. 在 startup_32 中, 根据 ready变量,跳转到 initialize_secondary
		4. 在 initialize_secondary 中, 设置current 的 堆栈指针和指令指针, 函数返回之后转至current->thread.esp,即跳至start_secondary
		5. 在 start_secondary 中
			5.1 cpu_init
			5.2 smp_callin
			5.3 while (!atomic_read(&smp_commenced)) rep_nop();
			5.4 local_flush_tlb
			5.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
Linux多核负载均衡

调度器 和 SMP负载均衡 区别
	调度器 : 关注的 一个CPU上某一些 个体的行为
	SMP负载均衡 : 关注的 SMP 之间 负载是否均衡

CPU负载公式1.0 // 3.8 之前

	CPU负载 = 就绪队列的总权重

	公式问题:
		如果cpu0和cpu1上有分别有1个进程
			cpu0 上的进程 不停歇的用cpu
			cpu1 上的进程 用半秒,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.0
	decay_avg_load = (decay_sum_runnable_time/decay_sum_period_time)*weight

	累积衰减执行时间/累积衰减采样时间


附录
  • 图A
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值