用systemtap分析磁盘写入操作
转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>
这几天发现有好几块broncho开发板的FLASH坏了,broncho使用的SLC,现在的SLC写入寿命至少在10W次以上,尽管现在的测试要比正常使用高得多,也没有可能在不到一个月就坏了啊。不过最近听人说jffs2的磨损均衡只是在剩余空间中进行,而broncho的剩余空间并不多,这让我觉得事态有些严重。
得做点什么才行。我先想到的是文件操作可能存在问题,没有多少地方需要进行写入操作啊,即使均衡不好,flash也不应该坏得这么快啊。为了揭开这个谜底,我写了个简单的systemtap脚本,用来分析文件写入操作。
- probekernel.function("do_sync_write")
- {
- name="do_sync_write";
- dev=__file_dev($filp)
- devname=__find_bdevname(dev,__file_bdev($filp))
- ino=__file_ino($filp)
- filename=__file_filename($filp);
- if((uid()==0||uid()==503)&&!isinstr(filename,"[")&&filename!="stap.log")
- {
- printf("name=%spid=%duid=%dino=%dname=%sfilename=%s/n",name,pid(),uid(),ino,devname,filename);
- }
- }
输出结果让我有些意外:
- name=do_sync_writepid=22542uid=0ino=324338name=sda1filename=sqlite_lVkvYHYHUTVO2SS-journal
- name=do_sync_writepid=22542uid=0ino=324338name=sda1filename=sqlite_lVkvYHYHUTVO2SS-journal
- name=do_sync_writepid=22542uid=0ino=324338name=sda1filename=sqlite_lVkvYHYHUTVO2SS-journal
- name=do_sync_writepid=22542uid=0ino=324338name=sda1filename=sqlite_lVkvYHYHUTVO2SS-journal
- name=do_sync_writepid=22542uid=0ino=324338name=sda1filename=sqlite_lVkvYHYHUTVO2SS-journal
- name=do_sync_writepid=22542uid=0ino=324316name=sda1filename=sqlite_lVkvYHYHUTVO2SS
- name=do_sync_writepid=22542uid=0ino=324316name=sda1filename=sqlite_lVkvYHYHUTVO2SS
- name=do_sync_writepid=22542uid=0ino=324316name=sda1filename=sqlite_lVkvYHYHUTVO2SS
- name=do_sync_writepid=22542uid=0ino=324316name=sda1filename=sqlite_lVkvYHYHUTVO2SS
- name=do_sync_writepid=22542uid=0ino=324316name=sda1filename=sqlite_lVkvYHYHUTVO2SS