src FreeBSD on many cores 現在、コンシューマ向けのCPUで4コア/8スレッドのモデルが出回っています。エンタープライズ向けのモデルだと、8コア/16スレッドを2つ搭載するといった形で32スレッドのマシンが扱われるようになっています。これからはこうしたメニーコアをいかに効率良く活用していくのかが、システム構築や運用、インフラ運用、アプリケーション開発などに求められることになります。 次の出力はIntelのXeon E5-2687W 2プロセッサで構築されたマシンで動作しているFreeBSDでのコマンドの出力結果です。32個論理コアが認識され、起動時にもそれぞれが順次認識されています。 FreeBSD on Xeon E5-2687W x 2 % sysctl -a hw.model hw.model: Intel(R) Xeon(R) CPU E5-2687W 0 @ 3.10GHz % sysctl -a hw.ncpu hw.ncpu: 32 % dmesg | grep '^cpu' cpu0: <ACPI CPU> on acpi0 cpu1: <ACPI CPU> on acpi0 cpu2: <ACPI CPU> on acpi0 cpu3: <ACPI CPU> on acpi0 cpu4: <ACPI CPU> on acpi0 cpu5: <ACPI CPU> on acpi0 cpu6: <ACPI CPU> on acpi0 cpu7: <ACPI CPU> on acpi0 cpu8: <ACPI CPU> on acpi0 cpu9: <ACPI CPU> on acpi0 cpu10: <ACPI CPU> on acpi0 cpu11: <ACPI CPU> on acpi0 cpu12: <ACPI CPU> on acpi0 cpu13: <ACPI CPU> on acpi0 cpu14: <ACPI CPU> on acpi0 cpu15: <ACPI CPU> on acpi0 cpu16: <ACPI CPU> on acpi0 cpu17: <ACPI CPU> on acpi0 cpu18: <ACPI CPU> on acpi0 cpu19: <ACPI CPU> on acpi0 cpu20: <ACPI CPU> on acpi0 cpu21: <ACPI CPU> on acpi0 cpu22: <ACPI CPU> on acpi0 cpu23: <ACPI CPU> on acpi0 cpu24: <ACPI CPU> on acpi0 cpu25: <ACPI CPU> on acpi0 cpu26: <ACPI CPU> on acpi0 cpu27: <ACPI CPU> on acpi0 cpu28: <ACPI CPU> on acpi0 cpu29: <ACPI CPU> on acpi0 cpu30: <ACPI CPU> on acpi0 cpu31: <ACPI CPU> on acpi0 % プロセッサの性能を使い切るには、実際にどの程度プロセッサが活用されているかをモニタリングする必要があります。もっとも簡単にこのあたりのモニタリングを実施できるのは、top(1)コマンドに-Pを指定したときではないかと思います。 top -Pの出力結果 / Xeon E5-2687W x 2 last pid: 64041; load averages: 0.00, 0.00, 0.00 up 1+21:33:37 12:01:38 28 processes: 1 running, 27 sleeping CPU 0: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 1: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 2: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 3: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 4: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 5: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 6: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 7: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 8: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 9: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 10: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 11: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 12: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 13: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 14: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 15: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 16: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 17: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 18: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 19: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 20: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 21: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 22: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 23: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 24: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 25: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 26: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 27: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 28: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 29: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 30: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 31: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle Mem: 40G Active, 12M Inact, 3570M Wired, 1180M Cache, 4595M Buf, 17G Free Swap: 128G Total, 152K Used, 128G Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 2580 root 1 21 0 28812K 1772K select 28 2:01 2.78% natd 2736 root 1 20 0 56252K 4420K select 23 0:07 0.00% sshd 2937 root 10 52 0 12180K 1520K rpcsvc 8 0:02 0.00% nfsd 2720 root 1 20 0 25180K 2916K select 6 0:02 0.00% ntpd 2620 root 1 20 0 14344K 1600K select 31 0:01 0.00% syslogd 2744 root 1 20 0 16424K 1860K nanslp 31 0:00 0.00% cron 64007 usp 1 20 0 36048K 5276K pause 1 0:00 0.00% zsh 2836 root 1 20 0 16424K 1736K select 15 0:00 0.00% rpcbind 2859 root 1 20 0 270M 1656K select 4 0:00 0.00% rpc.statd 2740 smmsp 1 20 0 23844K 3536K pause 30 0:00 0.00% sendmail ... 現時点で、コンシューマ向けのハイエンドモデルとなると、ヘキサコアを搭載した6コア/12スレッドのプロセッサがあります。IntelのCore i7-3960XでFreeBSDを使う場合、次のような出力が得られます。 FreeBSD on Xeon E5-2687W x 2 % sysctl hw.model hw.model: Intel(R) Core(TM) i7-3960X CPU @ 3.30GHz % sysctl hw.ncpu hw.ncpu: 12 BOAS001 /home/usp% dmesg | grep '^cpu' cpu0: <ACPI CPU> on acpi0 cpu1: <ACPI CPU> on acpi0 cpu2: <ACPI CPU> on acpi0 cpu3: <ACPI CPU> on acpi0 cpu4: <ACPI CPU> on acpi0 cpu5: <ACPI CPU> on acpi0 cpu6: <ACPI CPU> on acpi0 cpu7: <ACPI CPU> on acpi0 cpu8: <ACPI CPU> on acpi0 cpu9: <ACPI CPU> on acpi0 cpu10: <ACPI CPU> on acpi0 cpu11: <ACPI CPU> on acpi0 % コンシューマモデルの廉価モデルで16論理コアや32論理コアがやってくるにはまだ数年以上の時間がかかると見られますが、そう遠くない段階でこうしたメニーコアの利用が廉価なモデルでも実現されることになるものとみられます。開発者や運用者、設計者はコアをいかに使い切るか、早い段階から研究的な取り組みを実施したほうが良い段階に来ていると言えそうです。