Hatena::ブログ(Diary)

Emacs ひきこもり生活 このページをアンテナに追加 RSSフィード

2010-12-07

Kernel/VM Advent Calendar 1日目: kmemcheck にご用心!

| 21:16 |  Kernel/VM Advent Calendar 1日目: kmemcheck にご用心!を含むブックマーク

Kernel/VM Advent Calendarに本来考えてたネタをやろうとVMの中のカーネルをいじっていたところ、ふと気がつく。

Tuxくんが一人しかいない…? VMでは4コアあげているしなぜ?

確かに /proc/cpuinfo を見ても CPU が1つしか使われてないのだ。

その時とった dmesg -> https://gist.github.com/731682

[ 0.000000] SMP: Allowing 4 CPUs, 0 hotplug CPUs

CPU4つあるよね……

[    0.140772] Brought up 1 CPUs
[    0.140784] Total of 1 processors activated (4787.87 BogoMIPS).

1つしか起動されない…

[    0.024100] CPU0: Intel QEMU Virtual CPU version 0.13.0 stepping 03
[    0.140155] kmemcheck: Limiting number of CPUs to 1.
[    0.140171] kmemcheck: Initialized

……ん? これか! "kmemcheck: Limiting number of CPUs to 1."

ということで、 kmemcheck のお話です。

もともと、 kmemcheck は Linux カーネルデバッグ用の機能。 カーネルのコードの中で初期化されずに使われるメモリがないかどうかをチェックする valgrind のようなもの。 これを有効にしていると、デスクトップ用途には使いづらくなる…らしいです。 (linux/Documentation/kmemcheck.txt)

んで、この kmemcheck の初期化

int __init kmemcheck_init(void)
{
#ifdef CONFIG_SMP
	/*
	 * Limit SMP to use a single CPU. We rely on the fact that this code
	 * runs before SMP is set up.
	 */
	if (setup_max_cpus > 1) {
		printk(KERN_INFO
			"kmemcheck: Limiting number of CPUs to 1.\n");
		setup_max_cpus = 1;
	}
#endif

こんな風に SMP が使われていたら 1つのCPUしか使わせないという… それ CONFIG_SMP を Disable にしてくれよ… orz なコードになっていまして、こいつのせいで1つのCPUしか見えてこない、というわけでした。 (さらに言えば、デフォルトオフにしてても CPU 1つにされてしまう…まぁしかたないけど)

対策: kmemcheck を使わない しか現状なさそうです。まぁ確かに遅いしいいけど…

SMP 対応パッチhttp://www.kerneltrap.org/mailarchive/linux-kernel/2008/5/23/1920164 にあるのですが、議論がいつのまにか忘れられてしまったのか中途半端な状態に…。 このスレッドだと(多分 qemuバグで) qemu じゃ動かない、と言っていますが今はどうなんでしょうね。 やってみて Advent Calendar にしようかと思います。

トラックバック - http://d.hatena.ne.jp/meech/20101207/1291724189