- 博客(51)
- 资源 (13)
- 收藏
- 关注
原创 Linux内核低损耗、精准的异步内存回收冷mapped文件页的探索
Linux内核低损耗、精准的异步内存回收 冷mapped 文件页,以文件为单位
2024-02-25 00:29:07
1652
原创 一次内核block层Multi queue报错IO QID timeout, reset controller案例分析
一次内核block层Multi queue报错IO QID timeout, reset controller案例分析
2023-12-31 14:10:56
2983
原创 一次奇葩的spin_lock_irq / spin_unlock_irq使用不当导致的系统卡死分析
spin_lock_irq spin_unlock_irq使用不当导致的系统卡死
2023-12-31 14:03:09
1576
原创 linux内核异步内存回收的另一个思路:基于冷热文件的冷热区域精准的回收冷文件页page(可做成内核ko)
针对pagecache的一种新的内存回收思路,精确找到冷文件页,有效避免频繁refault,可做成内核ko
2023-08-17 00:11:18
3996
15
原创 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
1927
原创 ext4文件系统之文件查找ext4_lookup函数源码解析
网上讲解ext4的文章挺多的,但是讲解ext4源码的文章很少。本文首先介绍ext4磁盘布局,然后讲解文件查找函数ext4_lookup源码
2022-10-30 17:51:52
2886
原创 内核block层IO调度器—bfq算法深入探索3
bfq算法有关的waker_bfqq、inject bfqq、实时性进程soft_rt_next_start的计算
2022-09-04 22:13:54
940
原创 内核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
1241
原创 内核脏页平衡 balance_dirty_pages()源码解析
什么是脏页?进程文件IO写操作,一般是把数据写入pagecache,此时这些pagecache就变成脏页。如果系统有多个进程同时进行文件IO写操作,系统脏页脏页会非常多,此时就要执行balance_dirty_pages()函数脏页平衡:唤醒脏页回写内核进程,并且文件IO写进程还要休眠一段时间,等待脏页刷回磁盘。脏页回写的大体流程是什么?是否脏页太多就一定会触发脏页平衡?是否脏页太多进程就一定会休眠?为了解答这些疑问,需要清楚脏页回写相关函数balance_dirty_pages_ratelimite
2021-11-12 23:34:30
3037
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
3180
1
原创 文件预读readahead内核优化提升文件读取性能
之前写过一篇文章《page cache之文件预读readahead内核源码详解》,主要讲解了内核vfs层文件预读内核源码。受内核block层io_uring异步机制的影响,觉得可以对内核预读机制优化,提升文件读取性能。首先,我们需知晓,内核文件预读机制本身可以一定程度提升文件读取性能,这点在《page cache之文件预读readahead内核源码详解》中就提到过,我们这里再简单提下。比如,我们cat test读取文件,每次read系统调用只读取64K字节的文件数据:第1次执行read系统调用,读
2021-11-01 00:05:55
2783
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
3761
原创 文件系统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
2713
原创 lru缓存、lru链表、内存回收内核源码讲解
一说起内存回收,就想起来以前看内存回收源码时,一脸懵逼、头脑发胀,shrink_zone那些函数看了一遍又一遍就是看不懂,自信心第一次受到严重打击。内存回收源码涉及的知识点太多:lru缓存、lru链表、page cache、脏页回写、伙伴系统、page映射、内存分配、swap页交换、逆向映射等等,基本跟内存管理扯上关系的知识点都有涉及到。需要有个循序渐进的学习方法,才能一点点搞懂内存回收的原理。在内存紧张时,就会尝试回收文件页和匿名页page。大部分系统默认应该都没有配置swap交换,此时内存回收并.
2021-08-29 17:05:19
2433
3
原创 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
3166
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
2911
6
原创 Linux内核vfs层优化之实现文件系统umount状态读写文件
近期发现不少机器异常重启(linux系统),一般重启都是发生内核crash了,会在/var/crash目录生成vmcore等crash日志,实际却没有,查看机器硬件日志,没有报错。硬件没有问题又不是内核crash,难不成是软件主动重启了?会不会应用层某种业务因为某种资源获取不到,主动发起了重启,就像执行了reboot重启命令一样,或者内核驱动因为检测到了未知异常,主动执行了重启函数?虽然这种可能性不大,但是暂时没有其他头绪,先从这个角度排查一下。 这两种重启最终都会执行到内...
2021-07-24 17:56:21
1432
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
1623
原创 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
1980
原创 cgroup使用举例和linux内核源码详解
cgroup的原理其实并不复杂,用法也比较简单。但是涉及的内核数据结构真的复杂,错综复杂的数据结构感觉才是cgroup真正的难点。本文结合个人学习cgroup源码的心得,尽可能以举例的形式,总结cgroup整体框架和核心源码实现,尽可能少贴源码。本次是在centos 7.6测试的cgroup,源码注释基于3.10.96。这里先把cgroup涉及的各个数据结构的关系图发下,后边需要多次用到这幅图。转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存...
2021-07-11 00:01:08
5661
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人