cpu内核

线程,限制的异步操作

懵懂的女人 提交于 2019-12-05 08:58:51
限制的异步操作 异步的计算限制操作要用其他线程执行,比如拼写检查,语法检查,音频转码等,为了设计和实现可伸缩性的、响应灵敏和可靠的应用程序和组件,线程池在多个CPU内核上调度任务,使多个线程能并发工作,从而高效率地使用系统资源,同时提升应用程序的吞吐能力。 理解脑图中线程的异步操作能力,不外乎与计算机处于缜密计算与I/O操作,使用线程池,最大效率的使用计算机资源,并行处理能力。同时避免用户模式与内核模式的上下文切换带来的性能损失,从而导致大量线程处于闲置等待,而浪费系统资源。 掌握线程池的用途、开销之外,最重要的还是以线程池管理,才能更好的控制不可预测的错误,并加以治之。 线程池管理 要想合理地配置线程池,就必须首先分析任务特性,可以从以下几个角度来分析。 任务的性质:CPU密集型任务、IO密集型任务和混合型任务。 任务的优先级:高、中和低。 任务的执行时间:长、中和短。 任务的依赖性:是否依赖其他系统资源,如数据库连接。 性质不同的任务可以用不同规模的线程池分开处理。 CPU密集型任务应配置尽可能小的线程,如配置Ncpu+1个线程的线程池。由于IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程,如2*N cpu。混合型的任务,如果可以拆分,将其拆分成一个CPU密集型任务 和一个IO密集型任务,只要这两个任务执行的时间相差不是太大

【原创】Linux cpu hotplug

匿名 (未验证) 提交于 2019-12-02 21:56:30
Read the fucking source code! --By ³Ѹ A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器 使用工具:Source Insight 3.5, Visio Linux CPU热插拔,支持在系统启动后,关闭任意一个 secondary cpu (在ARM架构中,CPU0为 boot cpu ,不能被关闭),并在需要时重新打开它。 CPU-hotplug 的一个用处是,支持SMP的 Suspend 和 Resume ,这个也是我看 CPU-hotplug 的原因。 代码路径: include/linux/cpuhotplug.h kernel/cpu.c kernel/smpboot.c arch/arm64/kernel/smp.c 关键的数据结构有三种,如下图所示: struct cpuhp_cpu_state :用来存储hotplug的状态; enum cpuhp_state :枚举各种状态,这个会对应到全局数组中的某一项,而该项中会定义回调函数。当然,也可以通过函数接口来设置回调函数。 struct cpuhp_step :Hotplug state machine step,主要定义了函数指针,当跳转到某一个状态时会回调。

性能之巅-操作系统

五迷三道 提交于 2019-12-01 08:54:24
内核 内核管理包括:CPU调度、内存、文件系统、网络协议栈、硬件设备(磁盘、网卡等);其对外提供系统调用接口,用户态的应用程序可以通过有系统调用或者系统库提供的接口来调用内核。 内核调度需要考虑点: (1) 资源竞争 :如CPU竞争,在多进程系统中,CPU资源不足时,内核调度器需要决定哪个进程占用CPU,哪个进程需要等待,这种情况下,系统的某些功能的性能可能就会受到影响; (2) 内核态和用户态间切换的时间开销 :内核是唯一运行在特殊CPU模式下的程序,这种CPU模式叫内核态,这种状态下,设备的一切访问和特权指令都可以执行;应用程序运行在用户态,对内核的特权操作需要通过系统调用切换到内核态;用户态和内核态有自己的软件执行上下文(包括栈和寄存器),这些上下文的切换就会引起CPU耗时; 来源: https://www.cnblogs.com/hpxiaoxi/p/11674381.html

核与线程 CPU 4核8线程 的解释

自闭症网瘾萝莉.ら 提交于 2019-11-30 12:04:50
1、物理CPU: 物理CPU就是计算机上实际配置的CPU个数。 在linux上可以打开cat /proc/cpuinfo 来查看,其中的physical id就是每个物理CPU的ID,能找到几个physical id就代表计算机实际有几个CPU。 在linux下可以通过指令 grep ‘physical id’ /proc/cpuinfo | sort -u | wc -l 来查看物理CPU个数。 2、cpu核数: linux的cpu核心总数也可以在/proc/cpuinfo里面通过指令cat /proc/cpuinfo查看的到,其中的core id指的是每个物理CPU下的cpu核的id,能找到几个core id就代表计算机有几个核心。 也可以使用指令cat /proc/cpuinfo | grep “cpu cores” | wc -l来统计cpu的核心总数。 3、逻辑CPU: 操作系统可以使用逻辑CPU来模拟出真实CPU的效果。在之前没有多核处理器的时候,一个CPU只有一个核,而现在有了多核技术,其效果就好像把多个CPU集中在一个CPU上。 当计算机没有开启超线程时,逻辑CPU的个数就是计算机的核数。而当超线程开启后,逻辑CPU的个数是核数的两倍。 ***实际上逻辑CPU的数量就是平时称呼的几核几线程中的线程数量

内核态和用户态

