
Linux Kernel开发
文章平均质量分 94
宋宝华
这个作者很懒,什么都没留下…
展开
-
宋宝华:谈一谈Linux写时拷贝(COW)的安全漏洞(1)
COW技术,爆出了巨大的漏洞,让父子进程间可以向对方泄露写过的新数据,成为了Linux内核的惊天大瓜。原创 2022-01-09 20:10:20 · 8369 阅读 · 12 评论 -
ARM Linux 3.x的设备树(Device Tree)
本文部分案例和文字英文原版来源于http://devicetree.org/Device_Tree_Usage更多精华文章请扫描下方二维码关注Linux阅码场1. ARM Device Tree起源Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the a...原创 2013-01-01 17:32:36 · 255854 阅读 · 53 评论 -
深度讲解Linux内存管理和Linux进程调度-打通任督二脉
很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些Linux内存管理和linux进程管理关键概念的理解非常模糊,比如不理解CPU、内存资源等的真正分布,具体的工作机制,这使得他们对很多问题的分析都摸不到方向。比如进程的调度延时是多少?Linux能否硬实时?多核下多线程如何执行?系统的内存究竟耗到...原创 2017-08-23 14:45:09 · 58886 阅读 · 26 评论 -
宋宝华:火焰图:全局视野的Linux性能剖析
更多精华文章请扫描下方二维码关注Linux阅码场简介火焰图(Flame Graph)是由Linux性能优化大师Brendan Gregg发明的,本文用最简单的实例讲解什么是火焰图,怎么画出来火焰图,火焰图的优点是什么。什么是火焰图火焰图(Flame Graph)是由Linux性能优化大师Brendan Gregg发明的,和所有其他的trace和profiling方法不同的...原创 2017-11-14 10:43:49 · 20684 阅读 · 1 评论 -
宋宝华:linux内存中 swappiness=0究竟意味着什么?
本文解释linux内存中swappiness的作用,以及linux内存中swappiness=0究竟意味着什么。内存回收我们都知道,Linux一个进程使用的内存分为2种:file-backed pages(有文件背景的页面,比如代码段、比如read/write方法读写的文件、比如mmap读写的文件;他们有对应的硬盘文件,因此如果要交换,可以直接和硬盘对应的文件进行交换),此部分页面进page cacheanonymous pag原创 2018-01-30 19:20:16 · 6056 阅读 · 0 评论 -
宋宝华:关于Ftrace的一个完整案例
更多精华文章或者加入技术交流群请扫描下方二维码关注Linux阅码场Ftrace简介Ftrace是Linux进行代码级实践分析最有效的工具之一,比如我们进行一个系统调用,出来的时间过长,我们想知道时间花哪里去了,利用Ftrace就可以追踪到一级级的时间分布。Ftrace案例写一个proc模块,包含一个proc的读和写的入口。test_proc_show()故意调用了一个kill_...原创 2018-01-24 23:49:39 · 17239 阅读 · 2 评论 -
宋宝华:关于linux内存管理中DMA ZONE和dma_alloc_coherent若干误解的澄清
本文已首先在Linuxer公众号(ID: LinuxDev)发表,先转回我的blog也发表。转载请注明出处。1.DMA ZONE的大小是16MB?这个答案在32位X86计算机的条件下是成立的,但是在其他的绝大多数情况下都不成立。首先我们要理解DMA ZONE产生的历史原因是什么。DMA可以直接在内存和外设之间进行数据搬移,对于内存的存取来讲,它和CPU一样,是一个访问master,可以...原创 2018-01-22 21:23:49 · 14784 阅读 · 3 评论 -
宋宝华: 文件读写(BIO)波澜壮阔的一生
前言网上关于BIO和块设备读写流程的文章何止千万,但是能够让你彻底读懂读明白的文章实在难找,可以说是越读越糊涂!我曾经跨过山和大海 也穿过人山人海我曾经问遍整个世界 从来没得到答案本文用一个最简单的read(fd, buf, 4096)的代码,分析它从开始读到读结束,在整个Linux系统里面波澜壮阔的一生。本文涉及到的代码如下:#include <unistd.h>...原创 2019-07-08 16:25:49 · 1523 阅读 · 2 评论 -
Linux内存管理基础知识:MMU最基本原理-CPU是如何访问到内存的
介绍Linux内存管理中最基础的问题,这些问题显示计算机最基本的MMU和页表分页工作机制是如何工作的原创 2019-07-08 21:02:40 · 2600 阅读 · 0 评论 -
linux内存管理常见的误区有哪些
网络上面有很多坑爹的Linux内存管理文章,误导不少人,很多人对Linux的很多误解可能来自于这些广泛流传的技术文章。下面我们推出一个系列来总结。先从Linux内存管理开始。1. compact_memory2. free 中cache和buffer的区别原创 2019-07-08 21:17:20 · 1447 阅读 · 0 评论 -
深入理解 Linux eBPF:一个完整阅读清单(转载)
linux eBPF是3.17内核开始引入的一个全新设计,代码目录主要在kernel/bpf 下,它的全称是 extended BPF(eBPF), 目前关于eBPF的资料还比较乱,很难得看到一篇对ebpf总结的那么全的文章,转载自此:转载 2019-07-12 08:35:42 · 21998 阅读 · 3 评论 -
在ARM Linux内核中增加一个新的系统调用
实验平台内核版本为4.0-rc1,增加的系统调用仅仅是简单打印一个Hello World,最后我们在用户空间用swi指令验证。涉及到的改动如下:1. 在内核中增加文件arch/arm/kernel/mysyscall.c,这个文件实现新的打印Hello World的系统调用。#include <linux/printk.h>void sys_helloworld...原创 2016-05-02 12:55:45 · 12485 阅读 · 1 评论 -
Network write system call latency
Linux ftrace案例转载 2016-01-17 17:41:19 · 5580 阅读 · 0 评论 -
使用cpufreq-bench评估cpufreq策略对系统性能的影响
Linux 3.1已经将cpupower-utils中放入内核的tools目录,见:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=tools/power;h=f6a98ba17528ed7645f53bb8cb67f59112adf346;hb=c3b92c8787367a8bb53d57d9原创 2012-01-29 19:44:09 · 6781 阅读 · 0 评论 -
tegra3 CPU auto hotplug和Big/little switch工作的基本原理
by 宋宝华在《Tegra3 vSMP架构Android运行时CPU热插拔及高低功耗CPU切换》一文中我们通过运行华硕平板电脑看出来tegra3的dvfs结合了CPU热插拔和G/LP core cluster之间的切换,本文从代码角度分析其运行机理。tegra3是典型的BIG/LITTLE模式,4个G core(高性能,高功耗)加上1个LP core(低性能,低功耗)。运行过程中,我们原创 2012-01-31 14:26:03 · 6903 阅读 · 2 评论 -
OMAP4 pandaboard上CPU hotplug进程迁移与负载均衡测试
尝试把pandaboard images升级为 11.12 Linaro release,SMP热插拔测试了一下。第一组测试评估在高负载情况下热插拔CPU进程迁移的情况,希望是拔出和插入CPU1后,各进程仍然活跃,测试case如下:int main(int argc, char *argv[]){ struct timeval last_tv, cur_tv; int pid; c原创 2012-02-09 13:32:13 · 4544 阅读 · 0 评论 -
Linux内核最新的连续内存分配器(CMA)——避免预留大块内存
Linux内核最新的连续内存分配器(CMA)——避免预留大块内存在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着。目前,Marek Szyprowski和Michal Nazarewicz实现了一套全新的Contiguous Memory Allocator。通过这套机制,我们可以做到不预留内存,这些内存平时是可用的,只有当需要的时候才被分配给Camera,HDMI等设备。下面分析它的基本原创 2012-03-01 16:17:59 · 47343 阅读 · 5 评论 -
让busybox里的free命令可以显示page cache
busybox的free命令不能显示page cache,导致于其功能大打折扣,因为page cache大小很大,在用户申请内存时可以回收,打上如下补丁后,busybox的free命令变得完整:commit 2219fd301a7f319258ad4be9217cd0d6db9240d4Author: Barry Song Date: Mon Mar 26 11:47:10 2012原创 2012-03-26 21:05:14 · 6891 阅读 · 0 评论 -
Essential Linux Device Driver附录A . Linux汇编
By 宋宝华 / 本系列文章交流与讨论:@宋宝华Barry设备驱动程序有时需要用汇编实现一些代码片断,因此让我们看看Linux上汇编编程的不同特性。图A.1显示了Linux在PC兼容系统上的引导顺序,是第2章“内核一瞥”中图2.1的缩减版。图中的固件组件是用不同的汇编语法实现的:· BIOS通常全部用汇编编写。一些流行的PC BIOS使用像Microsoft Macro Assem翻译 2012-09-17 22:44:29 · 4567 阅读 · 0 评论 -
Linux gdb调试器用法全面解析
更多精华文章请扫描下方二维码关注Linux阅码场GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能:启动程序,可以按照工程师自定义的要求随心所欲的运行程序。 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式。 当程序被停住时,可以检查此时程序中所发生的事,并追索上文。 动态地改变程序的执行环境。不管是调试Li...原创 2012-03-22 22:18:58 · 103612 阅读 · 9 评论 -
Linux RT(1)-硬实时Linux(RT-Preempt Patch)在PC上的编译、使用和测试
特别声明:本系列文章LiAnLab.org著作权所有,转载请注明出处。by @宋宝华Barry Vanilla kernel的问题Linux kernel在spinlock、irq上下文方面无法抢占,因此高优先级任务被唤醒到得以执行的时间并不能完全确定。同时,Linux kernel本身也不处理优先级反转。RT-Preempt Patch是在Linux社区kernel的基础上,加原创 2012-10-03 19:02:40 · 31770 阅读 · 3 评论 -
Linux芯片级移植与底层驱动(基于3.7.4内核)
宋宝华 BarrySong <21cnbao@gmail.com>1.SoC Linux底层驱动的组成和现状为了让Linux在一个全新的ARM SoC上运行,需要提供大量的底层支撑,如定时器节拍、中断控制器、SMP启动、CPU hotplug以及底层的GPIO、clock、pinctrl和DMA硬件的封装等。定时器节拍、中断控制器、SMP启动和CPU ho...原创 2013-01-26 18:40:18 · 55533 阅读 · 2 评论 -
Linux RT(2)-硬实时Linux(RT-Preempt Patch)的中断线程化
更多精华文章请扫描下方二维码关注Linux阅码场底半部:线程化IRQ线程化中断的支持在2009年已经进入Linux官方内核,详见Thomas Gleixner的patch:http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3aa551c9b4c40018f0e261a178e3d2...原创 2012-10-19 17:00:11 · 13168 阅读 · 7 评论 -
宋宝华ABC
新浪微博:@宋宝华Barry 编写出版《Linux设备驱动开发详解》, 互动出版网2008年度IT图书风云榜“十大畅销经典”、“十佳原创”、畅销榜操作系统类排名第1;51CTO、中国图书商报、China-pub联合评比 “2008年度最佳技术图书”;本书繁体中文版一直位于畅销版。 主持翻译《Essential Linux Devic原创 2010-03-11 23:28:00 · 25216 阅读 · 16 评论 -
Linux电源管理系统架构和驱动(1)-Linux电源管理全局架构
更多精华文章请扫描下方二维码关注Linux阅码场1.Linux电源管理全局架构Linux电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统待机的支持和每个设备的运行时电源管理,可以说和系统中的每个设备驱动都息息相关。对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,图1呈现了Linux内核电源管...原创 2015-02-21 12:21:12 · 16312 阅读 · 4 评论 -
Tegra3 vSMP架构Android运行时CPU热插拔及高低功耗CPU切换
Tegra3采用vSMP(VariableSymmetric Multiprocessing)架构,共5个cortex-a9处理器,其中4个为高性能设计,1个为低功耗设计:在系统运行过程中,会根据CPU负载切换低功耗处理器和高功耗处理器:除此之外,4个高性能ARM核心也会根据运行情况,动态借用Linux kernel支持的CPU hotplug进行CPU的UP/DOWN操作原创 2012-01-18 15:59:41 · 6560 阅读 · 0 评论