Ubuntu Weekly Recipe

第523回Kaby Lake GでパワフルPCを構築する

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」です。

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と比べてみても、見劣りするグラフィックス性能でした。

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.imgddコマンドや第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/grubGRUB_CMDLINE_LINUXnomodesetを追加するだけです。

$ 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.

またdmesglshwの結果などは次の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も載せておきます。

Core i7-8809G Ryzen 5 2400G Ryzen 5 1600 Core i7-4770S
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は速度をブロックサイズで割ることで算出できます。

Blocksize 公称値 Q32T1 公称値 Q32T8 Seq Q32T1 4K Q8T8 4K Q32T1 4K Q1T1 4K Q32T8
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がそろそろ出るらしいとの情報を教えてもらいます。

そこから購入に至るまでの経緯もまとめておきましょう。

  1. NUCは以前からほしかったし、せっかくだからスペックだけでも調べてみるか
  2. あれ、これ、思ってた以上にほしくなってきたぞ……
  3. いつ発売かはわからないけれども次世代マシン用積立金の使用候補にあげておこう
  4. お、海外のAmazon組はもう届いているらしい、日本にもそのうち来るのかな
  5. 日本でも発売されたらいろいろレポート出ると思うし、それを一通り見てから最終的に判断しよう
  6. ふむ、日本では今日(5月24日)発売か、ちょっとショップを覗いていくか

上記のように熟慮に熟慮を重ねた結果、5月24日の夜には手元にありました。なぜだ。

正直、⁠AMD x Intel」というロマンだけで買ったので、なんとか価格に見合う成果を出すよう今から使い道を考える所存です。まずは次回以降の記事で、dGPU側をなんとかする方法を紹介します。

おすすめ記事

記事・ニュース一覧