自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (13)
  • 收藏
  • 关注

原创 Linux内核低损耗、精准的异步内存回收冷mapped文件页的探索

Linux内核低损耗、精准的异步内存回收 冷mapped 文件页,以文件为单位

2024-02-25 00:29:07 1030

原创 为什么内核内存回收对page进行try_to_unmap会失败?

内存回收对page进行try_to_unmap失败分析

2024-02-25 00:06:02 780

原创 内核内存回收关键隐藏变量之page引用计数

page引用计数的增加与减少

2024-02-25 00:03:35 985

原创 一次 irq_fpu_usable 内核报错排查总结

一次 irq_fpu_usable 内核报错排查总结

2023-12-31 14:35:11 517

原创 内核block层开发时遇到的各种变量同步问题总结

内核block层开发时遇到的各种变量同步问题总结

2023-12-31 14:31:02 897

原创 一次内核block层Multi queue报错IO QID timeout, reset controller案例分析

一次内核block层Multi queue报错IO QID timeout, reset controller案例分析

2023-12-31 14:10:56 1268

原创 一次奇葩的spin_lock_irq / spin_unlock_irq使用不当导致的系统卡死分析

spin_lock_irq spin_unlock_irq使用不当导致的系统卡死

2023-12-31 14:03:09 1018

原创 内核block层Multi queue多队列 实际调试总结

内核block层Multi queue多队列 实际调试总结

2023-12-31 13:52:01 959

原创 一次降低进程IO延迟的性能优化实践——基于block层bfq调度器(下篇)

优化bfq算法降低IO延迟,遇到的问题总结

2023-12-31 12:20:16 1308

原创 一次降低进程IO延迟的性能优化实践——基于block层bfq调度器

优化内核block层bfq调度器,降低IO敏感进程的IO延迟

2023-12-31 11:55:14 1245

原创 linux内核异步内存回收的另一个思路:基于冷热文件的冷热区域精准的回收冷文件页page(可做成内核ko)

针对pagecache的一种新的内存回收思路,精确找到冷文件页,有效避免频繁refault,可做成内核ko

2023-08-17 00:11:18 2909 11

原创 ext4 extent详解3之内核源码流程讲解

ext4 extent 源码+举例 详解

2022-12-31 22:52:02 1690 3

原创 ext4 extent详解2之内核源码详解

ext4 extent内核源码详解

2022-12-31 22:20:43 1943 4

原创 ext4 extent详解1之示意图演示

ext4 extent用示意图演示

2022-12-31 22:02:07 2414 4

原创 一次centos7、centos8编译内核后重启老是卡死案例分析

centos7、centos8编译内核后重启老是卡死

2022-12-31 16:37:06 2527

原创 内核RCU的一次实践——实战中加深了理解

rcu实战中加深理解

2022-12-31 16:27:19 1503

原创 一次无语的内核调试经历(内核卡死、内核内存越界、spin lock锁异常)

内核卡死、内核内存越界、spin lock锁异常排查

2022-12-31 16:09:46 3236

原创 ext4文件系统 文件/目录创建ext4_create/ext4_mkdir 函数源码解析

文件/目录创建函数ext4_create /ext4_mkdir,还有ext4_add_entry、__ext4_new_inode、find_group_orlov、find_group_other、ext4_getblk、ext4_mark_inode_dirty函数源码

2022-10-30 18:13:25 1386

原创 ext4文件系统之文件查找ext4_lookup函数源码解析

网上讲解ext4的文章挺多的,但是讲解ext4源码的文章很少。本文首先介绍ext4磁盘布局,然后讲解文件查找函数ext4_lookup源码

2022-10-30 17:51:52 1963

原创 内核block层IO调度器—bfq算法深入探索3

bfq算法有关的waker_bfqq、inject bfqq、实时性进程soft_rt_next_start的计算

2022-09-04 22:13:54 674

原创 内核block层IO调度器—bfq算法简单调试总结

bfq调度算法调试记录

2022-08-21 16:21:03 814

原创 内核block层IO调度器—bfq算法深入探索2

bfq源码深入探索,bfq_bfqq_has_short_ttime、bfq_bfqq_IO_bound、bfq_bfqq_in_large_burst 、bfq_better_to_idle、bfqq->wr_coeff

2022-08-20 22:09:25 824

原创 内核block层IO调度器—bfq算法之深入探索1

block层bfq算法深入探索

2022-08-20 21:16:01 1464

原创 内核block层IO调度器—bfq算法之3源码要点总结

内核block层IO调度器 bfq算法源码解析

2022-07-20 08:53:40 1042

原创 内核block层IO调度器—bfq算法之2源码详解

