ARM Server Dayに参加しました

ARM Server Day 第一回

本日はさくらインターネット研究所で実施されたイベントに@naoto_matsumotoさんからお誘いいただき参加してきました。

背景

前職ではkernelやdriverのコードを読む機会が多かったことと、またH8などの組み込みLinuxやPICに興味を持って遊んでいた時期に鳥海師匠に感化されたこともあり、ARMにも注目していました。

ARM 64bit

ARMは従来32bitCPUしかなく、個人的には組み込み用途という印象がありました。ただ、64bitCPUも登場し、いよいよ2週間程前にKernel3.7でも正式対応されています。
kernelnewbies: ARM 64-bit support
LinaroもLEG(Linaro Enterprise Group)でARMサーバーを推進しています。

今回の参加目的

ARMのCPUが省電力、高集約という観点で、Hadoopのような大規模分散環境でどう使えるのかを中心に聞いてきました。
組み込み系の方、H/Wベンダー、OS関連、仮想化、ミドルウェア、データセンターなど、多くの業種の方が参加されていました。面白いですね
#ARMに関する情報は、イベントのページに大量にリンクを貼っていただいているので、そちらをご覧下さい。

Calxeda(カルゼーダ)

CalxedaのEnergycoreのデモ機が実際に動作していた。1枚のボードあたりのスペックはこんな感じ。最大12枚まで刺さる。

  • CPU: ARM A9 x 4
  • Memory: 汎用DIMM(?), 各CPU毎に1スロット
  • HDD: 各CPU毎にSATA x 4
  • 10GbE

メモ

  • ネットワークは10GbEでIMPIとNICに接続。ただしネットワークトポロジはかなり特殊で、CPU0が外部と繋がっており、他のCPUとはツリー構造のようなトポロジーになっている。(資料がみつからないのであとで貼る)
  • 各CPUはNUMAのような構成ではなく、完全に独立。他のコア用のメモリスロットは直接見えない(らしい。dmesgでもnumaのようなメッセージは見当たらなかったような記憶があるけど、ビアバッシュでご馳走になってたからなぁ。)
  • tasksetでアフィニティの設定は可能とのこと
  • ネットワークはxgmac0として認識される
  • ケーブルレス、スイッチレス。2U最大48ノード。これは魅力的

big.LITTLE

今回印象に残ったテクノロジの一つがbig.LITTLE
スペックの違うCPUを組み合わせて、高負荷時と低負荷時の切り替えを行うことでバッテリー寿命が長くできる。エンタープライズの場合にはバッテリ寿命というよりも消費電力の削減。素晴らしい。
しかし、これをカーネルのスケジューラが管理するのは大変だろうな。。

Hadoopとの組み合わせはどうかを考える

さて、主目的のHadoopで使ったらどうかについて考えてみる。酔っぱらっての妄想なのでツッコミはなしで。

  • NameNode: CPUとHDDはそこそこのスペック。メモリが大量に必要 -> 32bitではメモリが少なすぎる。64bit/64GBであれば問題ないか?
  • DataNode: 大量のHDDが良好なパフォーマンス。メモリとCPUはそこそこで良い -> SATA 4本は少ないがノード数を増やしたらどうか?ネットワークが早いのでブロックのコピーなどは良好かもしれない。
  • JobTracker: ネットワークが早いので、メモリさえあれば良いかも
  • TaskTracker: ワークロードに依存するが、並列にMap, Reduceを実行するにはメモリの容量とCPUが求められる。結構厳しいかな?マルチコアじゃないから1core-1map(or 1reduce)とすると性能はどうか?
  • HBase:メモリが少ない。追って考察してみる
  • Implaa:メモリとHDDの本数が少ないのが懸念。いや、そもそもLLVM使ってネイティブコードだし、ARMだと動かないか。。

メモリの問題は時間が解決するが、少ないディスク数という弱点を大量のノード数で補えるかには興味がある。
1) 分散FSという観点で考えると、HDFSのみが目的であればDataNodeとして使える可能性がある。
2) 分散処理という観点では、ワークロードに依存するので難しいが、用途を考えれば使い道はありそう。
3) HBaseのような大規模分散データベース(データストア)との相性は難しいか?
いずれにしても非常に興味深いイベントでした。今回はお誘いいただきありがとうございました。
P.S:
グッズのUSBメモリいただきました m(__)m