摘要:
一、分段机制 1、分段机制的原理图 2、段选择子 3、段偏移量 例如,我们将上面的虚拟空间分成以下 4 个段,用 0~3 来编号。每个段在段表中有一个项,在物理空间中,段的排列如下图的右边所示。 4、段表 一个段表项由段基地址 base、段界限 limit,还有一些标识符组成 5、分析 分页机制本质 阅读全文
摘要:
一、mmap原理 在虚拟内存空间那一节,我们知道,每一个进程都有一个列表vm_area_struct,指向虚拟地址空间的不同内存块,这个变量名字叫mmap 其实内存映射不仅仅是物理内存和虚拟内存之间的映射,还包括将文件中的内容映射到虚拟内存空间,这个时候访问内存空间就能够访问到文件里面的数据。 而仅 阅读全文
摘要:
一、怎么查看系统上下文切换情况 通过前面学习我么你知道,过多的上下文切换,会把CPU时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和回复上,缩短进程真正运行的时间,成了系统性能大幅下降的一个元凶 既然上下文切换对系统性能影响那么大,你肯定迫不及待想知道,道题怎么查看上下文切换 1、系统总的上下文切 阅读全文
摘要:
一、数组的基本概念 数组是一种线性数据结构,它用连续的内存空间,来存储一组具有相同类型的数据 1、线性表 第一线性表:顾名思义,线性表就是数据排成像一条线一样的结构,每个线性上的数据最多只有前后两个方向,其实除了数组、链表、队列、栈等也是线性结构 而与它相对立的概念是非线性表,比如二叉树、堆、图等, 阅读全文
摘要:
一、内核页表 和用户态页表不同,在系统初始化的时候,我们就要创建内核页表了 我们从内核页表的根swapper_pg_dir开始找线索,在linux-5.1.3/arch/x86/include/asm/pgtable_64.h中就能找到它的定义 1、swapper_pg_dir指向内核最顶级的目录p 阅读全文
摘要:
一、顺序乘法的实现规程 1、十进制中13乘以9,转换成二进制整个计算的过程 乘法口诀表了,因为单个位置上,乘数只能是0或者1,所以实际的乘法,就退化成了位移和加法 2、我们可以用一个开关来决定,下面的输出是完全复制输入,还是讲输出全部设置为0 3、把对应的线路错位连接,就可以起到位移的作用 4、乘法 阅读全文
摘要:
一、引子 1、计算两方面的原因 2、内存管理机制 二、独享内存空间的原理 1、会议室和物理内存的关系 和会议室一样,内存都被分成一块块儿的,都编号了号,例如3F-10就是三楼十号会议室、内存页有这样一个地址。这个地址是实实在在的地址,通过这个地址我们就能够定位到物理内存地址 2、会产生什么问题呢? 阅读全文
摘要:
一、上节回顾 上一讲,我们看到了如何通过电路,在计算机硬件层面设计最基本的单元,门电脑,我给你看的门电路非常简单,只能做简单的“与(AND)”“或(OR)”“NOT(非)”和“异或(XOR)”, 这样最基本的单比特逻辑运算。下面这些门电路的标你需要非常熟悉,后续的电路都是由这些门电路组合起来的。 这 阅读全文
摘要:
一、从信使发展史 1、 公元前490年是如何传信 2、中国古代的军队是如何传信 3、灯塔烽火台是如何传信的? 4、以上都存在的问题 二、电报 1、电报机的两种信号 一个莫尔斯电码的电报机 2、电报机的优势 3、电报机如何工作 4、蜂鸣器+长长的电线+按钮开关 三、继电器给跑不动的信号续一秒 1、电阻 阅读全文
摘要:
一、小内存的分配基础 1、kmem_cache_alloc_node的作用 通过这段代码可以看出,它调用了kmem_cache_alloc_node函数,在task_struct的缓存区域task_struct分配了一块内存 1、在系统初始化的时候,task_struct_cachep 会被 kme 阅读全文
摘要:
一、程序装载面临的挑战 1、装载需要满足的条件 1、可执行程序加载后占用的内存空间应该是连续的 2、我们需要同时加载很多个程序,并且不能让程序自己规定在内存中加载的位置 2、如何解决以上问题 1、放到内存里 2、我们只关心虚拟内存地址就行了 1、什么是虚拟内存地址 我们把指令里用到的内存地址叫做虚拟 阅读全文
摘要:
一、理解二进制的“逢二进一 1、什么是二进制? 十进制计数使用10作为基础、二进制使用2作为基数、二进制的数位就是2^n的形式 2、计算机为什么使用二进制? 二进制的数据表达具有抗干扰能力强、可靠性高的优点;二进制非常适合逻辑运算 3、13这个十进制转化成二进制,需要经历一下几个步骤: 因此,对应的 阅读全文
摘要:
一、案例环境描述 1、环境准备 2CPU,4GB内存 预先安装docker sysstat工具 2、温馨提示 案例中 Python 应用的核心逻辑比较简单,你可能一眼就能看出问题,但实际生产环境中的源码就复杂多了。所以,我依旧建议,操作之前别看源码,避免先入为主,要把它当成一个黑盒来分析。这样 你可 阅读全文
摘要:
一、磁盘性能指标 1、使用率 2、饱和度 3、IOPS 4、吞吐量 5、响应时间 6、性能测试工具 二、磁盘I/O观测 1、每块磁盘的使用率(指标实际上来自/proc/diskstats) 2、iowat指标图解 3、需要特别注意指标 三、进程I/O观测 1、pidstat 查看进程I/O情况 2、 阅读全文
摘要:
一、磁盘 1、机械磁盘 2、固态磁盘 3、相同磁盘随机I/O比连续I/O慢很多 4、最小单位 5、接口 6、RAID陈列卡 7、网路存储 二、通用块层 1、概念 2、第一功能 3、第二功能 4、I/O调度算法 三、I/O栈 1、Linux存储系统I/O栈全景图 2、全景图详解 1、文件系统层 2、通 阅读全文
摘要:
一、索引节点和目录 1、索引节点 2、目录项 3、关系 为了帮助你理解目录项、索引节点以及文件数据的关系,我画了一张示意图,你可以对照这张图,来回忆刚刚讲过的内容,把只知识和细节串联起来 4、Slabs 5、系统格式化 二、虚拟文件系统 1、Linux文件系统的架构图 这里、我画了一张Linux文件 阅读全文
摘要:
一、为什么需要动态链接库 1、链接在生活中的应用 链接 其实有点像我们日常生活中的标准化、模块化生产、我们有一个可以生产标准螺帽的生产线,就可以生产很多个不同的螺帽,只有需要螺帽,我们就可以通过链接的方式、去复制一个出来,放到需要的点,大道汽车、小到信箱 2、静态链接的缺点 但是、如我们有很多个程序 阅读全文
摘要:
一、为什么我们需要程序栈? stack overflow 就是栈溢出 函数间的互相调用,在计算机指令层面是怎么实现的,以及生命情况下会产生栈溢出这个错误 1、测试用例 和前面几讲一样,我们还是从一个非常简单的C程序function_example.c 看起。 1、这个程序定义了一个简单的函数 add 阅读全文
摘要:
一、为什么会Permission denied 1、测试用例 不知道你注意到没,在过去的几节,我们通过gcc生成的文件和objdump获取到的汇编指令都有些小小的问题,我们先把前面的函数示例,拆分成两个文件add_lib.c 和 link_example.c。 1、创建示例文件 1、add_lib. 阅读全文
摘要:
一、CPU 是如何执行指令的? 1、软件程序员的理解 写好的代码变成了指令之后、是一条条顺序执行的就可以了 2、CPU的逻辑组成 3、寄存器 N 个触发器或者锁存器,就可以组成一个 N 位(Bit)的寄存器,能够保存 N 位的数据。比方说,我们用的 64 位 Intel 服务器,寄存器就是 64 位 阅读全文
摘要:
一、缓存命中率 1、引子 1、我们想利用缓存来提升程序的运行效率,应该怎么评估这个效果呢? 用衡量缓存好坏的指标 2、有没有哪个指标可以衡量缓存使用的好坏呢? 缓存命中率 3、什么是缓存命中率? 所谓缓存命中率,是指直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比。命中率越高,表示使用缓存 阅读全文
摘要:
一 内存性能指标 1、系统内存使用情况 共享内存:是通过tmpfs实现的,所以它的大小也就是tmpfs使用的大小了tmpfs其实也是一种特殊的缓存 可用内存:是新进程可以使用的最大内存它包括剩余内存和可回收缓存。 缓存包括两部分: 1、一部分是磁盘读取文件的页缓存,用来缓存从磁盘读取的数据,可以加快 阅读全文
摘要:
问题 1: 使用 perf 工具时,看到的是 16 进制地址而不是函数名 1、分析过程 在 CentOS 系统中,使用 perf 工具看不到函数名,只能看到一些 16 进制格式的函数地址。 其实,只要你观察一下 perf 界面最下面的那一行,就会发现一个警告信息Failed to open /opt 阅读全文
摘要:
问题1:性能工具版本太低,导致指标不全 解决方案1: 这是使用 CentOS 的同学普遍碰到的问题。在文章中,我的pidstat 输出里有一个 %wait 指标,代表进程等待 CPU 的时间百分比, 这是 systat 11.5.5 版本才引入的新指标,旧版本没有这一项。而 CentOS 软件库里的 阅读全文
摘要:
一、free数据的来源 1、碰到看不明白的指标时该怎么办吗? 不懂就去查手册。用 man 命令查询 free 的文档、就可以找到对应指标的详细说明。比如,我们执行 man fre... 2、free数据的来源 Buffers 是内核缓冲区用到的内存,对应的是/proc/meminfo 中的 Buff 阅读全文
摘要:
一、内存映射 内存管理也是操作系统最核心的功能之一,内存主要用来存储系统和应用程序的指令、数据、缓存等 1、我们通说的内存指的是物理内存还是虚拟内存? 我们通常说的内存容量,其实这指的是物理内存,物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM)。只有内核才可以直接访问物理内存 阅读全文
摘要:
一、性能优化方法论 不可中断进程案例 二、怎么评估性能优化的效果? 1、评估思路 2、几个为什么 1、为什么要选择不同维度的指标? 应用程序和系统资源是相辅相成的关系 2、性能优化的最终目的和结果? 好的应用程序 3、为什么必须要使用应用程序的指标,来评估性能优化的整体效果? 系统优化总是为应用程序 阅读全文
摘要:
一、中断的魅力 1、中断在生活的魅力 比如你订了一份外卖,但是不确定外卖什么时候送到,也没有别的方法了解外卖的进度,但是,配送员送外卖是不等人的,到了你这儿没人取的话,就直接走人了。所以你指能苦苦等着,时不时去门口看看外卖送到没,而不能干其他事情。 不过呢,如果你在订外卖的时候,你就跟配送员约定好, 阅读全文
摘要:
一、环境准备 1、在第6节的基础上安装dstat 2、故障现象 ①iowait太高,导致平均负载升高,并且达到了系统CPU的个数②僵尸进程不断增多 二、iowait升高的原因分析 1、用dstat 命令同时查看cpu和i/o对比情况 (如 dstat 1 10 间隔1秒输出10组数据),通过结果可以 阅读全文
摘要:
一、坏境准备 1、拓扑图 2、安装包 在第9节的基础上 在VM2上安装hping3依奈包 在VM2上安装hping3的安装 3、实验环境准备 1、运行案例终端一 2、确认nginx正常启动(终端二) 3、运行 hping3 命令,来模拟 Nginx 的客户端请求(终端二) 二、分析过程 1、查看系统 阅读全文
摘要:
一、进程的状态 1、命令查看 2、进程状态图解 向一个进程发送SIGSTOP 信号,它就会因响应这个信号变成暂停状态(Stopped);再向它发送 SIGCONT 信号,进程又会恢复运行(如果进程是终端里直接起动的, 则需要你用fg命令,回复到前台运行) 而当你的用的调试器调试一个进程是,在使用断点 阅读全文
摘要:
一、环境准备 1、安装软件包 终端1 机器配置:2 CPU,8GB 内存 预先安装 docker、sysstat、perf等工具 终端2 机器配置:1 CPU,2GB 内存 预先安装ab 等工具 2、实战拓谱图 二、操作和分析 1、发现问题 首先在第一个终端执行的命令来运行Nnginx和PHP应用 阅读全文
摘要:
一、环境准备 1、安装软件包 终端1 机器配置:2 CPU,8GB 内存 预先安装 docker、sysstat、perf等工具 终端2 机器配置:1 CPU,2GB 内存 预先安装ab 等工具 2、实战拓谱图 3、环境模拟 终端一 终端二 测试nginx是否启动 性能测试 继续压力测试 二、定位问 阅读全文
摘要:
一、什么是CPU的使用率 1、你最常用什么指标来描述系统的CPU性能? 我想你的答案,可能不是平均负载,也不是CPU上下文切换,而是另一个更直观的指标CPU使用率 CPU使用率到底是怎么算出来的吗? 1、如何设置节拍率 2、内核提供的用户节拍率是多少? 为了方便用户控件程序,内核还提供了一个用户控件 阅读全文
摘要:
一、性能指标 1、性能指标思维导图 2、CPU使用率 3、CPU平均负载 4、CPU缓存的命中率 CPU 在访问内存的时候,免不了要等待内存的响应。为了协调这两者巨大的性能差距,CPU 缓存(通常是多级缓存)就出现了 二、性能工具 掌握了 CPU 的性能指标,我们还需要知道,怎样去获取这些指标,也就 阅读全文
摘要:
一、关于上下文切换的几个为什么 1、 上下文切换是什么? 上下文切换是对任务当前运行状态的暂存和恢复 2、 CPU为什么要进行上下文切换? 当多个进程竞争CPU的时候,CPU为了保证每个进程能公平被调度运行,采取了处理任务时间分片的机制,轮流处理多个进程,由于CPU处理速度非常快,在人类的感官上认为 阅读全文
摘要:
一、功耗:CPU的“人体极限” 程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time CPI和指令数都不太容易,越是研发CPU的硬件工程师们就从COU主频下手 1、为什么奔腾 4 的主频没能超过 3.8GHz 的障碍呢? 是因为功耗,我们的CPU,一般都被叫做超大规模集成电 阅读全文
摘要:
一、性能到底指的是什么? 买新电脑的时候,我们会说:"原来的电脑性能跟不上了" 写程序的时候,我们会说:"这个程序西能需要优化一下" 1、"性能"到底指的是什么? 在计算机组成原理乃至体系结构中"性能"都是最重要的一个主题。我在前面说过学习和研究计算机组成原理,就是在理解计算机是怎么运作的, 以及为 阅读全文
摘要:
一、为什么需要复杂度分析? 1、测试结果非常依赖测试环境 Core i9 Core i3 在机器A上:a 代码执行的速度比 b 代码要快 在机器B上:b 代码执行的速度比 a 代码要快 2、测试结果受数据规模的影响很大 测试数据有序度不一样 测试数据规模太小不一样所以、我们需要一个不用具体的测试数据 阅读全文
摘要:
一、时间和空间复杂度基本概念 1、影响系统性能的因素有哪些? 影响系统性能的因素有很多,把这些因素分为三大类 1、算法理论上的计算复杂度 2、开发实现的方案和硬件设备的规格 3、算法理论上的计算复杂度、开发实现的方案和硬件设备的规格 2、复杂度是什么? 算法复杂度是一个比较抽象的概念,通常只是一个估 阅读全文