8/29/2017

[PC note] 今更ながらのApollo lakeが意外といい感じ

とても今更かつ需要なさげな感じの話なのですが、先日Apollo lakeオンボのマザーでサーバーを新しく立てまして。その際に性能の計測等をしたのでメモ。

殆どの方には言うまでもない事でしょうけれども、Apollo lakeは要するにAtom系列のIntel製省電力SoCです。Atomは、基本的に省電力性を最優先として処理性能はばっさり切り捨てる設計となっていて、使いどころの難しい代物である事も周知の通りです。かつて、D5xx系等に省電力PCの決定版としての期待を抱き、しかしそのあまりの能力の低さに落胆した人も多いでしょう。

演算性能もメモリ帯域もキャッシュも、何もかもを犠牲にして消費電力の削減に特化していたAtomは、当然ながらモバイル分野で一定のポジションを維持し続けました。しかしそれすらも現在ではARMアーキに押されて斜陽となり、****-Trailと名付けられていた超省電力なタブレット等のモバイル端末向けのシリーズの開発は中止、デスクトップ(とノート)用、IoTの組み込み向け、あとサーバ向け等の限定されたラインのみが存続している状態にあります。

で、その追い詰められつつもかろうじて残っているラインの一つであるところのデスクトップ向け、その現行品がApollo lakeです。別に新しいものではなく、既にリリースからおよそ1年も経過しているものですが、その割にはお世辞にも普及したとはいい難く、一般にはむしろ前世代のBraswellの方が遥かに多く流通していて、さらに次世代のGemini Lakeが投入されると言われる2018年も近づく中、殆ど忘れられた世代になりつつあるのですね。

そんな影の薄いApollo lakeですが、各所でのベンチを見る限り、実は性能面では飛躍的に進歩しているようで。とりわけシングルスレッドの演算性能の向上は目を見張るべきものがあります。初期のIn-order型世代との比較では実に数倍、Out-of-order型に変更された後の世代、例えば前世代のBraswellとの比較ですら数割程度も向上しているのです。この点、キャッシュ容量等の数値上のスペックはBraswellとほぼ同じなので、基本的なアーキテクチャの変更、すなわち14nmプロセス採用によるシュリンクで得た分の余裕を拡張に回す事によって実現している、という事なのでしょうけれども、だとするとその開発には相当な労力がかかっていそうで、そのプレゼンスの無さにはいかにも不釣り合いな感じもします。尻に火がついた開発チームが頑張ったのでしょうか。消費電力は流石に増加していて、クアッドコアモデルでTDPが6Wから10Wになっていますが、絶対値としてはさほど問題になる程のものではないでしょう。というわけで、問題ないレベルのレスポンスが得られる省電力サーバを構築出来るのでは、と期待して、手を出してみる事にしたわけです。

具体的なSoCの選択に際しては、殆ど悩む必要はなかった、というかその余地がありませんでした。というのも、まずサーバーとしての処理性能を考えると必然的にクアッドコアが対象になるのですが、この時点でJ4205とJ3455のいずれかを積んだマザーしかありません。N系はノートPCのみ採用のようです。そして、サーバ用途につき後々のために拡張スロットを複数備えているものが望ましいわけで、そうなるともう国内で流通しているものはJ3455を積んだASUSのJ3455M-Eだけしかないのです。(海外ではASRock製のJ3455Mも流通しているようですが、入手が面倒なので外れます。)これを適当なMicro-ATXのケースに突っ込み、とりあえず2.5inchのHDDとメモリ(DDR3-12800、デュアルチャネル)を積んだだけのシンプルな構成で試してみる事にしました。OSはlinux(ubuntu17.04server)で、小規模なLAMP環境やDNS等、一般的なサーバーをセットアップした他、LXDE等のローカルの環境も入れてあります。

実際に諸々の作業をしてみた感触やWEBサーバ等へアクセスした際のレスポンスも悪くありませんが、一応は確認しておこう、という事でベンチマークを計測してみました。結論から言えば概ね良好。十分なパフォーマンスがあると言えるだろう結果になったのです。詳細は下記。

使用したベンチマークツールは、unixbenchです。基本的なところが分かればそれでいいということで。その結果(の抜粋)が次の表になります。表が2つありますが、そのうち1つ目の表はシングルスレッド、2つ目はマルチスレッド(4スレッド)の結果です。比較対象として、Core i3-2100T(2.5Ghz、2C4T)のLinux PCでの計測結果も並べました。なおi3-2100TのPCは、メモリの規格がDDR3-10600と若干落ちるものになっています。とはいえ、大半の処理はCPU内部が中心になりますから、その影響は大きなものではないかもしれません。

表中の各項目は、上から順に次のような点を評価しています。表の各項目中、[J3455]と[i3 2100T]の列がそれぞれのPCでの値で、最後の列はその比(J3455の結果をi3 2100Tの結果で割ったもの)になります。なお、最後の[System Benchmarks Index Score]は総合スコアですが、これはプロセッサの性能にあまり左右されない、HDD等へのファイルアクセス処理のスピードが加味されたものになっているため、参考程度と考えるべきでしょう。というわけで、結果をどうぞ。

[ベンチマーク結果]

