来尝鲜 KDBus 吧!

虽然这玩意现在还不被认为稳定, 而且有些东西用它之后工作不正常, 但是我还是想介绍一下 - 怎么说不折腾不舒服是吧!

首先介绍下 kdbus (及相关的用户态工具), 这玩意是 Greg KH (Linux 内核稳定版本负责人, 主要负责 kdbus 部分) 和 Lennart Poettering (混乱邪恶的 Avahi, Pulseaudio, Systemd 作者, 主要负责 libsystemd-bus 部分) 等大神写的, 用来在内核态实现一个 dbus 的实现, 而用户空间的 dbus-daemon (包括 session dbus) 则交由 libsystemd-bus 来提供(兼容)接口. 下面引用的介绍来自Solidot:

kdbus支持内核消息过滤、提供了可靠的次序保证,支持传送文件描述符,它被认为比用户空间的D-Bus能提供更强的安全性和更好的性能。

不过对于咱用户来说, 关心的主要问题当然是更好的性能啦, 根据一篇 Gentoo 的如何玩 kdbus 的介绍, 咱能感觉到的变化有: dbus 本身更快了! 机器启动也更快了!

下面就是 Arch 里测试的步骤啦, 其实很简单嗯.

1. 安装 kdbus-git 和 systemd-git (都在 AUR 里)

注意如果你用的是自定义的内核, 请修改 kdbus-git 的 PKGBUILD 里对应的部分. 默认的 PKGBUILD 应该只能在不开 [testing] 的默认内核里工作.

安装完成后, 跑一次 # depmod -a 来让模块生效

2. 新建文件 /etc/modules-load.d/kdbus, 里面只写一行 kdbus 即可

2.99. 注意, 如果你之前习惯于 eth0 eth1 这样的网卡命名并且因此 mask 了 80-net-name-slot.rules, 你需要重新 mask 80-net-setup-link.rules, 否则改名又会出现... (感谢 systemd-networkd 吧)

3. 重启!

我这里测试的结果是, --system 的 dbus-daemon 还在, 而 --session 的 dbus-daemon 没有了, 一大堆 systemd-bus-proxyd 进程出现了.

最后, 记一下我测试一些软件的结果:

调用 kdbus 正常工作: Fcitx, Pidgin, Chromium, Pulseaudio, ...
在 kdbus 下无法正常工作: kwallet, akonadi, ...

18 thoughts on “来尝鲜 KDBus 吧!”

    1. 这东西要做fd passing和namespace aware。恐怕不放在内核里实现不行。再说IPC部分本身就是放在内核里靠谱,就连以minimum著称的March都是放在内核里实现的啊。

        1. 什么都放内核导致不通用。想想 BSD, solaris, etc.

          貌似以前 RedHat 还把 http 服务放内核,声称能提升性能,但是其实并不提升,所以并没有什么人用。

      1. 试了一下,Akonadi 果然不好使,不过 Kwallet 是好使的。不能忍啊,收不到邮件了。

Leave a Reply

Your email address will not be published. Required fields are marked *

QR Code Business Card