服务器之 ECC 内存的工作原理
大家好,我是飞哥!在开始今天的分
日常Bug排查-连接突然全部关闭
日常Bug排查系列都是一些简单Bug的排查。笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材。
这样才能玩转Linux内核之CPU篇
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了三个课程:手写JVM、手写OS及带你用纯汇编写OS、手写64位多核OS及
Linux内核这样学才能学会(内存篇)
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了三个课程:手写JVM、手写OS及带你用纯汇编写OS、手写64位多核OS及
聊聊 Linux 中断机制
中断的历史原因在聊中断机制之前,我想先和大家聊一聊中断机制出现的前因后果。最一开始计算机操作系统的设计是能够一次性的执行所有的计算任务的,这被称为顺序执行,也是批处理操作系统(Batch system)。顺序执行的意思是一个任务接着一个任务的依次执行,就像我们编写代码的时候,我们肯定是写完一行代
【全网首发】一步一图带你构建 Linux 页表体系—详解虚拟内存如何与物理内存进行映射
笔者这次想让虚拟内存和物理内存两者一起动态联动起来,在这个联动的过程中将之前的这些静态知识点统统串联起来,形成一条内存管理的主线
Linux上文件监控的踩坑分享
在高磁盘IO的主机上、不同版本的内核上以及海量监控目标中,将会面临哪些问题呢?业务性能与安全性如何做更好地取舍均衡?
【全网首发】为什么新版内核将进程pid管理从bitmap替换成了radix-tree?
今天我来给大家聊聊为什么 Linux 内核要将 bitmap 替换成基数树,最后也看看这次替换的性能效果。
操作系统
处理机调度
在多道程序环境下,内存中存在着多个进程,进程的数目往往多于处理机的数目。这就要求系统能按某种算法,动态地将处理机分配给一个处于就绪状态的进程,使之执行。分配处理机的任务是由处理机调度程序完成的。 对于大型系统运行时的性能,如系统吞吐量、资源利用率、作业周转时间或响应的及时性等,在很大程度上都取决于
如果让你来设计中断机制
哈喽,我是子牙,一个很卷的硬核男人从这篇文章开始,准备系统性给大家讲讲中断这个玩意。对于中断,很多小伙伴为什么学不明白呢?因为中断很底层,底层到CPU层面,有些中断更是由CPU+操作系统配合实现的。作为一个写过操作系统的男人,我就以我独特的手法带大家玩转中断本系列文章预计分四篇:深刻理解
【全网首发】盘点内核中常见的CPU性能卡点
评估运行应用程序运行状况时,上下文切换、CPU迁移、缺页中断都是需要被关注的性能指标。
Linux上文件监控的踩坑分享
前言在Linux主机安全产品HIDS中,文件监控是特别常见的需求,在实现方案上,Linux内核层提供了文件变动的通知机制fsnotify,然而,在高磁盘IO的主机上、不同版本的内核上以及海量监控目标中,将会面临哪些问题呢?业务性能与安全性如何做更好地取舍均衡?今天,我的小伙伴阿松xjas给大家分
图文详解 Linux 分页机制!
分页机制可以用于任何一种分段机制,也可以理解为先有分段机制才有分页机制,这是由于历史原因,分段机制要比分页机制更轻,先出现的分段后出现的分页。
【全网首发】深度解析 slab 内存池回收内存以及销毁全流程
笔者详细地为大家介绍了 slab cache 进行内存分配的整个链路实现,本文我们就来到了 slab cache 最后的一部分内容了,当申请的内存使用完毕之后,下面就该释放内存了。
人人都应该知道的CPU缓存运行效率
CPU除了利用率之外,还有很容易被人忽视的指标,就是指令的运行效率。
图文详解 Linux 分段机制!
上一篇聊到分段机制是为了提供了隔绝代码、数据和堆栈区域的机制,能够使得多个程序运行在同一个内存空间中不会相互干扰,这是对内存平坦模型的一种保护。内存经过分段机制后会变为一个个的段,这称为多段模型。多段模型能够利用分段机制的功能提供由硬件增强代码、数据结构、程序和任务的保护措施。现在我们知道了分段
保护模式下的内存管理
我们知道,内存可以看做一个非常大的数组,我们想要查找内存中某个元素的话,会通过数组的下标来指定,内存也是如此,不过这有一个前提是这个数组是由一组有序的字节组成的,在这个有序的字节数组中,每个字节都有一个唯一的地址,这个地址也叫做内存地址。内存中存储着很多对象,每个对象是由不同字节组成的,比如一个
【全网首发】深入理解 slab cache 内存分配全链路实现
最后我们介绍了 slab 所在内存页的详细初始化流程,其中包括了对  slab freelist 链表的初始化,以及 slab 对象的初始化~
多图详解Linux内存分配器slub
slub的数据结构相对于slab来说要简单很多。并且对外接口和slab兼容。所以说,从slab的系统更换到slub,可以说是易如反掌。
译 | Linux perf_events Off-CPU Time Flame Graph
I’ve been asked how to do these several times, so here’s a quick blog post.我已经被问过几次如何做到这些,所以这里有一篇简短的博客文章。CPU Flame Graphs are great for understand
【全网首发】从内核源码看 slab 内存池的创建初始化流程
slab cache 机制确实比较复杂,涉及到的场景又很多,大家读到这里,我想肯定会好奇或者怀疑笔者在上篇文章中所论述的那些原理的正确性,毕竟 talk is cheap ,所以为了让大家看着安心,理解起来放心,从本文开始,我们将正式进入 show you the code 的阶段
【全网首发】如何正确获取容器的CPU利用率?
如何正确地获取容器中的 cpu 利用率?容器 cpu 使用率的指标项为什么比物理机上少了 nice/irq/softirq?
【全网首发】内核是如何给容器中的进程分配CPU资源的?
容器中的核是真的逻辑核吗?Linux 是如何对容器下的进程进行 CPU 限制的,底层是如何工作的?容器中的 throttle 是什么意思?为什么关注容器 CPU 性能的时候,除了关注使用率,还要关注 throttle 的次数和时间?
一文带你搞懂 mmap 技术
当我们对内存特定区域进行读写时,操作系统便会检测到这一操作,然后根据不同场景去做读磁盘或者写磁盘的操作。
BPF内核实现详解
BPF的字面上意思Berkeley Packet Filter意味着它是从包过滤而来。如果在开始前对BPF缺乏感性的认识建议先看一下参考文档:“3.1、Berkeley Packet Filter (BPF) (Kernel Document)”、“3.2、BPF and XDP Reference
操作系统
高效入门eBPF
今天主要进行eBPF的入门介绍,说起eBPF就不得不先了解一下eBPF的前身BPF。eBPF是extended BPF 的简称,而BPF的全称是Berkeley Packet Filter,即伯克利报文过滤器。
【全网首发】Linux 中 CPU 利用率是如何算出来的?
top 输出的利用率信息是如何计算出来的,它精确吗? ni 是 cpu 在处理啥时的开销? wa 代表的是 io wait,那么这段时间中 cpu 到底是忙碌还是空闲?以上问题本文将为你解答!
io_uring,干翻 nio!
随着一步步的优化,系统调用这个大家伙,调用次数越来越少了。
BCC小白写测试上下文切换延时程序
学习兴趣起源于论文《Linux上下文切换性能测试的一种新方法》的阅读,该论文提出了一种在用户态编写应用程序并且调用schedu_yield()系统调用主动放弃处理器实现任务切换的测试方法,然后与传统的使用管道读写切换、在内核态测试context_switch()函数的开销等方法进行了对比分析
CPU性能指标提取及源码分析
这篇报告主要根据CPU性能指标——运行队列长度、调度延迟和平均负载,对系统的性能影响进行简单分析。
【全网首发】从进程栈内存底层原理到Segmentation fault报错
这篇文章中我给大家介绍进程栈的初始化过程、栈对应的物理内存是如何分配的、以及栈的自动增长。也会看到“Segmentation fault (core dumped)”产生的的根本原因。
【全网首发】深度剖析 Linux 伙伴系统的设计与实现
本文笔者就为大家完整地介绍一下伙伴系统这部分的内容,我们将基于内核 5.4 版本的源码来详细的讨论一下伙伴系统在内核中的设计与实现
内核优化之 PSI 篇:快速发现性能瓶颈,提高资源利用率
一个进程的运行过程实际上是一个不断等待不断执行的过程,过多的等待会对进程的吞吐和延时造成负面影响,是否有一种内核机制能够量化这些等待时间呢?
【全网首发】Linux 中的负载高低和 CPU 开销并不完全对应
负载是查看 Linux 服务器运行状态时很常用的一个性能指标。但是很多同学都没有搞清楚的是,负载高低状态并不是和CPU利用率完全对应的。
内存管理学习笔记
物理内存分配设计有两个重要的评价维度。一方面,物理内存分配器要追求更高的内存资源利用率,即尽可能减少资源浪费。另一方面,物理内存分配器要追求更好的性能,主要是尽可能降低分配延迟和节约CPU资源。
干货|disk.usage告警,看这一遍就够了
看到有线上ECS磁盘告警持续一天了。问了下,已经处理过,该删都删了,但是告警还是消不掉。目前超的不是太多,就没有再管了。如果一直触发告警,担心影响到处理其它重要告警,就花时间去处理一下
【全网首发】万字图文 | 你写的代码是如何跑起来的?
大家好,我是飞哥!今天我们来思考一个简单的问题,一个程
Docker踩坑,又涨知识了
背景 新上线一个批处理功能,基于Docker发布的。上线之后出现一个问题,Docker批处理生成的文件目录,别的应用程序无法访问。之前也在使用Docker,但并未涉及到文件共享的问题,还真没留意到。经过一系列排查,终于找到原因。这篇文章就记录一下排查过程中使用到的技术点,也帮大家重温一下。涉
TCP网络包传输的整个过程
承接上文如何排查网络丢包问题上文对于网络问题分析的还不够精细,比如有时候网络资源可能没有达到瓶颈,并且没有丢包产生,但这个时候网络传输速率就是很慢或者是有丢包产生了,但是却无法知道丢的是具体哪个包,没有办法知道整个tcp传输过程的具体情况,所以需要一种更加精细的去看网络包传递过程的方法即抓包。用
如何排查网络丢包问题
要明白一个知识点,首先要快速的对这个知识点建立一个概念模型,有了概念模型之后,再在这个模型上不断的去填充一些细节的东西,会有助于我们把握知识的本质。带宽是什么?带宽是网络被发送的能力,它会受到网卡复制网络包到内核缓冲区或者搬运内核缓冲区的网络包到网卡缓冲区能力的影响,也会受到接收窗口或拥塞窗口的
接口响应延迟案例分析
本文以实际案例介绍下:关于接口响应慢时所要排查的一些角度以及在对程序进行分析系统延迟的时候所用到的一些工具。系统延迟的本质是由于cpu在这段时间里没有去及时的运算你的应用程序代码,导致你的应用程序代码在阻塞之后,再被调度回来的整个时间间隔会过长,从用户的角度看,就会表现为整个接口延迟会过高,响应时
磁盘IO异常排查案例
问题现象服务使用的是golang语言,跟mysql数据库打交道用的是go-mysql-driver,当时系统的测试环境频繁的爆出一个invalid connection的错误,但实际上拿这个sql执行的时候却是正常执行的,也是在正常时间返回的。问题分析首先由于报的是无效连接的错误,首先考虑到是
【全网首发】你的新进程是如何被内核调度执行到的?
大家好,我是飞哥!在前面的文章《Linux进程是如何创建出来的?》 和 《聊聊Linux中线程和进程的联系与区别》 中我们都讲过了,进程和线程在创建出来后会加入运行队列里面等待被调度。但咱们之前提的太笼统了。所谓的运行队列到底长什么样子、新进程是如何被加入进来的、调度是如何选择一个新进程的、新进
深入理解Linux进程管理
作者简介:程磊,某手机大厂系统开发工程师,阅码场荣誉总编辑,最大的爱好是钻研Linux内核基本原理。目录一、进程基本概念1.1 进程与程序1.2 进程与线程1.3 进程与内核1.4 进程与内存1.5 进程运行状态1.6 进程亲缘关系二、进程的实现2.1 基本原理2.2 进程
【译】那些没有人教你的最重要的Linux命令(高手私藏篇)
这些并非常见的必备20个命令,或者10个基础命令,而是一个高手分享的不常见的一些私家命令列表!
利用可挂载内核模块进行高负载处理
概述本程序在谢宝友老师[1]所提供的高负载处理模块的代码[2]基础上,根据5.15版内核的变化,修改出的。本程序是一个内核模块,用于监控系统负载,在平均负载超过4时,打印所有进程的调用栈。本程序分为三个文件:main.c、load.h、Makefile。其中,main.c是本内核模块的主程序;l
【全网首发】一步一图带你深入理解 Linux 虚拟内存管理
写在本文开始之前…从本文开始我们就正式开启了 Linux 内核内存管理子系统源码解析系列,笔者还是会秉承之前系列文章的风格,采用一步一图的方式先是详细介绍相关原理,在保证大家清晰理解原理的基础上,我们再来一步一步的解析相关内核源码的实现。有了源码的辅证,这样大家看得也安心,理解起来也放心,最起码可
寻找已经发生高上下文切换问题的原因
作者介绍:张子恒,西安邮电大学研一在读,导师陈莉君老师,刚刚踏入Linux内核学习的小白一枚。段落引用背景介绍:问题:vmstat只能实时统计进程上下文切换的次数,具有一定的局限性,如果已经发生了高上下文切换的情况,那么该如何找到高上下文切换问题的原因在哪?想法:进程切换最核心的地方就
Fork & 写时复制COW原理
本篇文章的内核的代码是 Linux 0.11上一篇文章我们看了计算机系统中的异常和中断是怎么做的,这篇文章我们来看看 fork 是如何利用异常实现进程的创建,以及 COW 实现原理使用fork 函数是一个系统调用函数,它是用来创建一个新的进程,如下:#include <unistd.h
【全网首发】聊聊Linux中线程和进程的联系与区别!
大家好,我是飞哥!关于进程和线程,在 Linux 中是一对儿很核心的概念。但是进程和线程到底有啥联系,又有啥区别,很多人还都没有搞清楚。在网上对进程和线程的讨论中,很多都是聚集在这二位有啥不同。但事实在 Linux 上,进程和线程的相同点要远远大于不同点。在 Linux 下的线程甚至都被称为了轻
一次磁盘占用率 100% 的排查记录
你好,我是悟空。最近遇到一个服务器的问题:磁盘满了,占用率 100%~这个问题太常见了,于是先来排查一波是哪些文件占用了大量磁盘。一、排查磁盘占用率100%1.1 查看磁盘使用的大致情况第一个命令就是 df -h,来查看磁盘的占用情况。df 是 disk free 的缩写,用于显示目前在 L
Linux进程是如何创建出来的?
大家好,我是飞哥!在 Linux 中,进程是我们非常熟悉的东东了,哪怕是只写过一天代码的人也都用过它。但是你确定它不是你最熟悉的陌生人?我们今天通过深度剖析进程的创建过程,帮助你提高对进程的理解深度。在这篇文章中,我会用 Nginx 创建 worker 进程的例子作为引入,然后带大家了解一些进程
给32位系统装8g内存条能用吗?为什么?
关于32位和64位,这个概念一直让人比较懵。在买电脑的时候,我们看到过32位和64位CPU。下软件的时候,我们也看到过32位或64位的软件。就连装虚拟机的时候,我们也看过32位和64位的系统。在写代码的时候,我们的数值,也可以定义为int32或者int64。我们当然很清楚,装软件的时候,
学习性能优化,如何模拟各种故障场景?
大家好,我是树哥!性能优化这个专题,是每个想成为架构师的小伙伴必须学习的知识。在学习性能优化的过程中,我们要学会各种 Linux 命令和工具去检测服务器的 CPU、内存等资源。很多情况下,我们的 CPU、内存资源都是很平稳的,不利于我们学习这些性能检测命令。今天就介绍一个 Linux 系统压力测
记一次网络相关的技术问题答疑
大家好,我是飞哥!前段时间飞哥参加了一期 OSChina 官方举办的「高手问答」栏目。在这个栏目里,我和 OSChina 的网友们以《深入理解 Linux 网络》为主题,对大家日常所关心的一些问题展开了一些技术探讨。今天我把这个活动中探讨的内容都记录下来,分享给大家!问题1:虚拟化时代,655
网络编程里的Socket
当今互联网中的大千世界都驻足于TCP/IP协议之上。而通过Socket操作TCP/IP协议已经成为了事实上的标准,Socket甚至已经成为了网络编程的同义词。当然了,由于我们早已习惯于各种封装/框架,很少裸用Socket,所以对它的理解始终有一种模糊的感觉。今天,我就来介绍一下Socket。S
从linux源码看socket的close
笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的close(以tcp为例且基于linux-2.6.24内核版本)TCP关闭状态转移图:众所周知,TCP的close过程是四次挥手,状态
从linux源码看epoll
前言在linux的高性能网络编程中,绕不开的就是epoll。和select、poll等系统调用相比,epoll在需要监视大量文件描述符并且其中只有少数活跃的时候,表现出无可比拟的优势。epoll能让内核记住所关注的描述符,并在对应的描述符事件就绪的时候,在epoll的就绪链表中添加这些就绪元素,并
从linux源码看socket的阻塞和非阻塞
笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。大部分高性能网络框架采用的是非阻塞模式。笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。本文源码均来自采用Linux-2.6.24内核版本。一个TC
Docker容器内DNS异常故障处理
容器DNS异常处理问题详情最近公司开发使用的一个 maven 仓库(nexus) 说同步阿里云Maven 源失败,这个仓库是使用容器部署的。排查问题首先就是登陆到容器, ping www.baidu.com 发现网络不可达,确定是容器网络不能访问外网。第二步查看容器的网络模式,使用的桥
一次死锁导致CPU异常飘高的整个故障排查过程
2021年4月2号,晚上10.45分左右,线上业务异常,后排查 线上服务器CPU 异常高,机器是 16核 64G的。但是实际负载已经达到了 140左右。
平均负载与 CPU 使用率,到底有啥区别?
大家好,我是树哥。在性能优化中,我们经常会关注 CPU 平均负载这个指标。但如果让你来跟我解释一下什么是平均负载,你能说得清楚吗?它跟 CPU 使用率有什么区别?我想可能很多人都数不清楚,今天我们就来盘一盘 CPU 平均负载这个指标!平均负载与 CPU 使用率,到底有啥区别?Linux 进程
Linux swap分区工作原理及问题定位
一、文件页和匿名页1、文件页当发生了内存泄漏时,或者运行了大内存的应用程序,导致系统的内存资源紧张时,系统又会如何应对呢?内存回收和 OOM 杀死进程。内存资源紧张导致的 OOM(Out Of Memory),指的是系统杀死占用大量内存的进程,释放这些内存,再分配给其他更需要的进程。内存回收
【译】Linux——内存管理是如何工作的?
与 CPU 管理一样,内存管理也是操作系统的核心功能之一。内存主要用于存储系统和应用程序指令、数据、缓存等。内存映射我们通常所说的内存容量,其实是指物理内存。物理内存也称为主内存,大多数计算机使用的主内存是动态随机存取存储器(DRAM)。只有内核可以直接访问物理内存。那么,进程想要访问内存时应该
【译】Linux 内存中的缓冲区(Buffer)与缓存(Cache)
Buffer 和 Cache 的定义:Buffer:是原始磁盘块的临时存储,即将缓存数据写入磁盘。它通常不会很大(大约 20MB)。这样,内核就可以将分散的写入集中起来,从而对磁盘写入进行统一优化。例如,多个小的写入可以合并为一个大的写入等。Cache:是用于从磁盘读取文件的页面缓存,用于缓
【全网首发】CPU 是如何与内存交互的?
这篇文章主要整理了一下计算机种的内存结构,以及 CPU 是如何读写内存种的数据的,如何维护 CPU 缓存中的数据一致性。什么是虚拟内存,以及它存在的必要性。如有不对请多多指教。概述目前在计算机中,主要有两大存储器 SRAM 和 DRAM。主存储器是由 DRAM 实现的,也就是我们常说的内存,在
嵌入式linux-CPU性能优化小记
嵌入式业务应用运行导致系统sys CPU使用率飚高,本文记录本次性能分析定位过程,包括一些常用工具使用示例等
深入理解Linux中断机制
一、中断基本原理中断是计算机中非常重要的功能,其重要性不亚于人的神经系统加脉搏。虽然图灵机和冯诺依曼结构中没有中断,但是计算机如果真的没有中断的话,那么计算机就相当于是半个残疾人。今天我们就来全面详细地讲一讲中断。1.1 中断的定义我们先来看一下中断的定义:中断机制:CPU在执行指令时,收到
怒啃 24 小时,终于搞懂上下文切换!
大家好,我是树哥。对于服务器系统来说,上下文切换也是影响系统性能的一个重要因素。深入理解上下文切换的原理,有利于我们做好性能优化工作。今天我将带大家了解下上下文切换的几种情形,以及其背后发生切换的具体信息,接着介绍一些监测上下文切换指标的工具,最后总结一些上下文切换异常可能得场景。1. 什么是
【全网首发】从 Linux 内核角度探秘 JDK NIO 文件读写本质
1. 前言笔者在 《从 Linux 内核角度看 IO 模型的演变》一文中曾对 Socket 文件在内核中的相关数据结构为大家做了详尽的阐述。又在此基础之上介绍了针对 socket 文件的相关操作及其对应在内核中的处理流程:并与 epoll 的工作机制进行了串联:通过这些内容的串联介绍,