北城以北 提交于 2019-11-30 07:01:41
内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。 用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。 为什么要有用户态和内核态? 由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态和内核态。 用户态与内核态的切换 所有用户程序都是运行在用户态的, 但是有时候程序确实需要做一些内核态的事情, 例如从硬盘读取数据, 或者从键盘获取输入等. 而唯一可以做这些事情的就是操作系统, 所以此时程序就需要先操作系统请求以程序的名义来执行这些操作. 这时需要一个这样的机制: 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令 这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction) 他们的工作流程如下: 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务. 用户态程序执行陷阱指令 CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问 这些指令称之为陷阱(trap)或者系统调用处理器(system

每-CPU变量

我是研究僧i 提交于 2019-11-29 21:41:58
现代 SMP 操作系统使用每 -CPU 数据 —— 这些数据对每个处理器都是唯一的。通常,每 -CPU 数据存储在一个数组中。数组中的每项对应系统上的一个可能的处理器。如: unsigned long my_percpu[NR_CPUS]; 访问的方式如下: int cpu; cpu = get_cpu(); /* get current processor and disable kernel preemption */ my_percpu[cpu]++; /* ... or whatever */ printk(“my_percpu on cpu=%d is %lu\n”, cpu, my_percpu[cpu]); put_cpu(); /* enable kernel preemption */ 访问每 -CPU 数据唯一需要考虑的就是内核抢占。内核抢占导致了两个问题,如下所示: l 如果运行的代码被抢占并被调度到另一个处理器上运行, cpu 变量不再合法,因为它指向了错误的处理器(通常,代码在获得当前处理器后不能睡眠)。 l 如果另一个任务抢占了当前运行的代码,它可能并发地访问相同处理器上的 my_percpu ,从而导致了一个竞态发生。 然而,任何担心都是多余的,因为 get_cpu() 在返回处理器编号的同时,也会禁用内核抢占。 put_cpu() 则恢复内核抢占

【原创】Linux cpu hotplug

旧街凉风 提交于 2019-11-28 06:21:28
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器 使用工具:Source Insight 3.5, Visio 1. 介绍 Linux CPU热插拔,支持在系统启动后,关闭任意一个 secondary cpu (在ARM架构中,CPU0为 boot cpu ,不能被关闭),并在需要时重新打开它。 CPU-hotplug 的一个用处是,支持SMP的 Suspend 和 Resume ,这个也是我看 CPU-hotplug 的原因。 代码路径: include/linux/cpuhotplug.h kernel/cpu.c kernel/smpboot.c arch/arm64/kernel/smp.c 2. 数据结构 关键的数据结构有三种,如下图所示: struct cpuhp_cpu_state :用来存储hotplug的状态; enum cpuhp_state :枚举各种状态,这个会对应到全局数组中的某一项,而该项中会定义回调函数。当然,也可以通过函数接口来设置回调函数。 struct cpuhp_step :Hotplug state machine step,主要定义了函数指针

Linux PSCI框架

老子叫甜甜 提交于 2019-11-27 16:41:39
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器 使用工具:Source Insight 3.5, Visio 1. 介绍 PSCI, Power State Coordination Interface ,由ARM定义的电源管理接口规范,通常由Firmware来实现,而Linux系统可以通过 smc/hvc 指令来进入不同的 Exception Level ,进而调用对应的实现。 那问题来了?为什么要把这个放到Firmware中去实现呢?原因是ARMv8架构,引入了Virtualization,Security等概念,CPU boot、shutdown、suspend/resumen等操作不再如传统那样单纯了。我们不再是我们,我们依然是我们。 2. 分析 代码路径: arch/arm64/kernel/psci.c drivers/firmware/psci.c 2.1 总体框架 Linux对CPU core的操作抽象出了结构 struct cpu_operations ,开放给上层软件调用, struct cpu_operations 统一对底层的CPU及power等资源进行统一操作,完美。

预科第一天

烂漫一生 提交于 2019-11-27 04:39:03
计算机硬件:(计算机是奴隶) 1.五大组成: 控制器 运算器 储存器I/O: 内存+外存 输入设备 input 输出设备 outinput 2.CPU 控制器+运算器=CPU 功能: 控制+运算 工作方式: 取指---->分析--->执行 软件的执行都是由CPU执行,所有的软件最终都要转换成cpu的指令集去执行 一个二进制成为一个bit: 111 cpu具有向下兼容性 总结重点: cpu的功能 cpu从内存取数据 x86-64 完整的计算机系统: 应用程序 操作系统 计算机硬件 什么是操作系统: 是一个协调、管理、控制计算机硬件与软件的控制程序 操作系统分成两部分: 接口程序:将硬件的功能封装成简单的接口,用来给应用软件或者给用户使用 内核:具体控制硬件,对下 内核态与用户态(了解) cpu的两种工作状态 用户态:cpu执行用户程序/应用程序所处的状态,处于用户状态不能控制硬件 内核态:cpu执行操作系统内核所处的状态,处于内核态能够控制硬件 应用程序的启动: (重点!!!) 前提:先启动操作系统 1、向操作系统提交程序启动文件的路径 2、操作系统根据文件路径把硬盘的数据读入内存 3、操作系统调用cpu来执行内存中刚刚读入的程序代码 编程语言分类: 机器语言 :用二进制指令编程 优点:执行效率高 缺点:开发效率低 学习难度高 汇编语言 :用英文标签代替二进制指令