5月下旬、IntelとAMDの歴史的協業の産物であるKaby Lake Gを搭載した第8世代のNUCがリリースされました。今回はこのNUCにUbuntu 18.04 LTSをインストールして、どこまできちんと動作するのかを確認します。結論だけ先に述べておくと「そのままでも使えることは使えるが、期待されているすべての機能が簡単に動作するわけではない」です。
第8世代NUCのハイエンドモデル「Hades Canyon」
昨年x86系CPUで長年のライバル関係にあるIntelとAMDが、互いの製品を1つのパッケージにまとめたプロセッサを開発しているという発表が大きなニュースとなりました。「 Kaby Lake G」のコードネームが付けられたそのプロセッサは、今年頭のCES2018において、次世代のハイエンド向けNUCとなるHades Canyon[1] にも搭載されることが発表されます。今回紹介するのは、5月下旬に日本でも発売されるようになった、この第8世代NUC「Hades Canyon」シリーズの最上位モデルである「NUC8i7HVK」です。
[1] ハデス・キャニオン(冥王の峡谷) 。NUCのコードネームは伝統的に「なんとか Canyon」になっているようです。ハイエンドNUCとしては前機種にあたる第6世代NUCのコードネームが「Skull Canyon」だったり、どちらも深夜の部屋の中でフロントパネルに骸骨が浮かび上がったりするので、何か思春期の青少年にしかわからない意図が含まれているのかもしれません。ちなみに骸骨の照明のケーブルを取り外すことで、簡単に除霊できるようになっています。また、設定ツールからお好みの骸骨の色が選べる仕組みになっているようです。
「NUC8i7HVK 」に搭載されているプロセッサーの名称は「Intel Core i7-8809G Processor with Radeon RX Vega M GH graphics 」です。とても長いですが、まさに読んで字のごとくIntelの第8世代Core
i7プロセッサーに、dGPU(discrete GPU)としてAMDのRadeon RX Vega Mが載った製品だと思ってください。実際に「Kaby Lake G」を画像検索してみると わかるように、Intel CPUと一回り大きなRadeon GPU、さらにGPU用のHBM2がひとつのパッケージに並んでいることがわかります。「 ひとつのパッケージ」であって「ワンチップ」ではありません。
最近のIntelのデスクトップ向けCPUはiGPU(integrated GPU)としてIntel HD Graphicsやその上位版を組み込んでいるのが一般的でした。Kaby Lake Gにも無印のKaby Lakeと同じIntel HD Graphics 630が内蔵されてはいます[2] 。しかしながら例えば同じ統合GPU型のCPUであるAMDのAPUと比べてみても、見劣りするグラフィックス性能でした。
[2] Hades Canyonの場合、iGPUをディスプレイ出力には使用できません。6ポートのディスプレイ出力はすべてdGPUを利用します。iGPUを活用したVA-API/Intel QSVは利用可能です。
Intel自身が高性能なdGPUを開発している噂はありますし、実際に検証目的のdGPUに関する発表はこれまでにもありました。AMDからRadeon部隊のトップを引き抜いてもいます。おそらく今後もiGPUの性能向上には注力していくことになるのでしょう。ただし短いタイムスケールを考えるとどうしても性能という名の商品価値に差が出てしまいます。
そこで出てくるのがdGPUとしてRadeonを搭載する話です。特にIntelは積層型DRAM技術であるHBMに注力しています。TSVシリコンインターポーザーよりも低コストなチップ間インターコネクトのEMIB も開発しました。今回のKaby Lake GではこのEMIBをGPUとHBM2の間に用いることで、小型化・低価格化に成功しています。Kaby Lake
Gの直接の競合であるRyzen 5 2400Gを始めとするデスクトップ版の「Raven Ridge」シリーズがHBM2を採用しなかったことに対して大きなアドバンテージになるでしょう。
ここまでUbuntuの話が一個も出てきていませんね。
Hades CanyonとRaven Ridgeを比較する
Raven Ridgeと言えば第510回 の「AMD Ryzen GでパワフルPCを構築する」です。今回はHades CanyonにUbuntu 18.04 LTSをインストールして、第510回で行われたLibreOfficeのビルド時間と比較することにしましょう。
次の表が今回使用するマシンのスペックです。
CPU
Intel
Core i7-8809G
メモリー
Crucial
CT16G4SFD824A(DDR4-2400 SO-DIMM 16GBx2)
SSD
Western Digital
WDS500G2X0C (NVMe 500GB)
筐体
Intel
NUC8i7HVK
メモリースロットはSO-DIMMです。いわゆる「ノートPC用メモリー」と言う名前で売られているタイプの形状ですね。デスクトップ用に使われるDIMMとは大きさだけでなく、ピンの数も切り欠きの位置も違います。よってDIMMをスモールライトで小さくしても刺さらないので、購入の際は注意してください。
ストレージ用のM.2スロットの空きは2つあります。どちらもNVMe PCI 3.0x4/SATA 3.0の両対応のようです。今回は1スロットだけ使っています。接続用のネジが筐体内部にあります。ちなみに片方のM.2スロットの下にはWi-Fi/Bluetooth用のIntel AC 8265 が刺さっています。
とりあえずNUC本体とメモリー、M.2 SSD、あとHDMIケーブルと電源ケーブルさえあればなんとかなります。ACアダプターは付いてきますが、電源ケーブルは付いてきませんでした。電源ケーブルのコネクター形状は、NUCで良く使われているC5型[3] ではなく、デスクトップPCで使われているC13型です[4] 。
各種パーツをセットアップしたらまずは立ち上がることを確認しておきましょう。後ろのHDMIコネクタをディスプレイに接続し、フロントの電源ボタンを入れてしばらくすると「起動メディアがない」を英語にしたメッセージが表示されるはずです。UEFIの設定画面を起動するには、電源ボタンで一度電源を切った上でF2キーを押しながら電源を入れてください。
UEFIの設定画面が起動することを確認したら、OSのインストールよりも前にBIOSのアップグレードを行っておきましょう。5月末時点での最新版は「HNKBLi70.86A.0040.2018.0516.1521」のようです。BIOSのバージョンはUEFIの画面の左上あたりに「BIOS Version」として表示されています。購入した時点では、真ん中の「0040」以降が「0034.2018.0329.1113」になっていました。
最新のBIOSファームウェアはIntelのサイト からダウンロードできます。絞り込み条件を「BIOS」にし、「 BIOS アップデート」を選択してください。ダウンロードするのは拡張子が「.bio」の1つのファイルだけです。ダウンロードした拡張子が「.bio」のファイルをFATフォーマットしたUSBメモリーに保存します。あとはUSBメモリーを接続した状態でF2キーを押しながら起動します。「 BIOS
Version」の後ろの方に「Update」リンクが存在するはずなので、それをクリックしてあとは画面の指示に従ってください。ダウンロードページにある「Read Me」や「Release Notes」も一度目を通しておくと良いでしょう。
またUEFIの設定画面では「Secure Boot」をオフにしてください。これは今後カーネルモジュールを変更したり、カーネルそのものを差し替えるために必要になります。もちろん自分でSecure Bootの鍵を管理し、カーネルに署名を行う場合はその限りではありません[5] 。
次にメモリーのテストを行います。UEFIではないレガシーBIOS環境であれば、Ubuntuのインストーラーに付属のMemtest86+ を使ってメモリーテストを行えるのですが、このプログラムはUEFIに対応していません。UEFI環境の場合はプロプライエタリではあるもののMemTest86 を使うと良いでしょう。MemTest86の最新のFree
Edition(V4系より新しいバージョン)はUEFI環境でのメモリーテストもサポートしています。ダウンロードページの「Image for creating bootable USB Drive」のリンクをクリックし、ダウンロードしたアーカイブを展開し、memtest86-usb.img
をdd
コマンドや第488回 でも紹介しているEtcher などでUSBメモリーに書き出してください。たとえばUSBメモリーが/dev/sdb
に繋がっているのなら以下のとおりです。
$ sudo dd if=memtest86-usb.img of=/dev/sdb
$ sudo sync
あとはそのUSBメモリーを接続して起動すれば、メモリテストプログラムが動作します。基本的に初期設定のままテストを動かせば良いでしょう。MemTest86は4回テストが成功したら自動的に終了します。Hades Canyonと32GBのメモリーの組み合わせだとおよそ7時間ぐらい必要でした。ちなみにテスト中もファンは静かで、筐体も若干暖かいかな?と感じなくはないぐらいの、ほぼ平温のままだったような感じです。
これでNUC側の準備は完了です。
Ubuntuをインストールする際の注意点
あとは普通のPCと同じようにUbuntu 18.04 LTSをUSBメモリーに書き出して、Hades Canyonに接続し起動しましょう。今回はデスクトップ版をインストールします。
ここで最初の注意点です。カーネルの起動パラメーターを変更する必要があります。 UEFIブートになっているはずなので、最初に黒い背景に白い文字のGRUBの画面が表示されるはずです。このうち「Try Ubuntu without installing」か「Install Ubuntu」のどちらにカーソルを合わせ、「 e」キーを入力して編集モードに入ってください。前者はLive環境を起動する際に選択し、後者はすぐにインストーラーを起動する際に選択します。
編集モードに入ったら、「 linux
」で始まる行を探します。末尾が「quiet splash $vt_handoff
」のようになっていると思いますので、次のように「nomodeset
」を追加してください。順番は入れ替わってもかまいません。
linux (中略) nomodeset quiet splash $vt_handoff
編集後「Ctrl-x」もしくは「F10」を押せば、起動が開始します。ブートスプラッシュを眺めながら、デスクトップもしくはインストーラーが表示されるのをおとなしく待ちましょう。
このnomodeset
は、LinuxのKernel Mode Setting (KMS)機能を無効化するオプションです。KMSはGPUのディスプレイ出力デバイスとしての設定を主にX Window Systemなどのユーザーランド側ではなく、カーネル自身が行う機能です。一般的なPCにおいては、起動時にまずBIOSがディスプレイ出力を設定し、ブートローダーを起動します。その後カーネルが起動すると、( 大抵の場合はinitramfsの展開後に)適切なビデオドライバーをロードした上でKMS機能を元に画面の設定を行います。nomodeset
を指定すると、カーネル自身はBIOSの設定をそのまま継承し、X
Window Systemが設定を行うようになるのです。
Hades Canyonだと、本来はKMSにも対応しているAMDGPUドライバーが使われるはずです。しかしながら18.04で使用している4.15カーネルとファームウェアはdGPUのRadeon RX Vega Mには対応していません。ここから先は推測になってしまいますが、iGPUのi915ドライバーのみがロードされてそちらの設定を行ってしまうようです。結果的にGRUBのあと画面が暗転したまま、応答がなくなります。
nomodeset
を使用することでカーネル側はKMSを利用せず、X Window System側はジェネリックなデバイスとして認識し設定します[6] 。まずは起動することが重要なので、今のところはこの方法で進めましょう。
図1 設定画面を表示するとLLVMpipeが動いていることがわかる
図2 ディスプレイ出力も1920x1080しか出せない
上記のようにdGPUの本領は発揮できていない状態です。これについてはAMDGPUドライバーのプロプライエタリ版のより新しいバージョンをインストールするか、より新しいカーネルとファームウェア、Mesaの組み合わせで解消できると思われます。
インストール手順は普通のUbuntuと同じです。NVMe SSDもWi-Fiも問題なく動きますので、特につまづくところはないでしょう。インストール後、再起動する際にGRUBで再び「nomodeset
」を設定することを忘れないでください。その際にはGRUB上では一番上のメニューエントリーを選択・編集してください。
無事にインストールし、再起動を終えたらGRUBの設定を恒久化します。/etc/default/grub
のGRUB_CMDLINE_LINUX
にnomodeset
を追加するだけです。
$ sudo sed -i 's/^\(GRUB_CMDLINE_LINUX=".*\)"/\1 nomodeset"/' /etc/default/grub
$ sudo update-grub
これでUbuntuのインストールは完了です。
なお、詳細は不明ですがシャットダウンすると、一度ACアダプターを抜かないと電源が入らないような状況でした。再起動は特に問題なく動作します。
第522回 を見習って、lshw
の簡易出力を取得してみましょう。
$ sudo lshw -short
H/W path デバイス クラス 詳細
=====================================================
system NUC8i7HVK
/0 bus NUC8i7HVB
/0/0 memory 64KiB BIOS
/0/3d memory 32GiB システムメモリー
/0/3d/0 memory 16GiB SODIMM DDR4 同期 Unbuffered (Unregistered) 2400 MHz (0.4 ns)
/0/3d/1 memory Project-Id-Version: lshwReport-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>PO-Revision-Date: 2014-1
/0/3d/2 memory 16GiB SODIMM DDR4 同期 Unbuffered (Unregistered) 2400 MHz (0.4 ns)
/0/3d/3 memory Project-Id-Version: lshwReport-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>PO-Revision-Date: 2014-1
/0/43 memory 256KiB L1 キャッシュ
/0/44 memory 1MiB L2 キャッシュ
/0/45 memory 8MiB L3 キャッシュ
/0/46 processor Intel(R) Core(TM) i7-8809G CPU @ 3.10GHz
/0/100 bridge Intel Corporation
/0/100/1 bridge Skylake PCIe Controller (x16)
/0/100/1/0 display Advanced Micro Devices, Inc. [AMD/ATI]
/0/100/1/0.1 multimedia Advanced Micro Devices, Inc. [AMD/ATI]
/0/100/1.1 bridge Skylake PCIe Controller (x8)
/0/100/1.1/0 bus ASMedia Technology Inc.
/0/100/1.1/0/0 usb3 bus xHCI Host Controller
/0/100/1.1/0/0/2 input USB Receiver
/0/100/1.1/0/1 usb4 bus xHCI Host Controller
/0/100/1.2 bridge Skylake PCIe Controller (x4)
/0/100/1.2/0 generic SD/MMC Card Reader Controller
/0/100/2 display Intel Corporation
/0/100/8 generic Skylake Gaussian Mixture Model
/0/100/14 bus Sunrise Point-H USB 3.0 xHCI Controller
/0/100/14/0 usb1 bus xHCI Host Controller
/0/100/14/0/9 communication Bluetooth無線インターフェース
/0/100/14/1 usb2 bus xHCI Host Controller
/0/100/14.2 generic Sunrise Point-H Thermal subsystem
/0/100/15 generic Sunrise Point-H Serial IO I2C Controller #0
/0/100/15.1 generic Sunrise Point-H Serial IO I2C Controller #1
/0/100/15.2 generic Intel Corporation
/0/100/16 communication Sunrise Point-H CSME HECI #1
/0/100/1c bridge Sunrise Point-H PCI Express Root Port #1
/0/100/1c.1 bridge Sunrise Point-H PCI Express Root Port #2
/0/100/1c.1/0 enp5s0 network I210 Gigabit Network Connection
/0/100/1c.2 bridge Sunrise Point-H PCI Express Root Port #3
/0/100/1c.2/0 wlp6s0 network Wireless 8265 / 8275
/0/100/1c.4 bridge Sunrise Point-H PCI Express Root Port #5
/0/100/1d bridge Sunrise Point-H PCI Express Root Port #9
/0/100/1d/0 storage Sandisk Corp
/0/100/1e generic Sunrise Point-H Serial IO UART #0
/0/100/1f bridge Sunrise Point-H LPC Controller
/0/100/1f.2 memory Memory controller
/0/100/1f.3 multimedia Intel Corporation
/0/100/1f.4 bus Sunrise Point-H SMBus
/0/100/1f.6 enp0s31f6 network Ethernet Connection (2) I219-LM
/1 power To Be Filled By O.E.M.
またdmesg
やlshw
の結果などは次のURLにアップロードしてあります。
温度計測環境の導入
高負荷時に各種温度がどうなるかを計測するために第183回 でも紹介しているlm-sensorsパッケージをインストールしています。
$ sudo apt install lm-sensors psensor
$ sudo sensors-detect
(すべて初期値で回答)
psensorはlm-sensorsのGUIフロントエンドです。実際に平常時の温度を表示してみましょう。
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +46.0°C (high = +100.0°C, crit = +100.0°C)
Core 0: +43.0°C (high = +100.0°C, crit = +100.0°C)
Core 1: +44.0°C (high = +100.0°C, crit = +100.0°C)
Core 2: +42.0°C (high = +100.0°C, crit = +100.0°C)
Core 3: +42.0°C (high = +100.0°C, crit = +100.0°C)
acpitz-virtual-0
Adapter: Virtual device
temp1: +27.8°C (crit = +119.0°C)
temp2: +29.8°C (crit = +119.0°C)
iwlwifi-virtual-0
Adapter: Virtual device
temp1: +44.0°C
pch_skylake-virtual-0
Adapter: Virtual device
temp1: +45.5°C
coretempはCPUの温度です。Packageがパッケージ全体の温度、Coreが各コアごとの温度になります。acpitzはACPI Thermal Zoneごとに取得した温度になります。iwlwifiはWi-Fiチップの温度です。pchはM.2などがぶら下がっているPCHチップ(Intel HM175)の温度となります[7] 。
CPUのベンチマーク
テスト環境はUbuntu 18.04 LTSです。ビルドするLibreOfficeは、5月末時点でリポジトリに存在する6.0.3としました。
「ソフトウェアとアップデート」を起動し、「 Ubuntuのソフトウェア」タブの「ソースコード」にチェックを入れておきます。そして、次の一連のコマンドを実行すればLibreOfficeのビルド開始です。
$ sudo apt build-dep libreoffice
$ sudo apt install fakeroot
$ mkdir libreoffice && cd $_
$ apt source libreoffice
$ cd libreoffice-6.0.3
$ time dpkg-buildpackage -r -uc -b
ビルド中のシステムモニターとpsensorの様子は以下のとおりです。
図3 configure終了直後ぐらいからCPU使用率が急上昇する
図4 コンパイル中は全コア使用率100%に張り付いている。CPU温度もほぼ最大値に
システムモニターのメモリー使用量はfree
コマンドで言うところの「used」を表示しています。それに対してpsensorのメモリー使用量は「used + buff/cache」です。
図5 実はメモリーはそこまで使用しない(左グラフ真ん中の紫の線) 。ただしbuff/cacheの値は少しずつ増えている結果、メモリーの空き容量は減っている(右グラフの下がっているオレンジの線)
図6 ビルド終了後少しするとCPU温度は55度前後に落ち着く
さて、実際に要した時間は以下のとおりです。参考までに第510回 で計測されたRyzen 5 2400G、Ryzen 5 1600、Core i7-4400Sも載せておきます。
real
91m 7.029s
112m43.841s
79m59.213s
99m41.826s
user
558m23.526s
726m21.214s
700m43.015s
639m 5.540s
sys
29m45.447s
40m42.013s
41m43.797s
32m21.332s
またCPUのカタログ性能の違いは次のとおりです。
Core i7-8809G
4コア8スレッド
3.1GHz
4.2GHz
Ryzen 5 2400G
4コア8スレッド
3.6GHz
3.9GHz
Ryzen 5 1600
6コア12スレッド
3.2GHz
3.6GHz
Core i7-4770S
4コア8スレッド
3.1GHz
3.9GHz
今回の計測と他の3つでは環境が大きく異なるため単純には比較できません。しかもRyzen 5の本来の競合はCore i5のはずなので、あまりフェアでもありません。
それでもコア数の多いRyzen 5 1600はやはり突出してビルド時間が短くなっているようです。コア数は正義。Core i7-8809Gの特徴としては、userが極端に短いことでしょうか。こちらの値がすべてのコアを合算した総ビルド時間に該当するので、Ryzenに比べるとシングルスレッド性能はCore-iシリーズに軍配があがりそうです。速いのは正義。
ちなみにビルド中にcpuinfoを確認した限り、すべてのコアが動いていたからかせいぜいが3.6GHzぐらいで、4.2GHzまで出ることはなかったようです。dmesgにはThermal Throttlingが働いた旨のメッセージが大量に残っていたので、「 まだ本気出していない」可能性はあります。なお、計測上CPUが100度近くになったときであっても、筐体はほとんど熱くなりませんでしたし、ファンもそこまでうるさくはありませんでした。熱設計を相当がんばっているものと思われます。
SSDのベンチマーク
ついでにSSDのベンチマーク結果も記載しておきます。
といってもNVMe SSD上に構築したext4ファイルシステムの上で、fio を動かしただけです。よってNMVe SSDのカタログスペックよりはファイルシステムも加味した値になることに注意してください。
fioは次の方法でインストールできます。
$ sudo apt install fio
さらにfioを用いて「CrystalDiskMarkっぽい計測を行う 」スクリプトも導入しましょう。といってもリンク先のスクリプトはテストパターンが古いCrystalDiskMark準拠なので、CrystalDiskMark 6のテストパターンに合わせて調整したフォーク先 のスクリプトを利用します。
$ wget https://raw.githubusercontent.com/0xFelix/fio-cdm/master/fio-cdm
$ chmod a+x fio-cdm
$ sudo ./fio-cdm /
| | Read(MB/s)|Write(MB/s)|
|-----------|-----------|-----------|
| Seq Q32T1 | 3430.000| 2544.000|
| 4K Q8T8 | 1414.000| 874.000|
| 4K Q32T1 | 1042.000| 880.000|
| 4K Q1T1 | 55.100| 266.000|
実際に実行してみると「4K-Q8T8-Rand-Read: No I/O performed by libaio, perhaps try --debug=io option for details?」というメッセージが表示されます。これは4K Q8T8テストの際にスレッドがすぐに完了してしまった場合に表示されるようですが、原因は不明です。
さて、fio-cdm
は引数として渡したディレクトリの直下に1GiBのファイル「.fio-diskmark
」を作成し、そこにテストパターンを読み書きします。行っているテストは次の4つです。
Seq Q32T1: Sequential Read/Write、Block Size=128KiB、I/O depth=32、numjobs=1
4K Q8T8: Random Read/Write、Block Size=4KiB、I/O depth=8、numjobs=8
4K Q32T1: Random Read/Write、Block Size=4KiB、I/O depth=32、numjobs=1
4K Q1T1: Random Read/Write、Block Size=4KiB、I/O depth=1、numjobs=1
I/O depth は非同期書き込みの際にいくつI/O処理を多重化するかを示し、numjobs はそのテストパターンをいくつのスレッドで並列して行なうかを示します。
今回使用したWDS500G2X0C の公称値と比較してみましょう。IOPSは速度をブロックサイズで割ることで算出できます。
Sequential Read (MB/s)
3400
-
3430
-
-
-
-
Sequential Write (MB/s)
2500
-
2544
-
-
-
-
Random Read (IOPS)
-
410000
-
345215
254395
13452
426000
Random Write (IOPS)
-
330000
-
213379
214844
64941
215000
最後の「4K Q32T8」はWestern Digitalの計測方法に合わせて取得し直した値です。
Random Writeが頭打ちになっている以外は、ほぼ期待通りの性能が出ています。各種サイトでWindowsで計測した結果[8] と見比べてみても遜色ないようです。
使い道はこれから考える
もともと今メインで使っているマシンにAVX2命令が実装されていない ことに気がついたことが、新しいマシンを購入したくなった契機でした[9] 。家庭の事情から原則としてノートPCか小さなマシンしか置けない上に、今使っているノートPCもそこまで遅いわけでもありません。よって今回の物欲もお流れになるかなと思っていたところで、以前話題になったKaby
Lake G搭載のNUCがそろそろ出るらしいとの情報を教えてもらいます。
そこから購入に至るまでの経緯もまとめておきましょう。
NUCは以前からほしかったし、せっかくだからスペックだけでも調べてみるか
あれ、これ、思ってた以上にほしくなってきたぞ……
いつ発売かはわからないけれども次世代マシン用積立金の使用候補にあげておこう
お、海外のAmazon組はもう届いているらしい、日本にもそのうち来るのかな
日本でも発売されたらいろいろレポート出ると思うし、それを一通り見てから最終的に判断しよう
ふむ、日本では今日(5月24日)発売か、ちょっとショップを覗いていくか
上記のように熟慮に熟慮を重ねた結果、5月24日の夜には手元にありました 。なぜだ。
正直、「 AMD x Intel」というロマンだけで買ったので、なんとか価格に見合う成果を出すよう今から使い道を考える所存です。まずは次回以降の記事で、dGPU側をなんとかする方法を紹介します。