有开始,就会有进​步!

在追求性能的道路上,记录每一刻的成长!源码解读,编程技巧,外文翻译,技术实践,线上案例等等,记录自己,启发他人!

专家作者推荐

巡山小汪

关注微信公众号《解Bug之路》,有问题请在公众号中咨询:) 无论多么艰苦的时刻,都不要忘记,辉煌的未来,在你的眼中闪耀!

飞哥开发内功

《深入理解Linux网络》作者,腾讯搜狗十年工程师,公众号「开发内功修炼」作者!

踩刀诗人

聊聊技术,唠唠段子,偶尔做菜写诗,欢迎关注我的公众号 踩刀诗人

Brand

搜索关注微信公众号【架构与思维】:撰稿者为bat、字节的几位高阶研发/架构,专注技术分享。

专题推荐

相比于后端遇到的各种复杂性能问题,前端的性能相对简单,但是简单不代表容易,前端的技术更新迭代快,那么针对性能问题自然也会出现各种变种,需要各种新的工具和思路。
HeapDump性能社区将引进更多前端相关大佬,来给大家分享前端性能的那些事儿。本期先从前端性能基础开始:
5篇文章7047阅读量
数据库最容易成为整个系统的性能瓶颈,本期专题向大家介绍日常工作中常见的数据库性能问题,干货+性能调优实践帮你攻克数据库性能瓶颈!
8篇文章20414阅读量