虽然这玩意现在还不被认为稳定, 而且有些东西用它之后工作不正常, 但是我还是想介绍一下 - 怎么说不折腾不舒服是吧!
首先介绍下 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, ...
能传任意文件描述符么?
又一个把东西搬到内核的例子。
又可以丰富我的《痛恨Linux的十个理由》了。
这东西要做fd passing和namespace aware。恐怕不放在内核里实现不行。再说IPC部分本身就是放在内核里靠谱,就连以minimum著称的March都是放在内核里实现的啊。
orz,发现不能修改…/s/March/Mach/
你说服我了。
什么都放内核导致不通用。想想 BSD, solaris, etc.
貌似以前 RedHat 还把 http 服务放内核,声称能提升性能,但是其实并不提升,所以并没有什么人用。
路过~踩踩~…
喵, 好久没看到过这种 QQ 空间风格的路过了(
( ⊙o⊙ )哇~帅猫博客终于更新了呢~~虽然不知道KDBus是啥,但是赶脚很腻害的样纸呢~就酱紫,喵~
啊, 感谢提醒, 刚刚才发现写快了忘记介绍 KDBus 是啥了… 嗯明天来补上来
就喜欢你这样勇敢的男人!(呲牙大拇指
反正不会怀孕的, 试试嘛(
试了一下,Akonadi 果然不好使,不过 Kwallet 是好使的。不能忍啊,收不到邮件了。
U盘能正常使用吗?
可以, 至少我试了一下移动硬盘可以…
我当时应该不知道 D-Bus 是什么,我居然还会发表这样的评论……
肥猫居然。。。居然。。。。。玩kdbus了。。。。。。
为啥我不能玩 kdbus 呢~~