Whine/Buzz ノイズ

gentoo インストールしていて気づく。多分 acpid をインストールしたあたりから。CPU に起因するものとディスプレイに起因するものがあるようだ。
Red Sweater Blog – MacBook Pro Complaints を見ると

  • CPU Whine

人によって出方が違うが、バッテリ電源で動作している時に多く見られる。
ノイズはCPUの使用に直接関係している。単純に電力消費に直接関連した結果のようだ。
このノイズは組み込みの iSightカメラ、他のUSBカメラプラグイン、または Mirror Widget/MagicNoiseKiller などを使う事で、CPUの使用率が一定に保たれることにより緩和される。これらは、実際に、iSight カメラを動作させるのと同様の負荷分散を、簡単に得ることができる。

  • Display buzz/whine

このノイズはCPU whineと良く間違えられるが、別物です。このノイズの特徴はディスプレイの輝度(brightness)に依存して良くなったり悪くなったりします。多くの人はディスプレイを最高輝度にした時に、ノイズがはっきりと認識でき、ディスプレイを暗くした時にだけノイズを減少させる事ができたという経験をしているようです。全てのケースにおいて、でぃプレイを完全に暗くした場合にノイズが発生しなくなります。Apple はディスプレイインバータの欠陥に起因している事を認めています(?)。しかしながら Apple のサポートは、一部のユーザーに「このノイズはがまん出来るレベル」だと言っているようです。

  • Mooing Noize

このノイズは、光ドライブが位置する、ラップトップの右下から聞こえます。ノイズはマシンの温度に関係があるようで、何人かは、それが単に温度に応じてファンが稼働/停止していると推測しています。
(英語ダメダメです〜訳せません〜)

The fault here if that is the case is that the fan is so repeatedly started and stopped, such that it is noticeably active over a long period of time.
The fan never seems to come on and stay on, it ramps up and then dies.

私には、これが欠陥かどうかを判断する知識/情報を持っていません。

  • High pitched squeal

(機会があったら訳す)

  • Heat!

(機会があったら訳す)

英訳疲れるので、ここでおわり。とりあえず CHUD 入れたらOK見たいのでそれで様子見。Linux はどうすっかなー。cpufreq で AC On の場合、"On demand High" にしているのがまずいんだろうな。Performance にするか、On Demmand Highの minfreq を高めにしてやればOK?

LKML: "Tim Hull": PROBLEM: MacBook makes whining noise when usb-uhci active では、2.6.18 じゃノイズでないよ、usb-uhci が原因だよと言っている。cpufreqじゃぁないのかなぁ。とりあえず、UHCIドライバをモジュールにしておけばいいのかな?

Bug #124642 “MacBook makes whining noise when uhci-hcd loaded” : Bugs : Linux にも色々書いてある。bluetouth は関係ねーと思うなぁ。組み込んでなくても出るしよ。

Problem with high pitch noises - ThinkWiki では、ThinkPad だけど、具体的な解決策がのってる。CPU State を 4以上にしなければいいという方法か。

  • CONFIG_ACPI_PROCESSOR=y の場合、kernel 起動引数に max_cstate=3 を指定する
  • CONFIG_ACPI_PROCESSOR=m の場合、kernel 起動引数に processor.max_cstate=3 を指定する
  • 同じく m の場合、/etc/modprobe.conf で max_cstate=3 を指定する
  • 同じく m の場合、"echo 3 > /sys/module/processor/parameters/max_cstate"

ありゃ、gentoo での解決策も出てるな。

##### /etc/init.d/limit-sleep-states
#!/sbin/runscript

depend() {
  need acpid
}

start() {
  ebegin "Limiting CPU sleep state to C${LIMIT_CSTATE}"
  echo $LIMIT_CSTATE > /sys/module/processor/parameters/max_cstate
  eend $?
}

stop() {
       ebegin "Removing CPU sleep state limit"
       echo $REMOVE_CSTATE > /sys/module/processor/parameters/max_cstate
       eend $?
}
##### /etc/conf.d/limit-sleep-states
# limit CPU sleep state to the following value (adjust accordingly)
LIMIT_CSTATE=3
# some value which is higher than all available sleep states
REMOVE_CSTATE=8

という init-script をこさえて、

# rc-update add limit-sleep-states default

と、登録する。これで AC電源の時だけ CPU Stateを制限できる。

# rc-update add limit-sleep-states default battery

これだと、常に(バッテリ電源の時も) CPU Stateを制限する。あと、他にも色々あるみたいだ。

  • ACPI の processor モジュールを組み込まないと良い

なるほど。

  • タイマの周波数を低くする(Win XP と同じく 100 Hzに)

"Timer Frequency → Processor type and features (CONFIG_HZ)"はいじった気がする。