操作系统: 09 2012存档
有位叫“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编译。