宋宝华:可以杀死的深度睡眠TASK_KILLABLE状态(最透彻一篇)

深度睡眠与浅度睡眠众所周知,Linux的进程睡眠有两种常规状态:TASK_INTERRUPTIBLE(浅度睡眠):可以被等待的资源唤醒,也能被signal唤醒;TASK_UNINTERRUPTIBLE(深度睡眠):可以被等待的资源唤醒,但是不能被signal唤醒。简单来说,深度睡眠的进程必须等待资源来了才能醒,在此之前,甚至你给它发任何的信号,它都不可能醒...
📅 2023-06-04 阅读全文 →

Linux的中断号是假的!与硬件中断号是什么关系?

下面的这个视频解释了Linux的中断号与硬件里面中断号之间究竟是什么关系澄清关于Linux中断号的误解。# cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 16: 3092 2942 1436 1997 GIC 29 twd 17: 10 0 0 0 GIC 34 timer 31: 4 0 0 0 GIC 47 eth0...
📅 2023-06-04 阅读全文 →

能感知功耗的Linux调度器(EAS)

译者简介 白嘉庆,西邮陈莉君教授门下研一学生。曾在华为西安研究所任C++开发一职,目前兴趣是学习Linux内核网络安全相关内容。本文的翻译宋宝华老师指导审阅。序2014年Linux内核峰会(Linux Kernel Summit 2014)上举办了为期一天的EAS主题研讨会。来自Arm的Morten Rasmussen做会议主持,来自Linaro的Dani...
📅 2023-06-04 阅读全文 →

Linux动态为内核添加新的系统调用

先来个满满的回忆:https://blog.csdn.net/dog250/article/details/64461922011年写这篇文章的时候,我的女儿小小还没有出生。评价一下这篇文章,总体写得还不错,但排版不行。时间如白驹过隙,快十年过去了,今天我来旧事重提。添加新的系统调用 ,这是一个老掉牙的话题。前段时间折腾Rootkit的时候,我有意避开涉及H...
📅 2023-06-04 阅读全文 →

理解Linux内核抢占模型(最透彻一篇)

本文原文地址:https://devarea.com/understanding-linux-kernel-preemption/#.XrKLcfnx05k作者:Liran B.H译者:宋宝华当配置Linux内核的时候,我们可以选择一些参数,这些参数能影响系统的行为。你可以用不同的优先级、调度类和抢占模型来工作。正确地选择这些参数是非常重要的。本文将论述不...
📅 2023-06-04 阅读全文 →

打通IO栈:一次编译服务器性能优化实战

作者简介廖威雄,就职于珠海全志科技股份有限公司,负责Linux IO全栈研发、性能优化、开源社区开发交流、Linux 内核开源社区pstore/blk,mtdpstore模块的作者(与maintainer交流中)、大客户存储技术支持、全志首个UBI存储方案主导人、全志首个RTOS NFTL主导人。背景随着企业SDK在多条产品线的广泛使用,随着SDK开发人员的...
📅 2023-06-04 阅读全文 →

Linux Rootkit如何避开内核检测的

Rootkit在登堂入室并得手后,还要记得把门锁上。如果我们想注入一个Rootkit到内核,同时不想被侦测到,那么我们需要做的是精妙的隐藏,并保持低调静悄悄,这个话题我已经谈过了,诸如进程摘链,TCP链接摘链潜伏等等,详情参见:https://blog.csdn.net/dog250/article/details/105371830https://blog...
📅 2023-06-04 阅读全文 →

深入理解C11/C++11内存模型

现代计算机体系结构上,CPU执行指令的速度远远大于CPU访问内存的速度,于是引入Cache机制来加速内存访问速度。除了Cache以外,分支预测和指令预取也在很大程度上提升了CPU的执行速度。随着SMP的出现,多线程编程模型被广泛应用,在多线程模型下对共享变量的访问变成了一个复杂的问题。于是我们有必要了解一下内存模型,这是多处理器架构下并发编程里必须掌握的一个...
📅 2023-06-04 阅读全文 →

混乱的Linux内核实时线程优先级

背景Linux会把进程分为普通进程和实时进程,普通进程采用CFS之类调度算法,而实时进程则是采用SCHED_FIFO或SCHED_RR。无论优先级高低,实时进程都会优先于SCHED_NORMAL中的所有进程先执行,因为后者里面都是普通的非实时进程。具体可以参看Linux阅码场早期文章: 宋宝华:关于Linux进程优先级数字混乱的彻底澄清内核线程的...
📅 2023-06-04 阅读全文 →

宋宝华: kvmalloc ——倚天剑屠龙刀两大神器合体?

