怎样用上ext4 bigalloc
有位叫“summer77”的同学发邮件询问我如何使用ext4的bigalloc特性,主要是不方便直接把内核从2.6.28升到3.2去,跨度太大。但是我给他的回信用gmail死活发不出去(summer77同学,是不是你的邮箱有问题呀),我只能在这里做答了。
bigalloc是在3.2版以后的linux kernel才有的,因为公司要用,所以我们backport到了淘宝kernel上——淘宝kernel是基于rhel6的2.6.32-kernel的
(跟这则新闻提到的所谓“淘宝linux发行版”没有任何关系,我们自己也不知道那个“发行版”是谁做的),我们backport了一些业务部门要用到的内核组件(比如netoops、drbd等),也fix了一些功能性能bug(这些bug都已经反馈给了redhat和内核社区)。
淘宝linux kernel的代码是公开的:http://kernel.taobao.org/git/?p=taobao-kernel.git;a=summary 有兴趣的同学可以
1. git clone http://git.kernel.taobao.org/taobao-kernel.git
2. cd taobao-kernel
3. ./scripts/package.py --buildid 20120921 (buildid可以自己随意)
4. cd taobao-kernel-build
5. rpmbuild -bb kernel.spec --with rhel5 --with baseonly --without dracut --define="_sourcedir `pwd`" --define="_builddir `pwd`" --define="_rpmdir `pwd`/rpm"
这样就能编译出基本的包了,具体参考淘宝@内核开发的“本地编译方法”
(第5步执行中可能会提示需要你跑一下“ rngd -r /dev/urandom”)
先装kernel-firmware,再装kernel,重启,新内核就生效了。
要使用bigalloc,还需要安装最新stable的e2fsprogs-1.42.5(bigalloc要求用户态工具也是新的)
然后就可以:
mke2fs -O extent,bigalloc -C 65536 /dev/sda
mount -t ext4 /dev/sda /test/
了。
=== 2012.09.24 ===
tina: 请问你们porting的工作量大概多少人周?因为没有找到这个patch包,不知道涉及的修改工 作量到底有多少?另外你们是从哪里找到资料做这个backport工作的?谢谢
答:@tina,bigalloc的全套工作是我负责的,backport本身只用了不到一个月,再就是两个月的功能和性能测试(我们组没有QA,测试全靠自己),然后是长达数月的线上稳定性验证和收集性能测试报告——不要小看这性能测试报告,说实话,采集数据和整理报告比backport累人多了,也枯燥多了。当然,线上验证不用人守着,那段时间我又去搞overlayfs和hadoop集群的kernel优化了(不然老大们肯定会嫌我工作不饱满)。
我们backport的那些bigalloc的patch是从ext4的maintainer——Ted的代码库里的一个临时分支里找来的(那个临时分支是他给linus的),但是现在这个临时分支可能已经被删掉了。如果您有兴趣,可以直接看upstream的git log,里面从 021b65bb1e4e4b625c80bbb82651e5e155721ef3 到 5356f2615cd558c57a1f7d7528d1ad4de3640d96,是最初的十几个patch,后面还有一些小fix就只能靠自己整理了。
=== 2012.10.19 ===
claire:我能否放弃rpmbuild的编译方式,通过make menuconfig重新配置编译,而进行安装?以及,64位能否改成32位?
答:可以自己用源代码编译,步骤如下
1. git clone http://git.kernel.taobao.org/taobao-kernel.git
2. cd taobao-kernel
3. ./scripts/seq-patch.py
4. cd tmp/linux-2.6.32-279.9.1.el5/
这里面就是源代码了,可以自己make menuconfig编译。
相关文章
- ext4 bigalloc 答疑 - 02 21, 2013
- 修复ext4 aio bug一个 - 01 15, 2013
- 修复ext4 bug一个 - 12 25, 2012
确认一下:淘宝kernel虽然支持bigalloc ,但是还不支持 1MB block size 是吗
@深蓝加菲,支持的,只要有了bigalloc,cluster size可以一直往上,1MB、2MB、4MB甚至8MB(通过 -C 指定),当然,我们实际最多也就用到1MB,生产上应该不需要8MB那么多
请问你们porting的工作量大概多少人周?因为没有找到这个patch包,不知道涉及的修改工作量到底有多少?另外你们是从哪里找到资料做这个backport工作的?谢谢
如果方便,可以留一个沟通方式么?比如MSN。很多技术问题想请教,谢谢!
@tina,很抱歉,我们上班时间只能用旺旺,别的IM不允许使用,而且msn我也不能保证即刻回复。如果有技术问题,可以直接发到我博客右上角的那个邮箱,我会尽快反馈。谢谢!
原来 mingming cao 有一个64KB block size 的patch, 请问cluster size 和这个是差不多的机制吗? 我理解cluster size 是可以分配连续块,但是64K block size就是block 64K?
Ted的这个bigalloc跟mingming cao的patch完全不同,在bigalloc里,所谓64k的cluster,并非block真的变成了64k,而仅仅是分配单位从4k变成了64k,block bitmap里的一个bit以前代表4k,现在代表64k了。而block这个单位还是保留了,比如extent里的start和length都还是以block(4k)为单位,如果一个extent有64k那么长,它的length还是16,而在block bitmap里只占1个bit。 我曾经提patch想让Ted把extent里的单位也换成cluster,最后被否了。