内核
文章平均质量分 88
青阳Jayan
这个作者很懒,什么都没留下…
展开
-
mmap源码分析--基于3.10.0-693.11.1
mmap是个既简单又好用的东西,对于读写文件,它减少了一次内存拷贝,对于内存申请,它可以方便的申请到大块内存,用于自己管理。今天就来说说mmap的实现。mmap的原型是这样的:void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);它在内核里的样子是...原创 2018-10-03 11:00:52 · 2104 阅读 · 0 评论 -
direct IO 内核实现分析及揭示一个坑——基于3.10.0-693.11.1
linux的读写系统调用提供了一个O_DIRECT标记,可以让尝试绕过缓存,直接对磁盘进行读写(为啥是尝试绕过?当直接落盘失败时还要通过缓存去落盘)。为了能实现直接落盘,使用direct IO限制多多,文件偏移得对齐到磁盘block,内存地址得对齐到磁盘block,读写size也得对齐到磁盘block。但direct IO的实现还是有个小缺陷。这个缺陷我在fuse上的分析已经讲清楚了,对于缺陷原理...原创 2018-10-11 20:37:02 · 2921 阅读 · 0 评论 -
poll源码分析--基于3.10.0-693.11.1
我们依然从函数调用开始分析,先分析poll的系统调用实现SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds, int, timeout_msecs){ struct timespec end_time, *to = NULL; int ret; //如果传了超时时间,则在这里获取墙上时间 i...原创 2018-10-07 12:54:53 · 355 阅读 · 0 评论 -
记一次iscsi umount不掉的内核bug
总结是不可能不写的了,这辈子都不可能不写,以前没有写blog的习惯,结果找个以前解过的bug,愣是看好一会来捋清当时到底啥情况。bug背景测试同事发现一个集群的iscsi文件系统umount不了,同事查看了下是iscsi断线了还一直连不上,在存储服务器连上后,结果还是umount不掉。bug排查首先看下umount的报错,busy表示有进程还在使用该文件系统,存储掉了出现这种情况好解释,i...原创 2018-09-29 21:15:13 · 590 阅读 · 0 评论 -
内核fuse实现中的一个隐患--基于centos 3.10.0-693.11
一次项目中,我们用的基于fuse的文件系统进程出core挂掉了,排查发现,这并不是个BUG,算是个缺陷吧。出core表现是这样的,libfuse从/dev/fuse中调用read读取内容,读返回成功了,但缓冲区只更新了部分内容,还有部分内容是旧的,导致libfuse执行了旧的命令,而我们实现的fuse文件系统,某些命令重复执行是会出core的,也幸亏会出core才能暴露这个bug,不然某些命令重复...原创 2018-10-10 22:35:33 · 1607 阅读 · 0 评论 -
sas控制器驱动结构粗探--基于3.10.0-693.25.4
公司出了个内核core,是宕机在了mpt3sas这个模块,以前没见过这个模块啊,不过不影响bug排查。这个模块是sas控制器的驱动。在之前的IO栈中,只了解到过通用块层,scsi往下的就没接触了,也正好趁此解这个bug的机会了解下IO栈scsi以下是什么。从config描述可以看到,mpt3sas是SAS控制器驱动,特殊点在于它是基于Fusion-MPT 架构的。config SCSI_MPT...原创 2018-10-26 11:13:09 · 3653 阅读 · 0 评论 -
cgroup源码分析——基于centos3.10.0-693.25.4
因docker研究cgroupcgroup主要是对进程进行控制和审计,cgroup到底是怎么进行工作的呢?从cgroup在进程中的位置入手研究会看的清楚点。看task_struct的结构:#ifdef CONFIG_CGROUPS /* Control Group info protected by css_set_lock */ struct css_set __rcu *cgr...原创 2018-11-27 08:47:06 · 953 阅读 · 0 评论