自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(120)
  • 资源 (12)
  • 收藏
  • 关注

原创 Linux writeback机制

Linux 采用内存页来缓存磁盘文件内容,从而提高系统整体IO访问性能,这就是我们熟知的pagecache机制,对于进程的一次写文件操作,内核只是简单的把修改写到内存,并把页面标记为脏页,然后直接返回,具体的回写操作,由内核周期性的启动线程来完成,这个我们称为writeback机制。1 脏页的产生修改文件内容和属性都会产生脏页,当进程调用write进行写操作时,最终会通过set_page_dirty函数标记脏页,并唤醒内核后台回写线程。如果进程只写了page中的一部分,是否有必要回写整个页了?当

2021-11-29 16:14:19 4892 2

原创 linux iostat统计原理

1.diskstats统计io统计主要读取/proc/diskstats节点rd_ios:merge后读操作的次数rd_merges合并读操作的次数。如果两个读操作读取相邻的数据块时,可以被合并成一个,rd_sectors读取的扇区数量。d_ticks 读操作消耗的时间(以毫秒为单位)。每个读操作从__make_request()开始计时,到__blk_mq_end_request()为止,包括了在队列中等待的时间。wr_ios:merge写操作的次数。wr_merges:合并写操作

2021-07-06 23:05:31 1129

原创 eBFP指令集

eBPF 定义了一套特有的RISC 指令集,包含数据存取(ST/LD), 算术/逻辑运算ALU(add,sub,mul,mod...), 跳转(JMP,RET)等,我们可以简单把eBFP指令集语法理解为x86/arm汇编平级的一门语言。

2021-02-09 11:41:54 2411

原创 Linux 块设备之bio结构体

当文件系统准备好数据之后,就会调用submit_bio提交一个IO请求,这里主要介绍bio数据管理和分配.

2020-12-30 20:04:34 2683 1

原创 Linux 页高速缓存之buffer head

这里主要分析page, buffer_head与磁盘块之间关联。

2020-12-17 14:58:48 1569 1

原创 线程被IO卡住的原因wait_on_page_bit_killable

在内存trace中经常遇到线程uninterruptable sleep,而打出来的trace可以看到是如下:wait_on_page_bit_killable+0xb0/0xcc__lock_page_or_retry+0xb8/0xf4filemap_fault+0x4cc/0x630ext4_filemap_fault+0x34/0x48__do_fault+0x88/0x110handle_mm_fault+0x854/0xb68do_page_fault+0x2a4/0x3b4d

2020-12-14 21:14:15 2630

转载 Intel VT技术中的Preemption Timer

Intel VT技术中有一些比较奇怪的功能,被使用的并不多,Preemption Timer就是其中一个。该功能在大部分情景下都没有用,但是在某些特殊的情况下可能有很神奇的效果。一、什么是Preemption TimerPreemption Timer是一种可以周期性使VM触发VMEXIT的一种机制。即设置了Preemption Timer之后,可以使得虚拟机在指定的TSC cycle之后产生一次VMEXIT并设置对应的exit_reason,trap到VMM中。该机制很少被社区的开发者使用,甚至连

2020-11-26 10:27:14 716

原创 spinlock引起系统softlockup分析

业务反馈机房中有机器经常假死,业务无响应,登陆上去分析,原来是发生了softlockup.一 softlockup发生原因1.等待锁资源(spinlock)2.进程一直在某个循环运行,缺少调度检查(cond_resched())3.当前任务关抢占时间太长(preempt_disable,spin_lock())4.中断风暴(irq storm)导致CPU无法进行调度5.softirq/tasklet执行时间太长,导致CPU无法进行调度二 分析过程1,首先查看引起softloc

2020-11-20 13:01:13 1039

原创 Linux cgroup源码分析<一>概述

1. cgroup子系统子系统的介绍blkio -- 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。cpu -- 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。cpuacct -- 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。cpuset -- 这个子系统为 cgroup 中的任务分配独立 C...

2020-11-05 23:45:15 1097

原创 Linux 内核调用栈解析

