10月17日到18日两天在LSI上海办公室参加了 CLSF2013 讨论会。简要记录之,如有错误,欢迎拍砖。

第一天早上开场先是由LSI亚太区的总裁致辞欢迎大家,因为请来的几乎都是LSI的客户:华为、oracle、阿里、百度、腾讯等(其实还有竞争对手,比如fusionio:)。当然,LSI做为东道主不仅提供了场地还提供了中午饭,还真要谢谢人家。

先由Jeff Liu介绍去年xfs的进展。xfs去年最大的改动是加入了自描述的元数据,其实就是元数据的CRC校验,如果读取时发现校验对不上,就直接返回IO error。因为这个校验的增加,还将superblock升级到了v5,从测试来看加此校验只增加了不到5%的CPU消耗。
涛哥发问:“你是在机械硬盘上测的吧?机械硬盘太慢,所以校验计算增加的overhead比例就不明显,你应该用SSD进行测试。”
Jeff回答:“我们oracle没钱,我就一个笔记本,只能自己买了一个ORZ,不,是OCZ的便宜SSD做测试,overhead也就是这个水平。“
xfs_io现在开始支持SEEK_DATA/SEEK_HOLE,可以直接找到文件空洞所在的偏移。通过在mount的时候计算transaction log的保留空间(而不是像过去在运行时计算),减少了运行时的压力。在xfs做日志恢复时加入了readahead,减少了读延迟,加快了日志恢复的速度。
还有一些特性尚未merge code,但是正在开发中的,比如:在线文件系统缩容(涛哥一个劲的追问:谁会有这么奇怪的需求?);为空闲inode单独建一个btree,以加快小文件创建(也就是分配inode的速度);对inode cache的压缩(这里要解释一下,xfs是一款有20年历史的老文件系统,当初从SGI弄到linux里来的时候linux的vfs还不完善,所以里面有很多代码是做了今天vfs的很多工作的,所以inode也比较肥大:超过1700字节,有了压缩以后,可以减小到308字节),不仅省内存,也减少了磁盘IO。
接下来的讨论是关于online fsck的,
涛哥:我们线上有需求,如果机器异常重启,做fsck太慢来不及,所以希望先启动机器,然后慢慢的做online fsck,但是ext4是没有online fsck功能的,xfs有吗?
Jeff:xfs的目标,是不需要fsck,元数据自我描述自我恢复,现在AG(xfs的块分配单位,allocation group)就是自我管理的
Coly:我们当初挑选过的,xfs的代码量要几倍于ext4的,以我们这么小的团队和互联网对文件系统那么小的需求,ext4更加合适
Jeff:这个,xfs代码量大的问题,我得说两句,首先,xfs代码风格比较古老,函数调用里每个参数都是单起一行的,而且,注释量达到30~40%,比ext4的10~20%高得多,所以代码量自然也大得多。
涛哥:如果xfs有类似online fsck的功能,就是文件系统一边被使用一边做修复检查,那我们会考虑部分使用xfs的
Jeff:现在没有这个功能,也没有开发计划
涛哥:那xfs还有什么优势?
Jeff:xfs的需求是来源于付费的大客户的,要求大文件的支持、良好的稳定性、良好的扩展性、高并发IO下的良好性能
文卿:ext4在打了directio nolock的补丁以后,并发读写已经赶上xfs了....
总之,Jeff被涛哥一顿烂虐。后来吃晚饭的时候,涛哥反复申明:”我不是要难为Jeff,是我确实遇到一些需求ext4目前不好解决,如果xfs能满足我们就考虑部分使用xfs“,我:”你这样问法是不对的,你拿着火枪跑到武术馆说‘你们的武术能快过火枪吗?能快过我就学你们的武术’,这不是踢馆是什么?”

Intel的Yuanhan Liu(不是我故意输入英文名,是coly给的日程表里都是英文名,没办法)介绍和吴峰光一起做的0-day kernel test自动化框架,能自动检测kernel tree的性能变化(不管是好的变化还是坏的变化),然后自动bisect找到引起变化的patch,给相关人员发信。其实我们这边(阿里)非常需要这样的自动测试系统,因为内核组一个专职QA都没有。于是我们怂恿intel的同学把这个自动化测试的东东做成一个测试云服务,我们好接入,“做为回报,我们会持续的大量的继续购买intel的CPU“(Coly原话)。


clsf-2013

吃中午饭的时候我向Jeb Tang讨教了线上遇到的磁盘IO hang住的问题,Jeb表示,这个问题极难查找原因,因为磁盘的firmware、raid/sas卡的firmware、内核驱动都有嫌疑,而且他感觉,6Gb SATA口很多人反映稳定性不如3Gb的,更不如SAS口,所以google在服务器定制的时候,干脆在每个sata口上加了个reset芯片,一旦发生io hang住的情况,自己调那个芯片硬件reset那个sata口(相当于插拔硬盘,只不过不需要人肉了),就返回io error了。我于是专门问了这个reset芯片的价格:一个0.6美元。
边吃饭还边请教了百度的谢广军同学对于已经mount了的磁盘,插拔后怎么做到盘符绑定,原来用udev可以。回头我试试。

下午是我厂的文卿同学介绍ext4的进展。extent status tree终于进入upstream,以前aio会等在ext4元数据分配这个地方,现在有了extent status tree,等待少了很多。以前ext4的"打洞“只支持extent的文件,现在也支持间接块式的文件,甚至还支持bigalloc下的打洞。另外,bigalloc和delay allocation合用会有warning的那个问题也解决了,当然,Ted否决了我的patch以后,用了一个也不咋高级的方案。算了,不提这些了。谢广军同学对bigalloc表示了兴趣,当然,目前还在观望,主要看其他屌丝(比如我们)有没有把bigalloc的坑踩完。文卿同学说到了online fsck的那个需求,
文卿:目前能支持online fsck的文件系统就是三个,linux上的btrfs,freebsd上的zfs和ffs,btrfs太不稳定,zfs和ffs并发IO的性能不如ext4,用户不接受。所以目前我们还在想办法。另外,我们现在也在做ext4的quota功能,但是subtree的dir quota不准确,也需要改进。rhel7以后就默认xfs了,在这之前,ext4还是得发挥余热....
广军:不是吧,我们百度才不到20%的用的是ext4,还要推广呢,你这就”发挥余热“了?!
我:看来终于有一个新东西我们比百度的同学推得快了

来自oracle的Bob Liu同学介绍了zswap。zswap其实就是把要swap到硬盘的page先压缩再存磁盘,这样可以减少IO延迟,但是会多耗一点CPU。这个功能最早是在IBM的power架构上做的,用的是power带的协处理器来做LZO压缩,所以比较合适。

来自苏州柯达的majianpeng同学介绍了他所在公司的监控系统对文件系统和存储的需求。他们一开始用的是IPSAN做后端存储,但是发现成本太高,于是改用自己开发的用户态的文件系统来合并小文件为大文件(类似淘宝的TFS),现在已经成本很低了,也满足了需求。我很好奇的问jianpeng同学何以在软raid社区发了那么多patch,他说那不是他的工作是他的兴趣爱好属“不务正业”,我很感慨,我应该向他好好学习。


clsf-2013