まず,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)に問題無用で入れてしまっていいはずなのだが.よくわからない.
~$ 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