Post Tagged with: "kernel"

Systemd 赋予每一个程序一个控制分组

在早前激烈的讨论中,systemd 的作者似乎有舌战群雄的能力,说服了 Linus 和一众内核大神,因为那个超强提速的鸡血补丁只能应用在 TTY 发起的程序上,比如说打开一个终端用 make -j 64 编译内核。这种做法在一般用户里并不常见,所以不具备广泛性。但是从侧面可以看出,Linus 是迫切改善 Linux 的桌面性能,似乎是和怕老婆有点关系吧。

而 systemd 的作者 Lennert  提出在用户层,即在进程管理器上实现这一功能。在其最新的 systemd 13 版本中,他首先改善了关机进程。此外 systemd 已经可以控制 fsck 和 quota 保证并行度最大化。现在 systemd 也可以在启动过程中激活加密分区等。

这个版本最大的一个改变是可以在 CPU 级别赋予所有程序一个控制分组 cgroup(cotnrol group),但没有更进一步的动作。systemd 要实现鸡血补丁的自动分组功能,首先要赋予每一个程序每一个线程一个控制分组,而下一步则是在 cgroup 的基础上,实现自动分组,调节每一个分组的 CPU 优先级,而现在 systemd 只是走出了第一步

在 systemd 上实现自动分组可以使这项功能应用面更加广泛,效果也更加。届时所有程序都可以调节 CPU 优先级,则可以有效提高桌面的流畅度。除了 systemd 以外,老旧的 sysvinit 和 upstart 暂时没有计划实现自动分组。OpenSUSE 11.4 有计划默认使用 systemd,而 Debian 和 Ubuntu 则是持续观察中。

Xen Dom0 重新回到最新 Linux 内核

刚刚有开发者在 Debian 开发列表发表公告,经过开发者团队的努力,Xen Dom0 PVOPS 内核已经可以进入 Linux 内核了。现在正在等待 Linus 重新打开 git 仓库提交的大门。

Xen 是一个高性能的虚拟化解决方案,采用了引以为傲的准虚拟化方案,极大地提升了虚拟机执行性能和外围 I/O 性能。可惜在 2.6.20 内核引入 Linux 自己的虚拟化方案时输给了新兴的 KVM。自此,Xen 一直很难获得主流内核的支持。而且基于其代码的复杂性,维护人员只是局限于 Xen 开发人员。对于普通的系统管理员而言,Xen 也是及其复杂的。所以 Xen 大多数应用在数据中心领域。

引入 PVOPS 接口以后,Xen 开发人员只需要维护 Xen Dom0 和 PVOPS 之间的兼容性,不需要再像以往那样把 Xen 整合到 Linux 内核。从开发维护的角度上说,新的 PVOPS 接口可以节省 90% 的工作量。Xen 开发人员可以更加关注于 Xen 的性能提升和功能开发,而不需要再像以前耗费在维护的任务身上。

不会出现在 2.6.37 内核的三个特性

2.6.36 内核已经发行了一段时间了,2.6.37 内核也就提上了开发日程。但以下三个组件将不会进入内核主干:

1. VIA 带有 TTM/GEM 和 KMS 的图形 DRM。被放弃的原因是因为长期缺乏开发者开发,开发者邮件列表长期被荒废,所以被放弃是正常的事情。至于什么时候恢复,似乎没有人能说准。毕竟用 VIA 显卡的用户不多,开发者更加少。随着时间的推移,老的硬件也会被时代淘汰。是否值得为一个过气的显卡品牌编写驱动也是一个值得商榷的问题。原来计划在 2010 年第四季度开发的 Gallium3D 驱动更加是杳无音讯。

2. Reiser 4 文件系统:自从 Hans Reiser 因为杀妻罪入狱以后,Reiser 4 文件系统就处于开发停滞的状态。虽然是有开发者主动挺身而出,承担了 Reiser 4 文件系统的开发,但是主创灵魂已经身在监狱,Reiser 4 的命运一直蒙上一层阴影。比 VIA DRM 好的地方就是还有一大堆开发者在维护和交流,但远不是到达可以进入 Mainline 内核的地步。他们还是提供了相关补丁给用户自行编译使用测试。

