Ubuntu日和
【第45回】小型なのにSFP+もPCIeスロットもあるパワフルなミニPC「MINISFORUM MS-01」をUbuntuで使おう!
2024年2月3日 06:14
MINISFORUMと言えば「こういうのあったらいいよね」というミニPCを、ちょっとひいてしまうほどの種類と早さで展開しつつ、たまに誰向けかよく分からない変態的なマシンも提供してくれる愛すべきメーカーだ。そんなMINISFORUMが先日発売を開始した「どちらかと言うと変態カテゴリー寄りの便利系ミニPC」と言えば、皆さんご存知の「MINISFORUM MS-01」だろう。
普通のミニPCのふりをしながら、SFP+x2ポートとか、PCIe Gen4スロットとか妙な拡張性を持っているこのマシンに、今回はUbuntuをインストールしてみよう。
MS-01についておさらい
MS-01に関してはすでにPC WatchでもミニPCなのにSFP+、U.2、PCIeを飲み込むモンスター!「MINISFORUM MS-01」で詳しく解説している。またPC Watchも参加しているYouTubeチャンネル「PAD」でも、MS-01の中身や動いている様子を確認できるので、パーツの装着方法やファンの音、ベンチマークの様子が気になる人はそちらも参考にしてほしい。
ここでは改めてMS-01のスペックを簡単に紹介しておこう。
MS-01のスペック | |
---|---|
CPU | Core i9-13900H/12900H/12450H |
GPU | Iris Xe Graphics eligible/Intel UHD Graphics |
メモリ | DDR5-5200M SO-DIMM(non-ECC) x 2スロット |
ストレージ | M.2 2280 NVME/U.2(PCIe 4.0x4)、M.2 22110 NVME(PCIe 3.0x4)、M.2 22110 NVME(PCIe 3.0x2) |
有線ネットワーク | 10G SPF+ x 2ポート(Intel X710)、2.5GbE x 2ポート(Intel I226-V & I226-LM) |
無線ネットワーク | Wi-Fi 6E(MediaTek MT7922) |
Bluetooth | 5.2(MediaTek MT7922) |
ディスプレイ出力 | HDMI 2.0 x 1、USB4 x 2 |
オーディオ出力 | HDMI x 1、3.5mmオーディオジャック |
USBポート/前面 | USB 3.2 Type-A x 1、USB 2.0 Type-A x 2 |
USBポート/背面 | USB4(Alt DP) x 2、USB 3.2 Type-A x 1 |
拡張スロット | PCIe 4.0x16(ハーフハイト・シングルスロット、速度は4.0x8まで) |
その他 | Intel vPro(Core i9のみ)、TPM 2.0 |
サイズ | 196×189×48mm |
重量 | 1.42 Kg |
電源 | DC 19V |
小さなサイズにインターフェイスが山盛りであることが分かるだろう。ちなみに公式サイトに記載のない部分については、Core i9-13900H(S3190のベアボーンモデル)に、Linuxをインストールして確認している。モデルによっては違うかもしれない点に注意してほしい。昨年(2023年)12月28日に購入し、2024年1月21日に届いたものなので、同じモデルであればそこまで差はないはずだ。
ちなみにベアボーンモデルだと、通常モデルには搭載されているOSやメモリ/SSDが搭載されていない。OSはUbuntuで良いとして、メモリとSSDは次の機材を用意した。
- Corsair VENGEANCE DDR5 4800 SO-DIMM 32GBx2
- Western Digital SN850X NVMe WDS100T2X0E 1TB
MS-01にはM.2 SSD用のヒートシンクが1台付属しているのでそれを使っている。
さて、OSは何をインストールすると良いだろう。本機は「ホームサーバー用途にも使える小型ワークステーション」という位置づけである。後述するように強力な外付けGPUをPCIeスロットに接続するのは難しく、ゲーム用途に使うのはそれなりに制約が出てくる。もちろん上位モデルだとIris Xeが内蔵されているため、そこそこの性能は期待できるし、性能が必要なゲームをプレイする以外のデスクトップ用途で困ることはない。
ただ、充実したインターフェイスの種類を考えると。サーバー関連OSを入れるのが、最も遊べる可能性が高くなるだろう。Linxu系/BSD系といった汎用OSに加えて、ルーター向け/NAS向けなどの機能特化な専用OS等々、いろいろ選択肢は存在する。今回は連載内容の都合上Ubuntuをインストールすることにしよう。
好きなUbuntuを選びたまえ
結論から言うと、当然のことながら本機は Ubuntuでも問題なく動く 。構成はともかく、基本的な部分は普通のPCなのでここは想定通りだ。問題は一口にUbuntuと言っても、さらに選択の余地があることだろう。2024年2月時点の選択肢としてリリース済みかつサポート期間であることを踏まえると次のいずれかとなる。
- Ubuntu 22.04 LTSのデスクトップ版(Kernel 5.15 or 6.5)
- Ubuntu 22.04 LTSのサーバー版(Kernel 5.15 or 6.5)
- Ubuntu 23.10のデスクトップ版(Kernel 6.5)
- Ubuntu 23.10のサーバー版(Kernel 6.5)
サーバー用途として考える場合は、LTS版(長期サポート版)のUbuntuサーバーをインストールするのが無難だが、LTS版(長期サポート版)だとカーネルが若干古いという難点が存在する。
MS-01の上位モデルに搭載されているRaptor Lakeは、Linuxカーネルでは5.16あたりから対応が始まり、6.2までにもいくつかの修正が入っている状況だ。さらに各種ファームウェアも新しいバージョンが提供されているため、できれば6.2以降のカーネルを使いたいところ。Ubuntuの場合は、HWE(HardWare Enablement)という仕組みを使うことでLTS版でも新しいカーネルをあとから導入可能ではある(1月には23.10ベースの6.5も使えるようになっている)。
では、22.04 LTSと6.5カーネルでどうかというと、さらに悩ましい事情が出てくる。Ubuntuは2年に1回の頻度でLTS版をリリースすることになっているのだ。つまり2022年の4月にリリースされたLTS版の次は、数カ月後の2024年4月にリリースされる24.04となる。もちろん22.04も2027年の半ばまでサポートされるのですぐに使えなくなるわけではない。ところが、24.04では、2024年2月時点ではまだリリースされていないKernel 6.8を採用する計画も立てられている。より新しいカーネルはより新しいハードウェアのサポートや新しい機能に加えて、処理の効率化や性能の向上に加えて新しい不具合も含まれている。
つまり、どうせ本格運用するなら、より新しいカーネルとソフトウェアセットのほうが気分が良い。もちろん安定志向を目指すならUbuntu 22.04 LTSだが、安定志向を目指す人が(ECCメモリでもない)こんな装置を買うわけがない。いや買いはするかもしれないが、安定性が求められるクリティカルな部分で使うことはないはずだ。たぶん。もしかするとそういう猛者も多少はいるかもしれない。多少どころかごろごろいそうな気がしてきた。
とにかく、どうせ遊ぶのなら、おすすめは「 Ubuntu 23.10のリリース版もしくは24.04の開発版で評価しつつ、24.04がリリースされたらそちらに移行する 」案だ。Ubuntuの場合は、リリース間のアップグレードはそこまで大変ではない。何か特殊なことをしていない限り、コマンド1回打ち込んで放置して、その後再起動したら完了ということが大半だ。よって24.04が出て少ししたら、23.10から上げてしまうと良いだろう。
今回はハードウェアの評価を兼ねて、Ubuntu 23.10のデスクトップ版をインストールすることにした。なぜデスクトップ版かというと、GUIアプリケーションのほうがスクリーンショットの見栄えが良いから、ただそれだけの理由である。
Ubuntuのデスクトップ版のインストール方法は「人気Linuxディストリビューション、Ubuntuを触ってみよう!」を参照して欲しい。もしサーバー版を使うなら、Ubuntu日和の第26回が参考になるはずだ。
Ubuntuではどのように認識されるのか
さて、実際にMS-01のデバイスを確認していこう。まずシステム全体の情報だが、一番手っ取り早いのはシステム設定の「このシステムについて」を表示する方法だろう。
とりあえず使っているCPUとメモリ、GPUやストレージ、OSにカーネルなんかを共有したい場合はこの画像でも十分だ。CPU-Zみたいな表示が欲しい場合は、「CPU-X」というソフトウェアがある。これは「cpu-x」パッケージとしてインストール可能だが、公式が配布しているAppImageパッケージを使うとより最新の情報を表示できる。[CPU-Xのサイト][]にある「Releases」ページから、最新の「CPU-X-バージョン-x86_64.AppImage」をダウンロードしよう。
UbuntuでAppImageを起動するには次のように、ダウンロードディレクトリにあるファイルに実行権限をつけて起動しよう。ここでCLI操作が必要になってしまうのが若干残念ではあるが、実行権限付けて起動するだけなら、ファイルブラウザから右クリックでプロパティを表示する形でも大丈夫だ。
$ sudo apt install libfuse2
$ cd ダウンロード
$ chmod +x CPU-X-*-x86_64.AppImage
$ ./CPU-X-*-x86_64.AppImage
ちなみにCPU-XはCLIにも対応している。CLIで表示したいなら端末から「–ncurses」オプションを指定して起動してみよう。ただしCLIならUbuntuに最初から入っている「lscpu」コマンドもおすすめだ。こちらはシンプルなインターフェイスながら必要十分な情報が備わっている。
$ lscpu
アーキテクチャ: x86_64
CPU 操作モード: 32-bit, 64-bit
Address sizes: 46 bits physical, 48 bits virtual
バイト順序: Little Endian
CPU: 20
オンラインになっている CPU のリスト: 0-19
ベンダー ID: GenuineIntel
モデル名: 13th Gen Intel(R) Core(TM) i9-13900H
CPU ファミリー: 6
モデル: 186
コアあたりのスレッド数: 2
ソケットあたりのコア数: 14
ソケット数: 1
ステッピング: 2
CPU(s) scaling MHz: 9%
CPU 最大 MHz: 5400.0000
CPU 最小 MHz: 400.0000
BogoMIPS: 5990.40
フラグ: fpu vme de (略) ibt flush_l1d arch_capabilities
Virtualization features:
仮想化: VT-x
Caches (sum of all):
L1d: 544 KiB (14 instances)
L1i: 704 KiB (14 instances)
L2: 11.5 MiB (8 instances)
L3: 24 MiB (1 instance)
NUMA:
NUMA ノード数: 1
NUMA ノード 0 CPU: 0-19
Vulnerabilities:
Gather data sampling: Not affected
Itlb multihit: Not affected
L1tf: Not affected
Mds: Not affected
Meltdown: Not affected
Mmio stale data: Not affected
Retbleed: Not affected
Spec rstack overflow: Not affected
Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl
Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Spectre v2: Mitigation; Enhanced / Automatic IBRS, IBPB conditional, RSB filling, PBRSB-eIBRS SW sequence
Srbds: Not affected
Tsx async abort: Not affected
CPU以外のシステム情報をCLIで表示したいのであれば、「sudo lshw -short」が一番簡単な方法だ。ただしハードウェアの接続パスベースでの表示なので若干読みづらい。もう少し人間に優しい表示が欲しいなら、inxiコマンドがある。
$ sudo apt install inxi
$ sudo inxi -v 4 -c 10
Ubuntuで正確なシステム情報を取得するためには管理者権限が必要だ。さらにinxiでは、「-v 数字」で情報の詳細度を「-c 数字」で表示する色や出力先を変更できるようになっている。
PCIeデバイスやUSBデバイスはそれぞれ「lscpu」や「lsusb」で確認できる。このあたりはノートPCの動作確認と同じなので、第38回も参照して欲しい。
MS-01のネットワークを確認しよう
ようやくMS-01の特色であるネットワークインターフェイスの話に入ろう。冒頭の画像でも登場したが、同じようなミニPCの皮を被ったマシンとして第28回で紹介した「R86S」が存在する。ネットワークの設定方法や動作確認方法は、そちらにでも詳しく紹介している。手順としては基本的には同じとなるので、ここでは簡単に確認していこう。
2.5GbEと10GbEをループさせて、双方をネットワーク名前空間で分離しつつ、iperfでフレームを流してみるという流れだ。具体的には次のようなコマンドを実行していくことになる。まずインタフェイス名と実際のポートの紐付けを確認しておこう。
$ ip link
(中略)
2.5G LAN/I226-V/裏から見て右
2: enp87s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 58:47:ca:74:fd:bb brd ff:ff:ff:ff:ff:ff
2.5G LAN/I226-LM/裏から見て左
3: enp88s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 58:47:ca:74:fd:bc brd ff:ff:ff:ff:ff:ff
SFP+/X710/裏から見て左
4: enp2s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 58:47:ca:74:fd:b9 brd ff:ff:ff:ff:ff:ff
SFP+/X710/裏から見て右
5: enp2s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 58:47:ca:74:fd:ba brd ff:ff:ff:ff:ff:ff
ちなみにSFP+のポートについては、LEDによるポート確認にも対応している。たとえばethtoolコマンドをインストールして、次のように実行すると該当するポートのLEDが点滅する。ポートの位置を確認したい場合に便利だろう。
$ sudo apt install ethtool
$ sudo ethtool -p enp2s0f0
速度の計測にあたって、より高性能な対向装置があるならそれを使うのが良いが、もし存在しない場合はそれぞれ2ポートあることだし、ループさせて名前空間で分離して使うと良いだろう。今回は4ポート分の名前空間を作ってそれぞれにネットワークインターフェイスをアサインすることにする。
$ seq 0 3 | xargs -I@ sudo ip netns add net@
$ ip netns list
net3
net2
net1
net0
$ sudo ip link set dev enp87s0 netns net0 name eth0
$ sudo ip link set dev enp88s0 netns net1 name eth0
$ sudo ip link set dev enp2s0f0 netns net2 name eth0
$ sudo ip link set dev enp2s0f1 netns net3 name eth0
$ seq 0 3 | xargs -I@ sudo ip netns exec net@ ip link set eth0 up
$ seq 0 3 | xargs -I@ sudo ip netns exec net@ ip addr add 192.168.100.10@/24 dev eth0
$ sudo apt install iperf3
$ sudo ip netns exec net0 iperf3 -s 192.168.100.100
$ sudo ip netns exec net2 iperf3 -s 192.168.100.102
2.5G LANのポートの結果:
$ sudo ip netns exec net1 iperf3 -t 60 -i 0 -O 3 -c 192.168.100.100
Connecting to host 192.168.100.100, port 5201
[ 5] local 192.168.100.101 port 41700 connected to 192.168.100.100 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-60.00 sec 16.4 GBytes 2.35 Gbits/sec 0 1.82 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 16.4 GBytes 2.35 Gbits/sec 0 sender
[ 5] 0.00-60.00 sec 16.4 GBytes 2.35 Gbits/sec receiver
SFP+のポートの結果:
$ sudo ip netns exec net3 iperf3 -t 60 -i 0 -O 3 -c 192.168.100.102
Connecting to host 192.168.100.102, port 5201
[ 5] local 192.168.100.103 port 40908 connected to 192.168.100.102 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-60.00 sec 65.7 GBytes 9.41 Gbits/sec 6431 1.62 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 65.7 GBytes 9.41 Gbits/sec 6431 sender
[ 5] 0.00-60.00 sec 65.7 GBytes 9.41 Gbits/sec receiver
どうやらどちらのポートも期待通りのスペックが出ているようだ。ちなみに上記は同時に計測しており、どちらかが動いているともう片方が性能劣化するということもない。
上記では60秒間送り続けるというオプションを指定している。この間、CPUの温度は平均で2℃ほど上昇したが、おおよそ38℃付近を維持し、さらにCPU負荷自体はそこまで上がらなかった。ファンも速度があがった感じはしないのでネットワーク負荷でシステム自体が不安定になることはあまりないと考えて良いだろう。このあたり、ネットワーク負荷をかけるとケースを触るのに気が引けるようになるR86Sよりも優秀だ。
あと、MS-01にはWi-Fi 6E(MediaTek MT7922)も搭載されている。6Eということは6GHz帯も使えるというわけだ。このあたりはiwパッケージで提供されているiwコマンドを使うと分かりやすい。
$ sudo apt install iw
$ iw reg get
global
country JP: DFS-JP
(2402 - 2482 @ 40), (N/A, 20), (N/A)
(2474 - 2494 @ 20), (N/A, 20), (N/A), NO-OFDM
(4910 - 4990 @ 40), (N/A, 23), (N/A)
(5170 - 5250 @ 80), (N/A, 20), (N/A), AUTO-BW
(5250 - 5330 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW
(5490 - 5710 @ 160), (N/A, 23), (0 ms), DFS
(57000 - 66000 @ 2160), (N/A, 10), (N/A)
$ iw phy
Wiphy phy0
(中略)
Supported interface modes:
* managed
* AP
* AP/VLAN
* monitor
* P2P-client
* P2P-GO
「Supported interface modes」から、単なるWi-Fiクライアント(managed)だけでなく、アクセスポイント(AP・AP/VLAN)や直接接続するWi-Fi Direct(P2P-client・P2P-GO)にも対応していることが分かる。MS-01をちょっとしたWi-Fiのアクセスポイントに仕立て上げることも可能だ。
悩ましいPCIeスロットの使い方
MS-01で最も悩むのが、PCIeスロットをどう使うかだろう。なにせ「 シングルスロット/ハーフハイト 」というサイズに制限のあるスロットだからだ。シングルスロットであることから、今風のGPUはなかなか厳しくなる。M.2 NVMEの拡張スロットとかなら可能だが、そもそもM.2スロットが3スロットもある状態だ。あとはUSB Type-Cポートを増やしたり、SDカードスロットを追加するのも手かもしれない。
ネットワークデバイスなら「シングルスロット・ハーフハイト」を満たせるデバイスはそれなりに存在するのだが、実はMS-01にはもう1つの制約がある。それが「 ブラケット/外部コネクタとスロットとの干渉問題 」だ。
もちろんブラケットを外せば入るが、その場合はPCIeカードのコネクタとSFP+のケージ(とMS-01内部の緩衝材)でPCIeカードを支えることになる。ちょっと怖い。そもそもPCIeスロットはブラケットで固定しておかないとちょっとした衝撃(たとえば光ケーブルの挿抜)で抜けてしまう。つまりブラケットなしでは使い物にはならない。とは言え、せっかくだから何かPCIeデバイスを接続しておきたい。特に前傾の記事では「 USB4を使えば20Gbps出せる! 」なんて見せられた日には、10GbE×2では満足したくない。もうちょっとこう、変わったものをつなげてみたい。
というわけで、MikrotikのCCR2004-1G-2XS-PCIeを買ってみた。
これは何かと言うと、4コアのArm 64bit CPUと4GBのメモリが搭載された「 SmartNIC 」と呼ばれるカテゴリの製品だ。
一般的なネットワーク通信において、NICはフレームをCPUに上げるのが主な仕事であり、届いたあとのフレームをどうするかはCPUの仕事だった。普通のPCならそれで問題ないのだが、トラフィックが多いサーバーになるとCPUの計算リソースをそれなりに消費するようになる。CPUには本来もっと計算して欲しいことがたくさんあるのに、大量のデータの送受信処理にそれを奪われるのは気に食わない。だったらNIC側でもうちょっとやれることはやろうというのが、ハードウェアオフロードという考え方だ。そのハードウェアオフロードを何段か進めたのがSmartNICになる。
要するにNICに専用のASICや汎用FPGAや、さらには低消費電力のCPUを載せることで、そこそこの柔軟性と性能のバランスを持たせたNICだと思えばいいだろう。CCR2004-1G-2XS-PCIeの場合は、ArmのSoCが載っているので中でOSが動いている。何もしなくても、25GbEが2ポートつながったNICになるので、これまで通りiperfで測ってみよう。
$ lspci
(中略)
01:00.0 Ethernet controller: Qualcomm Atheros AR8151 v2.0 Gigabit Ethernet
01:00.1 Ethernet controller: Qualcomm Atheros AR8151 v2.0 Gigabit Ethernet
01:00.2 Ethernet controller: Qualcomm Atheros AR8151 v2.0 Gigabit Ethernet
01:00.3 Ethernet controller: Qualcomm Atheros AR8151 v2.0 Gigabit Ethernet
$ ip link
2: enp1s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
3: enp1s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
4: enp88s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 58:47:ca:74:fd:bb brd ff:ff:ff:ff:ff:ff
5: enp1s0f2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 78:9a:18:6b:ed:7d brd ff:ff:ff:ff:ff:ff
6: enp1s0f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 78:9a:18:6b:ed:7f brd ff:ff:ff:ff:ff:ff
$ sudo ethtool enp1s0f0 | grep -E "baseT|Speed"
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Speed: 25000Mb/s
$ sudo ip netns exec net1 iperf3 -t 60 -i 0 -O 3 -c 192.168.100.100
Connecting to host 192.168.100.100, port 5201
[ 5] local 192.168.100.101 port 47058 connected to 192.168.100.100 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-60.00 sec 28.8 GBytes 4.13 Gbits/sec 2785 1.08 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-60.00 sec 28.8 GBytes 4.13 Gbits/sec 2785 sender
[ 5] 0.00-60.00 sec 28.8 GBytes 4.13 Gbits/sec receiver
どうも4Gbpsぐらいしか出ない。Arm CPUで動いているRouterOS側の設定で何か足りないのか、このデバイスの仕組み上は今回のようなやっつけの接続方法だとダメだったのかもしれない。残念ながら時間内には原因を追求できなかった。
なお、CCR2004-1G-2XS-PCIeには一応ファンは付いているので、冷却はそれなりに行なわれるはずだが、ファンはそれなりにうるさい。小さいファンだからか甲高い音が鳴るため、手元で使うには難しいだろう。あとCCR2004-1G-2XS-PCIeそのものはかなり熱くなる。それでも遊びがいのあるデバイスではあるので満足だ。
このようにMS-01は、特定の性癖を持った人の琴線に触れつつ重要な部分はきちんと動く、ほどよい仕上がりになっている。気になった人はぜひ1台購入してほしい。そうすればきっとMINISFORUMがさらに「ちょっと変わったPC」を出す気になってくれるはずだから。