内核block层bfq源码介绍

2022-07-20 00:37:54 1130

原创 内核block层IO调度器—bfq算法之1整体流程介绍

内核block层bfq调度算法工作原理

2022-07-18 23:56:14 5086 2

原创 内核脏页平衡 balance_dirty_pages()源码解析

什么是脏页?进程文件IO写操作,一般是把数据写入pagecache,此时这些pagecache就变成脏页。如果系统有多个进程同时进行文件IO写操作,系统脏页脏页会非常多,此时就要执行balance_dirty_pages()函数脏页平衡:唤醒脏页回写内核进程,并且文件IO写进程还要休眠一段时间,等待脏页刷回磁盘。脏页回写的大体流程是什么?是否脏页太多就一定会触发脏页平衡?是否脏页太多进程就一定会休眠?为了解答这些疑问,需要清楚脏页回写相关函数balance_dirty_pages_ratelimite

2021-11-12 23:34:30 2121 2

原创 内核block层Multi queue多队列的一次优化实践

熟悉block层多队列、nvme的小伙伴应该知道,nvme硬件多通道(或者称为多队列)的优势特别大。普通的ssd硬盘也只有一个通道进行IO数据传输,但是nvme却可以多个硬件队列同时IO读写,性能特别好。谈到这里想到一点,如果是单线程IO读写,只能发挥一个nvme硬件队列的优势,能不能发挥下nvme多个硬件队列的优势呢?1 nvme 硬件队列繁忙时也容易io wait先介绍一个知识点,每个CPU都绑定一个唯一的nvme硬件队列,当然这些硬件队列可能会有重复的。我见过的一款性能不错的服务器,nv..

2021-11-01 00:23:29 2209 1

原创 文件预读readahead内核优化提升文件读取性能

之前写过一篇文章《page cache之文件预读readahead内核源码详解》,主要讲解了内核vfs层文件预读内核源码。受内核block层io_uring异步机制的影响,觉得可以对内核预读机制优化,提升文件读取性能。首先,我们需知晓,内核文件预读机制本身可以一定程度提升文件读取性能,这点在《page cache之文件预读readahead内核源码详解》中就提到过,我们这里再简单提下。比如,我们cat test读取文件,每次read系统调用只读取64K字节的文件数据:第1次执行read系统调用,读

2021-11-01 00:05:55 1715 4

原创 linux内核源码git操作简单总结

有个老同事想快速查看不同版本的内核源码,问我有没有啥方法,当然有。大部分玩linux的小伙伴应该都知道从kernel/git/stable/linux.git - Linux kernel stable tree 可以查找下载linux内核源码。但是内核源码原版本繁多,如果想在多个内核版本之间查看内核更新日志changelog和源码,总不能在kernel/git/stable/linux.git - Linux kernel stable tree一个个内核源码点击查看吧?效率太低了!比如现在怀疑发现

2021-10-20 00:09:17 2812

原创 文件系统read之ext4_readpages/do_mpage_readpage函数 源码详解

之前写过一片讲解文章《page cache之文件预读readahead内核源码详解》,针对内核vfs层文件read和预读机制相关源码,做了较为详细的讲解。我们再看下内核文件read的关键流程vfs_read->do_sync_read->generic_file_aio_read->do_generic_file_read, do_generic_file_read是文件read花式操作的核心函数,预读函数流程是:page_cache_sync_readahead->ondeman.

2021-10-20 00:08:27 1978

原创 lru缓存、lru链表、内存回收内核源码讲解

一说起内存回收,就想起来以前看内存回收源码时,一脸懵逼、头脑发胀,shrink_zone那些函数看了一遍又一遍就是看不懂,自信心第一次受到严重打击。内存回收源码涉及的知识点太多:lru缓存、lru链表、page cache、脏页回写、伙伴系统、page映射、内存分配、swap页交换、逆向映射等等,基本跟内存管理扯上关系的知识点都有涉及到。需要有个循序渐进的学习方法,才能一点点搞懂内存回收的原理。在内存紧张时,就会尝试回收文件页和匿名页page。大部分系统默认应该都没有配置swap交换,此时内存回收并.

2021-08-29 17:05:19 1463

原创 PageDirty、PageWriteback、PageReclaim、PageReferenced、PageUptodate等page的各个状态源码讲解

在看内核文件系统read/write、pagecache、内存回收相关代码时,多多少少应该看过if(PageDirty(page))、if(PageWriteback(page))、if(PageReclaim(page))、if (PageReferenced(page))、if (PageUptodate(page))、trylock_page这样内核代码,依次判断page是否有” Dirty”、”writeback”、” Reclaim”、” Referenced”、” Uptodate”、”loc.

