Linus Torvalds、「dbusはマジでクソだ」
Linus Torvaldsが、kdbusがdbusに比べてスピードアップしたということについてMLで話している。Linusの考えでは、dbusをカーネル側に持って行ったらコンテキストスイッチなどのオーバーヘッドを回避できるのでパフォーマンスアップにつながるという主張は間違っていて、現状のdbusのユーザースペースの処理が無駄にクソすぎるので遅いだけだという。
From: Linus Torvalds <torvalds <at> linux-foundation.org> Subject: Re: [GIT PULL] kdbus for 4.1-rc1 Newsgroups: gmane.linux.kernel Date: 2015-04-27 22:00:09 GMT (1 day, 3 hours and 39 minutes ago)On Mon, Apr 27, 2015 at 2:40 PM, Andy Lutomirski <luto <at> amacapital.net> wrote:
> "USER"を"SESSION"に変えてみては。
動いた。
> ビルド方法は
そんなこと誰がするか。俺はこうした。
gcc client.c -o client $(pkg-config --cflags --libs gtk+-2.0)
これでいけた。
[訳注:先のLinusの発言]
>> とは言え、これはお前がpotatoでテストを動かしてるか、dubsが >> マジでクソかのどちらかだろ。1000バイトのメッセージを2万回往復 >> するのに4秒以上もかかるのはありえん。とはいえ、さっきも言ったように >> 俺には何が起こっているのか確かめることもできん[訳注: Linusはdbusのビルドができなかった] > > いえーい、俺はこのメールをpotatoで書いているんだけど見てるー?いや、お前は正しいようだ。どうやらpotato説は違ったみたいだな。「dbusはマジでクソだ」説だ。
こいつにカーネルフットプリントなどほぼありゃしねぇ。時間をすべてユーザースペースのオーバーヘッドで浪費してやがる。
マジレスすると、プロファイルをちらっと見ただけでも、「kdbusはパフォーマンス上、重要だ」というのは完全に根拠のない話のようだ。これが問題の上位15だ。
2.62% gdbus libc-2.20.so [.] _int_malloc 2.43% gdbus libc-2.20.so [.] free 2.31% server libc-2.20.so [.] free 2.12% gdbus libc-2.20.so [.] malloc 1.77% gdbus libglib-2.0.so.0.4200.2 [.] g_utf8_validate 1.43% gdbus libglib-2.0.so.0.4200.2 [.] g_slice_alloc 1.41% gdbus libglib-2.0.so.0.4200.2 [.] g_hash_table_lookup 1.28% server libc-2.20.so [.] _int_malloc 1.27% gdbus libglib-2.0.so.0.4200.2 [.] g_mutex_lock 1.22% gdbus libglib-2.0.so.0.4200.2 [.] g_variant_unref 1.16% server libc-2.20.so [.] malloc 1.14% gdbus libglib-2.0.so.0.4200.2 [.] g_bit_lock 1.07% gdbus libglib-2.0.so.0.4200.2 [.] g_slice_free1 1.05% gdbus libglib-2.0.so.0.4200.2 [.] g_bit_unlock 1.01% gdbus libglib-2.0.so.0.4200.2 [.] g_mutex_unlock上位15にカーネル関数などありゃしねぇ。全部オーバーヘッドだ。これはサーバーサイドのものだが、クライアント側もほぼ同じだ。
たぶんだが、kdbusのスピードアップとやらは、カーネルには一切関係がない。単にdbusサーバーのユーザースペースのクソを使わなくてすむようになったからだ。
要するに、コンテキストスイッチを回避できるからとか宣う奴らはたぶん、単なるドアホだ。コンテキストスイッチじゃねーよ。クソなユーザースペースのコードのせいだ。
Linus