前回の続き!

我が家の場合はこのRYZENにLinuxが載るわけですが。
LinuxではRYZENのSMT対応はkernel 4.10からだそうです。
前回はLGA1151で使っていたSSDをそのまま繋いでDebian8を動かしたのですが、さすがにそれじゃダメだろうということでOSを入れ換えることにします。
ただもうkernelコンパイルする歳ではないので、2017/03末の時点でkernel 4.10がパッケージで提供されているディストリビューションを探したところ、UbuntuがPPAで提供してくれてるので、Ubuntu 16.04 LTS Serverを入れることにします。
で、ネタにするからには何らかのベンチマークを取る必要があるわけですが、最近ほんと見なくなったUnixBenchを使います。この辺は個人的な趣味です。
環境はこんな感じ。
- RYZEN 7 1700 + Debian8(kernel 3.16.0-4) + SMT有効
- RYZEN 7 1700 + Ubuntu 16.04(kernel 4.4.0-71) + SMT有効
- RYZEN 7 1700 + Ubuntu 16.04(kernel 4.10.0-14) + SMT有効
では測定結果。
RYZEN 7 1700 + DDR4-2400(32GB) | |||
Value/kernel | 3.16.0 | 4.4.0-71 | 4.10.0-14 |
Dhrystone 2 using register variables | 318754347.9 | 323699079.0 | 322392493.1 |
Double-Precision Whetstone | 51209.1 | 52905.2 | 53380.8 |
Execl Throughput | 41154.7 | 37667.5 | 38402.7 |
File Copy 1024 bufsize 2000 maxblocks | 689093.6 | 841400.0 | 761087.0 |
File Copy 256 bufsize 500 maxblocks | 192413.1 | 226705.2 | 187534.1 |
File Copy 4096 bufsize 8000 maxblocks | 1983193.9 | 2511097.8 | 2277952.4 |
Pipe Throughput | 20122528.4 | 20955724.9 | 21701315.0 |
Pipe-based Context Switching | 3107573.4 | 3263138.8 | 3511373.5 |
Process Creation | 111245.5 | 87527.6 | 117425.4 |
Shell Scripts (1 concurrent) | 105853.9 | 98171.2 | 80951.3 |
Shell Scripts (8 concurrent) | 14169.6 | 13465.4 | 12749.6 |
System Call Overhead | 8755651.9 | 9068976.4 | 8979548.6 |
これまたコメントに困る結果やね…
- 「Context Switching」はkernelが新しいほど恩恵を受ける
- 「Process Creation」はkernel 4.4と4.10で明確な差がある
- 「File Copy」の4.10での遅さが気になる
- 「Shell Scripts」はkernelが新しいほど遅い
- 「Execl Throughput」は3系と4系で結構違う
という感じでしょうか。
kernel sourceを見る限りでは、現時点でkernel 4.4にはまだRYZEN SMT向けの修正はバックポートされていませんでした。
といってkernel 4.10で修正の恩恵を受けているかは、UnixBenchの結果を見ても正直よく分からない感じです。
で。
ぶっちゃけた話をするとパフォーマンスが高かろうが安定してなきゃ意味がないわけですが、kernel 4.10上のKVMで全コア全開でキッチリ上まで回していたら
qemuが暴走してLoad Averageが70を超えて手が付けられなくなった
ので、kernel 4.4で運用することになったことをお知らせします。まあPPAだから仕方がないよね。
さて。
ついでに参考値的に以下の構成でもUnixBenchを取っておきました。
- RYZEN 7 1700 + Ubuntu 16.04(kernel 4.10.0-14) + SMT無効
- Core i5-6500 + Debian8(kernel 3.16.0-4)
まずはRYZEN SMTの有無による違い。kernel 4.4でも取っておくべきでしたが忘れてました。
RYZEN 7 1700 + DDR4-2400(32GB) + kernel 4.10 | ||
SMT有効 | SMT無効 | |
Dhrystone 2 using register variables | 322392493.1 | 290864407.9 |
Double-Precision Whetstone | 53380.8 | 32683.5 |
Execl Throughput | 38402.7 | 26235.1 |
File Copy 1024 bufsize 2000 maxblocks | 761087.0 | 830576.6 |
File Copy 256 bufsize 500 maxblocks | 187534.1 | 213630.7 |
File Copy 4096 bufsize 8000 maxblocks | 2277952.4 | 2542950.9 |
Pipe Throughput | 21701315.0 | 16107282.8 |
Pipe-based Context Switching | 3511373.5 | 2384293.7 |
Process Creation | 117425.4 | 88457.7 |
Shell Scripts (1 concurrent) | 80951.3 | 46710.5 |
Shell Scripts (8 concurrent) | 12749.6 | 8213.4 |
System Call Overhead | 8979548.6 | 9267065.4 |
多分kernel 4.4でも傾向はあまり変わらないんじゃないかと思いますが、全体的に見ると「SMTをわざわざ無効にする意義なんてない」と思います。
しかし「File Copy」がSMT有効で目に見えて遅くなってるのはちょいと気になりますね。名前は「File Copy」でも現代ではキャッシュに乗る容量のデータのread/writeですから。
では最後に、お待ちかねのIntel vs AMDです。
こちらは都合上、Debian8 (kernel 3.16.0)での比較となることを御容赦下さい。
Debian8 (kernel 3.16.0) | ||
Core i5-6500 (4C4T) | RYZEN 7 1700 (8C16T) | |
Dhrystone 2 using register variables | 158579560.4 | 318754347.9 |
Double-Precision Whetstone | 17528.2 | 51209.1 |
Execl Throughput | 27318.1 | 41154.7 |
File Copy 1024 bufsize 2000 maxblocks | 1468874.5 | 689093.6 |
File Copy 256 bufsize 500 maxblocks | 387587.7 | 192413.1 |
File Copy 4096 bufsize 8000 maxblocks | 4020016.4 | 1983193.9 |
Pipe Throughput | 8741631.3 | 20122528.4 |
Pipe-based Context Switching | 1886006.9 | 3107573.4 |
Process Creation | 68477.0 | 111245.5 |
Shell Scripts (1 concurrent) | 45834.5 | 105853.9 |
Shell Scripts (8 concurrent) | 6542.2 | 14169.6 |
System Call Overhead | 9167714.4 | 8755651.9 |
ありがとうジム・ケラー!ありがとう。AMD!
しかし「File Copy」の結果は見なかったことにしたい…
RYZENのSMT無効、Core i5との比較を見ると、キャッシュに乗っかるはずの「File Copy」がKernel 4.10でなくてもSMT有効で遅くなるというのはかなり引っかかりますね。