実はFreeBSDのclarkdale supportは問題を抱えているんじゃなかろうか.

まず,Linux(debian.Mutoさん作のlenny-custom-0116を使用.kernel 2.6.32)だと,

  • C1 stateはほとんど採用されず
  • C2 stateは非対応
  • C3 stateは比較的頻繁に採用

となるものが,FreeBSDだと通常のネットワークパフォーマンスを維持するために必要なkern.hz=1000だと,

  • C1 stateをほぼ採用
  • C2 stateはほとんど使用されず
  • C3 stateは存在しない

となる.ちょっとおかしい.

latencyを見ると,単にLinuxでのC3がFreeBSDのC2であるだけかも知れないので,たいした問題ではないかも知れない.

ただ,LinuxがC3 stateをレイテンシを維持しながら比較的うまく使うように調教されているのは確か.その結果,Linuxだとアイドル32Wを達成できるものが,FreeBSDだと46Wになる.

だいたい,冷静に考えればC3 stateに入ってしまっても254usで復活するのだから,1msごとの割り込みでも気にせずC3 state(FreeBSdであればC2 state)に問題無用で入れてしまっていいはずなのだが.よくわからない.

Linux

~$ cat /proc/acpi/processor/CPU*/power
active state:            C0
max_cstate:              C8
maximum allowed latency: 2000000000 usec
states:
    C1:                  type[C1] promotion[--] demotion[--] latency[003] usage[00004595] duration[00000000000000000000]
    C2:                  <not supported>
    C3:                  type[C3] promotion[--] demotion[--] latency[245] usage[00051364] duration[00000000013374181166]
active state:            C0
max_cstate:              C8
maximum allowed latency: 2000000000 usec
>states:
    C1:                  type[C1] promotion[--] demotion[--] latency[003] usage[00007076] duration[00000000000000000000]
    C2:                  <not supported>
    C3:                  type[C3] promotion[--] demotion[--] latency[245] usage[00050811] duration[00000000013346051667]
active state:            C0
max_cstate:              C8
maximum allowed latency: 2000000000 usec
states:
    C1:                  type[C1] promotion[--] demotion[--] latency[003] usage[00003030] duration[00000000000000000000]
    C2:                  <not supported>
    C3:                  type[C3] promotion[--] demotion[--] latency[245] usage[00026452] duration[00000018460058369295]
active state:            C0
max_cstate:              C8
maximum allowed latency: 2000000000 usec
states:
    C1:                  type[C1] promotion[--] demotion[--] latency[003] usage[00006084] duration[00000000000000000000]
    C2:                  <not supported>
    C3:                  type[C3] promotion[--] demotion[--] latency[245] usage[00026253] duration[00000000013283923573]

FreeBSD(kern.hz=1000)

dev.cpu.0.cx_supported: C1/3 C2/245
dev.cpu.0.cx_lowest: C2
dev.cpu.0.cx_usage: 100.00% 0.00% last 500us
dev.cpu.1.cx_supported: C1/3 C2/245
dev.cpu.1.cx_lowest: C2
dev.cpu.1.cx_usage: 100.00% 0.00% last 500us
dev.cpu.2.cx_supported: C1/3 C2/245
dev.cpu.2.cx_lowest: C2
dev.cpu.2.cx_usage: 100.00% 0.00% last 500us
dev.cpu.3.cx_supported: C1/3 C2/245
dev.cpu.3.cx_lowest: C2
dev.cpu.3.cx_usage: 100.00% 0.00% last 500us

追記

ついでに言っておくと,FreeBSDは周波数の表示もおかしい

$ sudo sysctl -a dev.cpu.0.freq_levels
dev.cpu.0.freq_levels: 2926/9125
$ sudo sysctl -a dev.cpu.0.freq
dev.cpu.0.freq: 2926