Ubuntu日和

【第45回】小型なのにSFP+もPCIeスロットもあるパワフルなミニPC「MINISFORUM MS-01」をUbuntuで使おう!

MS-01(左)は、右下のR86Sに比べると大きめだがその分パワフルな性能を備えている。右上はACアダプタ

 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のスペック
CPUCore i9-13900H/12900H/12450H
GPUIris 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)
Bluetooth5.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日に届いたものなので、同じモデルであればそこまで差はないはずだ。

2.5GbEのLANコネクタ2ポートに、SFP+が2ポート、さらにUSB4が2ポート並んでいる

 ちなみにベアボーンモデルだと、通常モデルには搭載されている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のデバイスを確認していこう。まずシステム全体の情報だが、一番手っ取り早いのはシステム設定の「このシステムについて」を表示する方法だろう。

画面右上の通知領域から歯車アイコンを押して、「このシステムについて」を選択するとシステム設定が表示される
さらに「System Details」を選択すると、より詳細な情報が表示される

 とりあえず使っているCPUとメモリ、GPUやストレージ、OSにカーネルなんかを共有したい場合はこの画像でも十分だ。CPU-Zみたいな表示が欲しい場合は、「CPU-X」というソフトウェアがある。これは「cpu-x」パッケージとしてインストール可能だが、公式が配布しているAppImageパッケージを使うとより最新の情報を表示できる。[CPU-Xのサイト][]にある「Releases」ページから、最新の「CPU-X-バージョン-x86_64.AppImage」をダウンロードしよう。

 UbuntuでAppImageを起動するには次のように、ダウンロードディレクトリにあるファイルに実行権限をつけて起動しよう。ここでCLI操作が必要になってしまうのが若干残念ではあるが、実行権限付けて起動するだけなら、ファイルブラウザから右クリックでプロパティを表示する形でも大丈夫だ。

AppImageパッケージを起動するにはlibfuse2パッケージが必要になる
$ sudo apt install libfuse2
$ cd ダウンロード
$ chmod +x CPU-X-*-x86_64.AppImage
$ ./CPU-X-*-x86_64.AppImage
Start daemonをクリックすると管理者権限でサービスが起動し、より詳細な情報を取得してくれる
メモリについても詳しい情報が表示されている
GPUについてはバージョン4.2ぐらいから情報が充実するようになった。複数のGPUにも対応している

 ちなみにCPU-XはCLIにも対応している。CLIで表示したいなら端末から「–ncurses」オプションを指定して起動してみよう。ただしCLIならUbuntuに最初から入っている「lscpu」コマンドもおすすめだ。こちらはシンプルなインターフェイスながら必要十分な情報が備わっている。

ここでは省略しているが、CPUフラグからはこのCPUはpopcntやavx-vnniとかibtとかが使えるかどうかをすぐに確認できる
$ 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コマンドがある。

inxi自体はもともとシステム情報をIRCに流し込んで共有するために作られている
$ sudo apt install inxi
$ sudo inxi -v 4 -c 10

 Ubuntuで正確なシステム情報を取得するためには管理者権限が必要だ。さらにinxiでは、「-v 数字」で情報の詳細度を「-c 数字」で表示する色や出力先を変更できるようになっている。

すごく見やすいというわけではないが、lshwよりはカテゴライズされていて読みやすいフォーマットだ

 PCIeデバイスやUSBデバイスはそれぞれ「lscpu」や「lsusb」で確認できる。このあたりはノートPCの動作確認と同じなので、第38回も参照して欲しい。

M.2 SSDなストレージについてもカタログスペックほどではないが十分な性能が出ている

MS-01のネットワークを確認しよう

 ようやくMS-01の特色であるネットワークインターフェイスの話に入ろう。冒頭の画像でも登場したが、同じようなミニPCの皮を被ったマシンとして第28回で紹介した「R86S」が存在する。ネットワークの設定方法や動作確認方法は、そちらにでも詳しく紹介している。手順としては基本的には同じとなるので、ここでは簡単に確認していこう。

とりあえずMS-01の2.5GbEと10GbEをそれぞれループしてみた

 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が点滅する。ポートの位置を確認したい場合に便利だろう。

ポートのリンクLEDを点滅させる方法。MS-01だと2.5GbEのほうは未対応だった
$ sudo apt install ethtool
$ sudo ethtool -p enp2s0f0

 速度の計測にあたって、より高性能な対向装置があるならそれを使うのが良いが、もし存在しない場合はそれぞれ2ポートあることだし、ループさせて名前空間で分離して使うと良いだろう。今回は4ポート分の名前空間を作ってそれぞれにネットワークインターフェイスをアサインすることにする。

net0/net1/net2/net3を作成し、それぞれにeth0という名前を付け「192.168.100.100-103」とアドレスを割り振る
$ 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
net0とnet2はiperf3のサーバーとして動かす
$ 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
net1とnet3からフレームを送り速度を計測する
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よりも優秀だ。

計測時のパッケージ温度(上段)とCPU負荷(下段)。実際に速度計測していたのは、右下のほうのCPU負荷がちょっと上昇している区間だ。ほぼ変わりないことが分かる

 あと、MS-01にはWi-Fi 6E(MediaTek MT7922)も搭載されている。6Eということは6GHz帯も使えるというわけだ。このあたりはiwパッケージで提供されているiwコマンドを使うと分かりやすい。

2.4GHz帯/5GHz帯だけでなく、6GHz帯もサポートしていることが分かる
$ 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コマンドを使うとより詳細なデバイス情報が得られる
$ 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カードなら余裕で入りそうだ
残念! ブラケットと外部コネクタが邪魔をして、筐体にうまくはまらない!

 もちろんブラケットを外せば入るが、その場合はPCIeカードのコネクタとSFP+のケージ(とMS-01内部の緩衝材)でPCIeカードを支えることになる。ちょっと怖い。そもそもPCIeスロットはブラケットで固定しておかないとちょっとした衝撃(たとえば光ケーブルの挿抜)で抜けてしまう。つまりブラケットなしでは使い物にはならない。とは言え、せっかくだから何かPCIeデバイスを接続しておきたい。特に前傾の記事では「 USB4を使えば20Gbps出せる! 」なんて見せられた日には、10GbE×2では満足したくない。もうちょっとこう、変わったものをつなげてみたい。

 というわけで、MikrotikのCCR2004-1G-2XS-PCIeを買ってみた。

みんな大好きMikrotikの中でも異彩を放つCCR2004-1G-2XS-PCIe
SFP28が2ポートと1000BASE-Tが1ポートある

 これは何かと言うと、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で測ってみよう。

MS-01からは1GbE x 4ポートのように見えてしまうが、2ポートは管理ポートで、それ以外が25GbEのポートとなる
$ 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
残念ながら4Gbps程度しか出なかった
$ 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」を出す気になってくれるはずだから。