・Dhrystone 2... 整数演算性能
・Double-Precision... 浮動小数点演算性能
・Execl... システムコール呼び出しの速さ
・Pipe Throughput: CPU内キャッシュのデータパイプ処理性能
・Pipe-based...: プロセス間通信の処理速度
・Process Creation: プロセス生成速度
・Shell Scripts(1...: sort, grep等のテキスト処理性能
・Shell Scripts(8...: 上記の並列処理性能(8並列)
・System Call...: システムコールの処理効率
・System Benchmarks Index...: 総合スコア

1 Parallel processesJ3455i3 2100TJ3455/2100T
Dhrystone 2 using register variables1669.12343.50.71
Double-Precision Whetstone595.4656.60.91
Execl Throughput610.71004.30.61
Pipe Throughput843.81326.20.64
Pipe-based Context Switching393.1381.61.03
Process Creation349.3972.30.36
Shell Scripts (1 concurrent)1019.42214.50.46
Shell Scripts (8 concurrent)2883.63755.90.77
System Call Overhead1198.82165.40.55
System Benchmarks Index Score969.31512.70.64

4 Parallel processesJ3455i3 2100TJ3455/2100T
Dhrystone 2 using register variables6389.65441.71.17
Double-Precision Whetstone2279.12178.71.05
Execl Throughput1769.52218.30.80
Pipe Throughput3221.62885.41.12
Pipe-based Context Switching1495.91710.20.87
Process Creation2102.122150.95
Shell Scripts (1 concurrent)3388.44185.90.81
Shell Scripts (8 concurrent)3270.94147.50.79
System Call Overhead3532.85121.20.69
System Benchmarks Index Score24182839.10.85

シングルスレッドの性能でも、Sandy世代のi3と比較して少なくとも6割以上の性能はある事が見て取れます。単純な計算処理については7割を超えています。さらに並列処理時の総合的なパフォーマンスでは、8割を超える性能がある事が見て取れます。i3は2コア+HTTなのに対し、J3455は4コアですから、並列処理で有利になる事は当然といえば当然ではありますが、内部的な処理については概ね互角、場合によってはそれ以上と言えるでしょう。大抵の用途で置き換えも可能なレベルです。

加えて、消費電力は通常時で19W、高負荷時で25W位です。i3-2100Tは省電力版(TDP35W)ですが、それとの比較ですら殆どの状況で半分以下。ワットパフォーマンスは極めて優秀と言ってよいでしょう。

総じて、その影の薄さ、存在感の無さにそぐわない性能の高さです。いいですねこれ。後は耐久性ですが、発熱が小さいというのはそれだけで耐久面では有利に働くもの、大いに期待出来そうで喜ばしい限りです。

[注意点について]

かようにポジティブなApollo lakeですが、注意すべき点もあります。何かと言うと、Apollo lakeはその仕様上、使用可能なメモリに制限があるのです。具体的には、現状市販のマザーは全てDDR3(DDR3L)のみの対応ですが、DDR3規格の内、DIMM一枚当たりの容量が2GB以下のメモリは殆どが使用不可で、4GBのメモリは、基本的に1rankのもののみ対応で、2rankは原則不可となっています。8GBは特に制限なし。

ここで4GBの場合に問題になるrankというのは、メモリの密度的なものです。現行のメモリは64bitを単位としてデータの送受信をするのですが、それがモジュール上に1系統だけあるものが1rank、2系統あるものが2rankとなっています。メモリ上のブロック数と言ってもいいでしょうか。これが複数あると、複数を制御しなければならない分、手間がかかるので、当然コントローラは対応していなければならないし、速度が落ちる場合もあって、不利になる、すなわちランクが落ちるというわけです。最近だとRyzenでメモリのRank毎に速度が違うという話がありましたが、Apollo lakeではその影響がもっとドラスティックで、ユーザを困らせるものになっている、という事です。

というわけで、4GBのメモリを使用する場合、その調達に際してはあらかじめRankを識別しなければならない、のですが、これが大変です。各メモリのRankは、メモリ上のラベルに記載がある場合もあるし、メーカーの仕様で明記されている場合もありますが、確認出来ない場合も多々あって困るわけです。少なくとも4GBのDIMMで、片面実装(片側のみに8枚のチップが乗っている)ものであれば確実に1rankなのですが、そもそも片面実装かどうかを事前に確認する事が難しい場合も多いでしょう。

しかも、全ての2rank(4GB)や2GBのメモリが使用不可かというとそうではないというのがまた。メーカーの公表している適合表中には、2GBのメモリも少ないながら記載があります。また、手持ちのメモリを幾つか試してみたところ、2rankの4GBメモリ(両面実装で、モジュール上のラベルに2rankとの記載もある)も認識しました。かと思えば、2GBのものは2種類試してみるも両方アウト。一体どういう事なのだろう。。。こういう曖昧な仕様はいけませんね。メーカーの適合表も市販品を網羅しているわけではないのですし、多くのメモリで互換性があるのかどうか試してみるまでわからない、というのは困ります。新規にメモリも調達する時はさほど問題ではないでしょうけれども、この種のオンボードの省電力マザーは余ったメモリの再利用先としてよく使われるものだろうし、それが結局再利用出来ずメモリを買い足す羽目になったりすれば、誰でも遺憾に思うところでしょう。困ったものです。

ともあれ、その辺りを回避し得て稼働している限り、優秀なチップである事は間違いありません。私は使いませんが、グラフィック周りも高い性能を示しているそうですし、このラインが今後とも継続・発展を続けるよう願いたいところですね。というわけで、今回はこれでおしまい。