1.pushl和poplpushl和popl指令来说操作的是栈,栈的基地址由%ebp来指定,栈顶元素由%esp来指定,%esp指向的就是栈顶元素。将一个双字压入栈中,首先要将%esp减4,然后将双字写入%esp指向的栈顶位置;弹出一个双字,首先要将%esp加4,然后将%esp指向的栈顶元素取出2.call和ret指令call lable //函数调用,会把call指令下一条指令push到栈leave //函数调用返回前的准备,也就是movl %ebp, %esp; popl %eb...

2020-10-27 10:30:21 839

原创 CPU超卖导致Guest OS Softlockup分析

1.问题背景一台具有96个vCPU的VM上,Guest OS出现大量的SoftLockup,最后导致系统宕机.2.分析过程2.1 什么情况下出现Softlockup 简单点就是当CPU一定时间内不能进行进程调度时,会出现Softlockup,不能调度的原因有:1.进程关抢占后长时间执行,2.softirq执行时间太长,3.中断风暴. 4.内核执行路径太长(服务器内核默认是不可能抢占),5.spinlock问题2.2 堆栈分析 看了几个cpu的堆栈,RIP大部分在smp_...

2020-10-14 11:25:19 2602

原创 中断相关指标

指令:mpstat -I ALL -P ALL1. CPU产生中断频率:2.软中断频率mpstat -I SCPU 13.每个中断产生的频率mpstat -I ALL

2020-07-17 16:24:43 247

原创 CPU相关性能指标

1.CPU使用率mpstat -u -P ALL 或者top -H2. CPU平均负载和运行队列sar -q 1runq-sz:运行队列上等待运行的进程plist-sz:系统所有线程数量ldavg-1/5/15: 1分钟/5分钟/15分钟平均负载blocked: 等待IO的进程数量3. 进程切换和fork数量vmstat -s...

2020-07-17 16:12:13 362

原创 内存相关性能指标

sar -B 可以提供内存相关的指标pgpgin/s:从磁盘读入内存 Total number of kilobytes the system paged in from disk per second.pgpgout/s: 从内存写入磁盘 Total number of kilobytes the system paged out to disk per second.fault/s:系统产生的缺页异常...

2020-07-17 16:03:36 1085

原创 Linux CPU时间的一点理解

vmstat可以显示cpu时间的分类统计:类别 说明

2020-07-12 10:34:40 2201

原创 Linux故障排查总结

2020-07-10 09:08:39 310

原创 Linux几种检测rootkit隐藏进程的方法

Rootkit通常会隐藏进程,隐藏文件和网络连接。这里主要记录几种对隐藏进程的检测方法一. 隐藏进程的方法1.1 用户级Rootkit 通过LD_PRELOADER来hook libc库实现,从而过滤/proc/pid目录1.2 内核级rootkit 通过hook系统调用getdents/getdents64或者hook 文件file_operation的iterate1.3 内核...

2020-05-02 13:12:34 3000 1

原创 Linux hook内核函数

在内核中,如果要hook某个函数,只要把函数开头的5个字节替换成call/jmp指令.步骤1. 保存orig 函数的前5个字节指令.2.定义一个stub函数,用于跳转回orig函数.3.在新函数中,调用stub函数.具体实现#include<linux/module.h>#include<linux/printk.h>#include...

2020-04-26 20:36:41 1084 1

原创 Linux ELF文件格式

