FreeBSD Daily Topics

2012年10月4日メニーコア時代のFreeBSD

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論理コアがやってくるにはまだ数年以上の時間がかかると見られますが、そう遠くない段階でこうしたメニーコアの利用が廉価なモデルでも実現されることになるものとみられます。開発者や運用者、設計者はコアをいかに使い切るか、早い段階から研究的な取り組みを実施したほうが良い段階に来ていると言えそうです。

おすすめ記事

記事・ニュース一覧