你应该曾经纠结过是用kmalloc(),还是vmalloc()?现在你不用那么纠结了,因为内核里面现在有个API叫kvmalloc(),可以认为是kmalloc()和vmalloc()的双剑合一。屠龙刀和倚天剑的合体。内核里面有大量的代码现在都使用了kvmalloc(),譬如:source/ipc/msg.cstatic int newque(struct...
📅 2023-06-04 阅读全文 →

嵌入式工程师的自我迭代之路

作者按笔者本科和研究生都是芯片专业,从研究生开始接触嵌入式软件,从学习linux到学习arm架构,再到学习Linux发行版,一步一步从工程师,架构师到项目经理。身边既有不少朋友从偏硬件的专业(电子信息,自动化,微电子等等)转入做嵌入式,也有朋友是计算机科班出身做嵌入式。从不同人的经历对比中可以更清楚的看到嵌入式开发的进阶之路。这篇文章想结合自己和朋友们的经...
📅 2023-06-04 阅读全文 →

火焰图系列之使用火焰图隐藏功能提高绘制精度

作者简介武汉光电国家研究中心DSAL实验室在读博士生。主要研究方向:Linux memory and storage system, Concurrency optimization.https://github.com/hongweiqin由于CPU能耗优化的原因,火焰图有时并不准确。为此,我们来做一个小实验。(还不熟悉什么是火焰图的可以看看文章末尾火焰...
📅 2023-06-04 阅读全文 →

Linux pstore 实现自动“抓捕”内核崩溃日志

作者简介廖威雄,就职于珠海全志科技股份有限公司,负责Linux IO全栈研发、性能优化、开源社区开发交流、Linux 内核开源社区pstore/blk,mtdpstore模块的作者、大客户存储技术支持、全志首个UBI存储方案主导人、全志首个RTOS NFTL主导人我设计的内核模块pstore/blk及其衍生的pstore/zone,mtdpstore终于在v...
📅 2023-06-04 阅读全文 →

揭露内核黑科技 - 热补丁技术真容

内核热补丁是一种无需重启操作系统,动态为内核打补丁的技术。系统管理员基于该技术,可以在不重启系统的情况下,修复内核BUG或安全漏洞,可以在最大程度上减少系统宕机时间,增加系统的可用性。一直很好奇内核热补丁这个黑科技,今天终于可以揭露它的真容了。当然这章的内容强烈依赖于前一章探秘ftrace[1]。有需要的小伙伴请自取。从一个例子开始作为一个小白,当然是从一...
📅 2023-06-04 阅读全文 →

火焰图:全局视野的Linux性能剖析

什么是火焰图火焰图(Flame Graph)是由Linux性能优化大师Brendan Gregg发明的,和所有其他的trace和profiling方法不同的是,Flame Graph以一个全局的视野来看待时间分布,它从底部往顶部,列出所有可能的调用栈。其他的呈现方法,一般只能列出单一的调用栈或者非层次化的时间分布。我最快乐的童年时代,每逢冬天,尤其是春节的...
📅 2023-06-04 阅读全文 →

Linux TraceEvent - 我见过的史上最长宏定义

TraceEvent是内核中一种探测的机制,据说在不使能的时候是没有损耗的。据说使用起来挺简单,但是要看懂着实需要花些力气。例子从例子中学习,一般都是比较好的方法。内核开发者也比较nice,在内核源码samples/trace_events目录下就有这么一个例子。其中文件一共有三个:这个例子以内核模块的形式存在,所以只要执行make就可以编译完成。总的来说...
📅 2023-06-04 阅读全文 →

宋宝华: Linux为什么一定要copy_from_user ?

网上很多人提问为什么一定要copy_from_user,也有人解答。比如百度一下:但是这里面很多的解答没有回答到点子上,不能真正回答这个问题。我决定写篇文章正式回答一下这个问题,消除读者的各种疑虑。这个问题,我认为需要从2个层面回答第一个层次是为什么要拷贝,可不可以不拷贝?第二个层次是为什么要用copy_from_user而不是直接memcpy为什么要拷贝...
📅 2023-06-04 阅读全文 →

Linux阅码场原创精华文章汇总

持续更新,敬请期待!(最后更新日期2020.06.25)Linux学习方法:宋宝华:迭代螺旋法——关于Linux学习方法的血泪建议宋宝华: 纪念金庸先生——程序员的武侠世界如何阅读Linux内核的源码Linux任督二脉之进程管理郭健:Linux进程调度技术的前世今生之“前世”郭健:Linux进程调度技术的前世今生之“今生”宋宝华:是谁关闭了Linux抢占,而...
📅 2023-06-04 阅读全文 →

Gigantic巨页与CMA的完全结合

Facebook的Roman Gushcin发送的这个patch把Gigantic巨页(SIZE:1GB)与CMA进行了一个完美的结合:https://lkml.org/lkml/2020/3/9/1135CMA有利于在开机的时候就预留一大片内存,但是这片内存如果不被cma_alloc()申请走,则可被movable的页面复用,并不会造成直接的浪费。而Li...
📅 2023-06-04 阅读全文 →

CUDA 6中的统一内存模型

译者简介白嘉庆,西邮陈莉君教授门下研一学生。曾在华为西安研究所任C++开发一职,目前兴趣是学习Linux内核网络安全相关内容。原文来自:https://devblogs.nvidia.com/unified-memory-in-cuda-6/CUDA介绍CUDA(Compute Unified Device Architecture,统一计算设备架构)是由...
📅 2023-06-04 阅读全文 →

Linux阅码场 - Linux内核月报(2020年06月)

关于Linux内核月报Linux阅码场Linux阅码场内核月报栏目,是汇总当月Linux内核社区最重要的一线开发动态,方便读者们更容易跟踪Linux内核的最前沿发展动向。限于篇幅,只会对最新技术做些粗略概括,技术细节敬请期待后续文章,也欢迎广大读者踊跃投稿为阅码场社区添砖加瓦。本期月报(总第1期)主要贡献人员:张健、宋老师、廖威雄、理查德、Dog250、Bo...
📅 2023-06-04 阅读全文 →

page结构体,何处安放你的灵魂?

随着硬件能力的提升,系统内存容量变得越来越大。尤其是在服务器上,过T级别的内存容量也已经不罕见了。如此海量内存给内核带来了很多挑战,其中之一就是page struct存放在哪里。page struct的三种存放方式在内核中,我们将物理内存按照页大小进行管理。这样每个页就对应一个page struct作为这个页的管理数据结构。随着内存容量的增加,相对应的pa...
📅 2023-06-04 阅读全文 →

宋宝华:Linux设备与驱动的手动解绑与手动绑定

众所周知,Linux靠设备与驱动之间的match,来完成设备与驱动的bind,从而触发驱动的probe()成员函数被执行。每个bus都有相应的match方法,完成match的总的入口函数是:static inline int driver_match_device(struct device_driver *drv, struct device *dev)...
📅 2023-06-04 阅读全文 →

宋宝华:论Linux的页迁移(Page Migration)上集

本文目录 ●●0. 为什么关心Page Migration1. CoW引起的页迁移 1.1 fork 1.2 KSM2. 内存规整引起的页迁移  2.1 CMA  2.2 alloc_pages  2.3 /proc/sys/vm/compact_memory  2....
📅 2023-06-04 阅读全文 →

Linux阅码场 - Linux内核月报(2020年07月)

关于Linux内核月报Linux阅码场Linux阅码场内核月报栏目,是汇总当月Linux内核社区最重要的一线开发动态,方便读者们更容易跟踪Linux内核的最前沿发展动向。限于篇幅,只会对最新技术做些粗略概括,技术细节敬请期待后续文章,也欢迎广大读者踊跃投稿为阅码场社区添砖加瓦。本期月报(总第2期)主要贡献人员:陈玮、张健、廖威雄(月报的完善和专业,离不开大...
📅 2023-06-04 阅读全文 →

宋宝华:论Linux的页迁移(Page Migration)完整版

本文目录 ●●0. 为什么关心Page Migration1. CoW引起的页迁移 1.1 fork 1.2 KSM2. 内存规整引起的页迁移  2.1 CMA  2.2 alloc_pages  2.3 /proc/sys/vm/compact_memory  2.4...
📅 2023-06-04 阅读全文 →

linux内核写时复制机制源代码解读

作者简介 韩传华,就职于国内一家半导体公司,主要从事linux相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,乐于分享喜欢学习,喜欢专研Linux内核源代码。写时复制技术(一下简称COW)是linux内核比较重要的一种机制,我们都知道:父进程fork子进程的时候,子进程会和父进程会以只读的方式共享所有私有的可写页,当有一方将要写的时候会发生...
📅 2023-06-04 阅读全文 →

宋宝华:当Linux内核遭遇鲨鱼—kernelshark

之前小弟一直在宣传推广火焰图,结果是很多童鞋凡事都用火焰图。说实话,火焰图特别适合分析运行时热点(无论是on-cpu、off-cpu、还是内存等,火焰图的想象力可以无穷放大),但是你要分析一个的如果是一个时序问题,比如系统启动的慢、一个软件启动的慢,用火焰图固然可能有一点帮助,但是帮助肯定很微妙。因为这种某个过程慢的问题,是一个时序问题。不是一个运行时热点...
📅 2023-06-04 阅读全文 →

Linux内核虚拟内存管理之匿名映射缺页异常分析

作者简介韩传华,就职于南京大鱼半导体有限公司,主要从事linux相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,乐于分享喜欢学习,喜欢专研Linux内核源代码。前面讲到过写时复制缺页异常(COW),一般用于父子进程之间共享页,而我们会常见一种缺页异常是匿名映射缺页异常,今天我们就来讨论下这种缺页异常,让大家彻底理解它。注:本文使用linux...
📅 2023-06-04 阅读全文 →

KVM最初的2小时——KVM从入门到放弃

虚拟化的诉求和历史的痛苦那些不能铭记过去的人注定要重蹈覆辙。你还记得当年用Windows隐藏文件夹藏片吗? 作为一个屌丝,虚拟化技术确实意义非常重大。这个最显著的作用显然就是藏片,作为一个程序员,如果还用Windows文件隐藏功能来藏片,这实在是污辱自己和女朋友的智商,让广大码农抬不起头来做人。最早可以帮你实质藏片的手段来自VMware。&nbs...
📅 2023-06-04 阅读全文 →