2021-08-29 16:21:55 2332 1

原创 page cache之文件预读readahead内核源码详解

提起linux内核的文件预读机制,很多小伙伴肯定是听说过的,为什么预读机制可以提高性能?怎么让初学者快速理解预读机制呢?实践下来觉得还是用示意图举例最简单。本文首先根据实际读取文件的测试数据,用示意图讲解讲解预读机制,然后讲解相关内核源码。内核源码基于3.10.96,详细源码注释见https://github.com/dongzhiyan-stack/kernel-code-comment。1 文件预读示意图讲解测试命令很简单cat test >/dev/null,test文件之前没有...

2021-08-19 08:46:19 2084

原创 Linux内核vfs层优化之实现文件系统umount状态读写文件

近期发现不少机器异常重启(linux系统),一般重启都是发生内核crash了,会在/var/crash目录生成vmcore等crash日志,实际却没有,查看机器硬件日志,没有报错。硬件没有问题又不是内核crash,难不成是软件主动重启了?会不会应用层某种业务因为某种资源获取不到,主动发起了重启,就像执行了reboot重启命令一样,或者内核驱动因为检测到了未知异常,主动执行了重启函数?虽然这种可能性不大,但是暂时没有其他头绪,先从这个角度排查一下。 这两种重启最终都会执行到内...

2021-07-24 17:56:21 934 1

原创 linux内核block层源码优化之缓解容器间(多进程)IO抢占造成的IO延迟

我想从事服务器线上问题排查的同学,都应该遇到过多进程读写文件时,IO抢占导致的IO延迟明显问题。比如这样一个场景,磁盘sata,进程A不定时读取100KB的日志文件,正常情况几百us就读取完成。但是正碰巧遇到B进程也在读写一个200MB的数据文件,进程A大概率读取这100KB的配置文件耗时几十ms,甚至上百ms。这种情况很常见,因为sata盘随机读写性能也就几十MB,IOPS也就几百吧(好点的上千)。进程B读写那200MB的数据文件基本把sata盘带宽占完了,进程A只能等待进程B暂时让出IO...

2021-07-24 17:26:03 1262

原创 block层IO调度器 (deadline调度算法) linux内核源码详解

本文是笔者在之前写过的一篇《iostat IO统计原理linux内核源码分析----基于单通道SATA盘》基础上,对IO传输过程涉及的IO请求的合并、加入IO算法队列、从IO算法队列派发IO请求、deadline调度算法涉及的linux内核源码,做更深层次的探讨,内核版本3.10.96。更详细的源码注释见https://github.com/dongzhiyan-stack/kernel-code-comment。 跟上篇一样,开头先来个IO传输的入口函数submit_bio->ge...

2021-07-16 23:10:40 1564

原创 cgroup使用举例和linux内核源码详解

cgroup的原理其实并不复杂,用法也比较简单。但是涉及的内核数据结构真的复杂,错综复杂的数据结构感觉才是cgroup真正的难点。本文结合个人学习cgroup源码的心得,尽可能以举例的形式,总结cgroup整体框架和核心源码实现,尽可能少贴源码。本次是在centos 7.6测试的cgroup,源码注释基于3.10.96。这里先把cgroup涉及的各个数据结构的关系图发下,后边需要多次用到这幅图。转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存...

2021-07-11 00:01:08 3865 5

原创 writeback bdi脏页回写原理linux内核源码解析

说起脏页回写,大部分文章介绍的是与脏页回写有关的参数,讲解内核源码的并不多,本文主要讲解脏页回写的内核源码,顺便会把这些脏页回写参数与内核源码结合起来。文章正式开始前,先把这些与脏页回写有关的参数列一下:1 dirty_writeback_centisecs:脏页回写周期,默认5s执行一次脏页回写。2 dirty_expire_centisecs:控制脏页在内存中停留的时间,默认30s。就是说,当一个page被标记为脏页后,30s后就要被回写到磁盘。3 dirty_background_byt.

2021-03-30 07:56:09 2447 4

原创 /dev 目录下设备节点生成与访问过程 内核源码详解

由于我之前是在存储设备emmc上做的测试,实验/dev/mmcblock3设备节点的生成过程,这里实际讲解的是/dev/mmcblock3的生成过程。1 mmcblock3块设备的注册/dev/mmcblock3代表的是的块设备,在块设备驱动初始化时开始注册块设备,入口函数在drivers/mmc/card/block.c文件的mmc_blk_probe()函数,该函数主要分配与块设备紧密相关的struct gendisk结构,并添加到系统。static int mmc_blk_probe(s.

2021-02-11 20:16:49 3266

空空如也

空空如也

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

TA关注的人

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