3. AMD HD 6000 系列 GPU 的 DRM:看看 Intel Sandy Bridge 还没有发布,其开源驱动已经基本实现了。而 AMD 的呢?虽然 HD 6800 系列的实际产品已经发布了,但是 Linux 还是一个奢谈。也难怪,人家有官方专有驱动,可是最新版本的 10.10 并没有提供 HD 6800 的相关支持。至少还得等到 10.11。开源驱动嘛,最快要到 2.6.38 内核,或许能跟得上 Ubuntu 11.04 和 Fedora 15 的发布吧。

在 Debian 上编译 Linux 内核

从前编译Linux内核就是一件麻烦的事情,要搞很多配置参数。而现在虽然仍然配置很多内容,但是已经比以前简化多了。在Debian上还有一个十分方便的工具,叫make-kpkg。

首先是安装编译Linux内核所需要的组件:

sudo apt-get install build-essential kernel-package libncurses5-dev

安装结束以后,自然就是下载Linux的内核源代码。可以去kernel.org下载官方的压缩包,当然也可以去下载Zen这种经过激进改良的版本。下载完成就解压,然后就在终端里进入解压目录。

其次就是配置内核选项。内核选项众多是世人皆知的事实,但是究竟哪些模块是必要的,哪些模块是适合自己机器的,就不是很多清楚了。从2.6.32内核开始,内核的Makefile提供了一个新的选项。

make oldmodconfig

此选项是保证用户设定的内核选项都包含了适用于本机硬件的驱动。然后就提供了一个悠长的问答题让用户选择新版本内核中提供的新模块。这似乎也花上一段不短的时间。喜欢手动的朋友可以坚持用:

make menuconfig

具体应该怎样配置内核,金步国先生的内核配置大作或者后续更新。配置结束后,就可以借助make-kpkg进行编译内核了。如果内核已经编译过一次了,还是先清理一下。

make-kpkg clean

然后就是正式开始编译内核了。

fakeroot make-kpkg –initrd –bzimage –revision 2.6.35.5-1 –append-to-version -custom-amd64 binary

这里解释一下make-kpkg的选项,–initrd表示会在编译内核的同时生成initrd文件,–bzimage表示使用bzip压缩内核(话说现在内核支持用lzma压缩,在menuconfig选了lzma会有啥后果呢?),–revision是子版本号,这个可以随意定制,若不指定系统会默认设为10.00.Custom。–append-to-version是额外增加的软件版本号。

binary是make-kpkg的目标,binary包含两个分目标:binary-arch和binary-indep。前者包含了kernel_image和kernel_headers,后者包含了kernel_source、kernel_manual和kernel_doc。此外还有用于编译额外内核模块的modules和创建内核libc的libc-kheaders.

make-kpkg还有更多参数,包括–cross-compile、–arch、–subarch用于交叉编译。编译出来的内核包会是以下格式的文件名,假设是在amd64架构上编译2.6.35.5内核:

linux-image-2.6.35.5-custom-amd64_2.6.35.5-1_amd64.deb
linux-headers-2.6.35.5-custom-amd64_2.6.35.5-1_amd64.deb

最后还是要吐槽一下Debian还要依赖的那个linux-kbuild,详情留意我早前的网志:http://www.liangsuilong.info/?p=670

自己制作 linux-kbuild 的 deb 包

我之前写过一篇牢骚文发泄对 Debian 不出 linux-kbuild 的不满,后来在 Debian Wiki 找到了帮助,自行解决了 linux-kbuild 的问题。

说到底还是自己编译,首先到 debian 的 SVN 服务器抓取一份 linux-kbuild 的源代码,然后下载一份完整的内核源代码压缩包,随后用内核的源码包生成一个 linux-kbuild 经过 debian 化的 orig 源码包,最后就是编译生成 linux-kbuild 的 deb 包即可。

详细方法可以参考以下文章:http://www.liangsuilong.info/?p=670