摘要:转自http://blog.tao.ma/?p=58这篇文章是淘宝内核组的刘峥同学在内部技术论坛上发表的一篇文章,但是由于刘峥同学目前没有blog,征得本人同意,贴在我的blog上,如果大家喜欢,请去新浪微博关注他。:)日前线上在升级到Ext4文件系统后出现应用写操作延迟开销增大的问题。造成这一问题的根源目前已经查明,是由于Ext4文件系统的一个新特性——Delay Allocation造成的。(后面简称delalloc)在详细分析这一问题之前,先来介绍一下Ext4文件系统的delalloc特性。这一特性简要概括起来就是将以前在buffer IO中每次写操作都会涉及的磁盘块分配过程推迟到数据回
阅读全文
摘要:前一阵子公司一部门有人叫帮忙调查,说他们write系统调用基本上是个位数微秒就返回,或者说几十us,但偶尔出现几次write系统调用达到几百毫秒和情况。大家都知道,通过vfs进行write,都是写写到page cache中,然后内核线程再定期同步到磁盘。写到内存应该是很快的才对。刚开始,我做了许多设想,1)磁盘IO太重,内存中的脏数据达到一定比率后write必须同步写到磁盘;2)那些耗时长的write是使用direct io,绕过了page cache;3、刚刚好write一个page时,read也在读同一page,那个page被lock了,write要等它。后来每一种假设又都被自己推翻了..
阅读全文
摘要:前几天微博上有同学问我磁盘util达到了100%时程序性能下降的问题,由于信息实在有限,我也没有办法帮太大的忙,这篇blog只是想给他列一下在磁盘util很高的时候如何通过blktrace+debugfs找到发生IO的文件,然后再结合自己的应用程序,分析出这些IO到底是谁产生的,最终目的当然是尽量减少不必要的IO干扰,提高程序的性能。blktrace是Jens Axobe写的一个跟踪IO请求的工具,Linux系统发起的IO请求都可以通过blktrace捕获并分析,关于这个工具的介绍请自行google之,这里推荐我们部门的褚霸同学的blog,里面有好几篇文章分别介绍了blktrace, blkp
阅读全文
摘要:转自http://blog.csdn.net/zklth/article/details/6248558文章http://blog.csdn.net/zklth/archive/2010/09/28/5912785.aspx介绍的是使用CentOS默认的SystemTap,这里介绍使用SystemTap源码独立安装SystemTap.源码下载地址SystemTap:ftp://sources.redhat.com/pub/systemtap/SystemTap:ftp://sources.redhat.com/pub/systemtap/releases/elfutils:https://fe
阅读全文
摘要:转载地址:http://blog.ops88.com/2012/07/12/74一. /proc/sys/vm/dirty_background_ratio该参数是在尝试一个write back 操作之前所持有的脏内存比例。在Linux内核中,pdflush内核线程池负责VM的回写操作。并周期性同步文件系统给的元数据。若超出了这个后台回写百分比,则pdflush守护进程异步处理回写操作。在CentOS5.5下,这个参数是10二. /proc/sys/vm/dirty_expire_centisecs该参数是数据可以保持为dirty状态的最大厘秒数。这个时间段通过查询所有在内存中缓存了脏页面的文
阅读全文
摘要:以下转自http://www.xaprb.com/blog/2009/08/23/how-to-find-per-process-io-statistics-on-linux/Newer Linux kernels have per-process I/O accounting and you can use the iotop tool to find out what’s performing I/O, but in many cases I’m trying to find the source of an I/O problem in an older kernel. I found
阅读全文
摘要:Limited Memory今天在虚拟机里面用Word处理文档的时候,突然硬盘灯一阵狂闪,然后虚拟机就一起消失了。这种事情屡见不鲜,很明显是Linux内核把占用最多内存的程序(这次是VirtualBox)终止掉了,而硬盘灯为什么会狂闪呢?这是因为在内存 用光之前,Linux的pdflush会把dirty pages写回磁盘上腾出内存给其他程序用。这段时间系统几乎处于不可用状态,Annoying!oom_killer默认配置下,当没有内存可以用而又要用到内存时,Linux内核的oom_killer(out of memory killer)会扫描一遍占用内存最多的程序(可能有多个,比如Virtu
阅读全文
摘要:iostat统计磁盘信息的时候,使用的是/proc/diskstats 。而/proc/diskstats是谁在写入呢?主要数据结构://genhd.hstruct disk_stats { unsigned long sectors[2]; /* READs and WRITEs */ unsigned long ios[2]; unsigned long merges[2]; unsigned long ticks[2]; // jiffies差 unsigned long io_ticks; // 从入队列到完成io的时间 unsigned lo...
阅读全文
摘要:摘要:和很多linux内核子系统一样,static tracepoint有很多层次,其中某个层次都展示给不同层次的开发者来满足他们的不同需求。关于linux tracepoint的详细信息,我们可以在linux内核文档Documentation/trace/tracepoints.txt和samples/tracepoints这两个地方找到。大致来说,对tracepoints本身的定义是第一个层次,一般只有内核开发者才会定义这些tracepoints;trace event是第二个层次,用于debug;第三个层次就是perf这些内核测试工具,他们调用底层的trace events来监控系统内核
阅读全文
摘要:The Linux tracing APIs are a relatively new addition to the kernel and one of the most powerful new features its gained in a long time. Unfortunately the plethora of terms and names for the system can be confusing, so in this follow-up to my previous post on the proc connector and socket filter, I’l
阅读全文
摘要:ftrace 简介ftrace 的作用是帮助开发人员了解 Linux 内核的运行时行为,以便进行故障调试或性能分析。最早 ftrace 是一个 function tracer,仅能够记录内核的函数调用流程。如今 ftrace 已经成为一个 framework,采用 plugin 的方式支持开发人员添加更多种类的 trace 功能。Ftrace 由 RedHat 的 Steve Rostedt 负责维护。到 2.6.30 为止,已经支持的 tracer 包括:Function tracer和Function graph tracer: 跟踪函数调用。Schedule switch tracer:
阅读全文
摘要:top命令中有两项与内存相关的东西:buffer和cache。这两项与页高速缓存相关。磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。在linux内核的旧版本中,主要有两种不同的磁盘高速缓存:页高速缓存(page cache)和缓冲区高速缓存(buffer cache),前者用来存放访问磁盘文件内容时生成的磁盘数据页,后者把通过VFS(管理磁盘文件系统)访问的块的内容保留在内存中。从2.4.10的稳定版本开始,缓冲区高速缓存其实就不存在了。事实上,由于效率的原因,不再单独分配块缓冲区;相反,把它们存放在叫做“buffer page”的专门页中,
阅读全文