1. ELF header结构体主要定义了文件的类型,程序头表位置,大小和个数,节头表位置,大小和个数typedef struct { unsigned char e_ident[EI_NIDENT];/*ELF Majic*/ uint16_t e_type;/*文件类型(ET_REL,ET_EXEC,ET_DYN)*/...

2020-04-24 10:47:18 716

原创 Linux内核线程实时获取调度状态的方法

最近在做项目中,需要线程实时的知道自身被sched out 和sched in. 查看了schedule()函数实现,发现内核提供了对应的notifier机制.1.进程sched out流程schedule->__schedule->context_switch->prepare_task_switch->fire_sched_out_preempt_no...

2020-04-06 12:28:36 1149

原创 Linux多线程编程总结

1. pthread_join和pthread_detach理解pthread_detach表示主线程不等待线程退出, 线程资源在线程退出时自动回收(锁,条件变量,信号量,文件描述符)pthread_join:等待线程退出,并回收进程资源。2.进程退出时,进程内的线程,全部自动退出(皮之不存毛将焉附?)3. pthread_key_create :在线程内部,私有数据可以被各个函数访问。但他对其他...

2020-04-06 11:27:41 162

原创 Linux X86 LBR和BTS功能分析与实现

X86 处理器支持最近分支记录(Last branch record),也就是记录CPU的跳转记录(jmp,jcc,call,ret等指令,中断和异常). 通过操作MSR寄存器(model specific register)来配置分支记录功能.1. 分支记录格式(branch record)有如下两个函数:int add_fun(int a,int b){return (a+b)...

2020-04-06 10:59:20 2978

原创 Linux X86_64 内核态缺页处理

Linux X86针对meltdown漏洞开启了页表隔离(PTI)功能,PTI使用两个PGD来表示进程空间.进程在陷入内核态时,CR3会相应的切换到进程内核态的PGD页表.假如进程调用了vmalloc分配内存,此时会进行页表映射,但是vmalloc是把这块内存映射到了内核的虚拟地址空间(init_mm),并没有映射到当前进程的内核态页表.vmalloc->__vmalloc_nod...

2020-04-05 14:59:29 780

原创 insmod加载分析

2020-03-16 18:27:53 301

原创 linux ARM64开启kaslr地址转换

addr_run = addr_link + offset //开启KASLRaddr_run = addr_link + _text - (KIMAG_VADDR+TEXT_OFFSET)//_text为重定向后的值addr_link = addr_run - _text_start + (vmalloc_start+TEX_OFFSET)//ARM64 KIMAGE_VADDR==vmal...

2020-03-07 17:59:08 817

原创 linux 64虚拟地址分布

如今打开kaslr, kernel image大小为1G.ARM64 的虚拟地址分布

2020-03-07 15:53:13 528

原创 进程名和IP地址映射

可以用指令:netstat -apnt Active Internet connections (established and server...

2020-03-05 16:35:27 252

原创 Linux内核系统调用劫持之kallsyms

1.通过kallsyms方式基于Linux 5.0/Linux5.3 的X86-64系统.1. 通过kallsyms_lookup_name查找sys_call_table地址.2. 关闭写保护3. 修改sys_call_tableLinux5.0上直接调用write_cr0接口,能够顺利的修改CR0寄存器,而内核版本更新到Linux5.3以后,发现对CR0的修改进行了保护,所...

2020-01-19 16:54:18 1504 2

转载 Linux中的THIS_MODULE

以下均针对于内核2.6.18在module.h 中 THIS_MODULE的定义如下:extern struct module __this_module; #define THIS_MODULE (&__this_module)即是保存了__this_module这个对象的地址,那这个__this_module在哪里定义呢?这就要从module的编译说起啦,如果编译过模块就...

2020-01-15 19:31:14 355

转载 物理CPU-Core-逻辑CPU -超线程

原文地址:http://www.daniloaz.com/en/differences-between-physical-cpu-vs-logical-cpu-vs-core-vs-thread-vs-socket/水平所限,翻译不准确的地方望指正。当我们使用像 nproc或者 lscpu等命令 来在CPU级别上获取计算机的架构和性能的时候,我们常常会发现我们不能够正确的解释这些命令的结...

2019-12-21 16:51:12 1505

转载 KVM虚拟机镜像那点儿事,qcow2六大功能

KVM虚拟机镜像对于物理机的操作系统来讲是一个文件,这个文件最主要的两种格式,一种是raw,也即原始格式,还有一种是qcow2,顾名思义cow是copy on write。一、RAW Imageraw格式简单,性能较好然而本身不支持稀疏格式,需要文件系统的支持才能支持稀疏文件,所以最好基于ext3文件系统。创建image用dd产生imag...

2019-12-21 10:40:33 3833

原创 TCP流程图

2019-12-12 13:17:22 747

原创 Linux CFS调度器分析

进程被调度的条件是什么,以及真正发生调度的时刻又是在哪里?以下结论和代码分析都是基于最新Linux master分支(Linux5.0)1. 调度的时刻1.1 当前进程主动放弃CPU或者调用msleep/down/wait等阻塞函数时,会直接调用schedule()函数。1.2. 当前进程满足被调度条件时(设置了TIF_NEED_RESCHED标志位),在下面几种情况会发生调度...

2019-09-12 09:54:05 463

原创 CFS组调度

/******以下结论和代码分析都是基于最新Linux master分支(Linux5.0)******/在支持多用户登陆的系统,假如用户A启动了99个进程,用户B只启用了1个进程 (优先级都为NICE 0). 那么按照CFS调度规则,用户A将获得99%的CPU时间,而用户B只能获取1%的CPU时间,这显然是不合理的.因此,组调度被引入CFS,用户A和用户B属于不同的调度组...

2019-09-10 11:42:30 895

原创 CFS调度器负载计算

/******以下结论和代码分析都是基于最新Linux master分支(Linux5.0)******/1. 负载结构体每个调度实体都有一个负载结构,用来跟踪调度实体对系统的负载贡献struct sched_entity {struct load_weight load; #ifdef CONFIG_SMP struct sched_avg...

2019-08-30 17:36:58 974

原创 进程调度FAQ

1. 进程优先级,权重,虚拟运行时间之间的关系是什么2. 简述进程负载算法PELT原理3. 进程调度发生在哪些场景(时刻)4. 进程设置被调度的条件:周期性调度schdule_tick, 唤醒调度,hrtimer调度...

2019-08-26 16:54:11 159

原创 trace 32常用指令

1. 加载对应的源代码data.load.elf E:\eth\Port_COM5\vmlinux /path W:\d21\kernel\msm-4.4可以用/path 指定路径,如果不需要源代码,/nocode

2019-08-26 10:24:11 1476

转载 Linux mprotect来定位Linux踩内存的问题

这类问题一直没有很套路的方法解决,都需要走读大量的代码,做大量调试来解决。解这类问题最关键的两点就是,1,找到被踩的内存地址,2,抓住被踩的时序。 想要找到被踩的内存地址,这里很多时候可以通过堆栈反汇编,和调试,查找出来,虽然很多时候被踩的地方不固定,这就糟糕了。就要想方法发现共同规律,比如是否在同一个全局变量里面,或者都是同一个业务场景里面? 这里介绍一个好方法,如果知道了1...

2019-07-26 16:07:01 1153

转载 Linux时间子系统之-低分辨率定时器的原理和实现

利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。所谓低分辨率定时器,是指这种定时器的计时单位基于jiffies值的计数,也就是说,它的精度只有1/HZ,假如你的内核配置的HZ是1000,那意味着系统中的低分辨率定时器的精度就是1ms。早期的内核版本中,内核并不支持高精度定时器,理所当然只能使用这种低分辨率定时器,我们有时候把这种基于HZ的定时器机制成为时间轮:time wheel。虽...

2019-07-26 14:50:18 126

原创 Linux中断管理

1. 中断控制器注册Linu内核支持多个中断控制器(GIC, gpio),可以用irq_domain来表示一个中断控制器,以ARM GICv3中断控制器来说明注册流程.1.1 dts中声明属性"interrupt-controller;",已经定义GIC寄存器地址.#interrupt-cells定义解析中断号,中断类型,中断触发类型的参数个数.intc: interrupt-...

2019-07-18 10:42:26 465

NFC开发协议英文全套

NFC协议栈文档,现在去官网下载都需要几百美金一份了, NFC开发者,爱好者,都适用,需要的赶紧下载 觉得值得收藏

2018-09-05

s3c2410LCd驱动结构体

介绍了关于linux下LCD驱动相关的结构体,

2012-02-15

platform设备

本文档详细的说明了与linux内核中platform设备有关的结构体。

2012-02-15

linux内核中kobject相关结构体介绍

本文件分析了linux内核中设备模型kobject相关结构体。

2012-02-15

基于linux的LCD驱动研究与实现.doc

这个个人的毕业设计论文,现在拿出来和大家分享,希望对大家有所帮助。

2011-10-31

基于linux的LCD驱动开题报告.doc

这是本人的开题报告,这些都是个人原创。希望能够帮助大家

2011-10-31

linux 入门大全,,学习的好资料

linux 入门大全,,学习的好资料.。。。。。。。。。。。。。。。。

2011-08-10

linux内核模块设计实验

linux学习之好资料啊,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

2011-08-10

makefile 编程学习好资料

linux ......................................

2011-08-10

linux编程学习之好资料

学习linux的好资料,希望大家下载。。。。。。。。。。。

2011-08-10

linux内核编程,linux基础知识

很好的学习资料,关于linux内核的,欢迎大家下载

2011-08-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除