N3700-ITXの復活とPCIe/mini-PCIeを利用したUSB・SATA拡張
ozy's labo.
- 序文:N3700-ITXを再び中核サーバーとして使う目的
- 最大の課題:限られた拡張性をどう使うか
- USB 3.0の速度問題
- WAN側とLAN側,二本のGbEを確保する
- ストレージも単純なファイルサーバーではない
- 「全部載せ」ではなく,全体として成立させる
- USBが問題になった経緯
- USB経路を切り離すという発想
- USB 3.0とUSB 3.2の違い
- PCIe 2.0 x1がボトルネックになる
- 実際の用途から見た必要帯域
- USB + SATAコンボカードという案
- USB NICをUSB側へ接続する構成
- USB/SATAコンボカードのコントローラ
- 電源について
- 補助電源は接続しなくてもよいのか
- 現時点での構成方針
- まとめ
序文:N3700-ITXを再び中核サーバーとして使う目的
今回,サーバーとして使用していたASRock製N3700-ITXを再び活用しようと考えたのは,単に古いマザーボードを再利用したいからではありません.
目標は,従来このマシンが担っていた機能を維持したまま,さらに常時利用可能な最低限のAIエージェントを待機させ,それでも待機時消費電力を10 W未満に抑えることです.
必要としている機能は,具体的には次のようなものです.
- ファイルサーバー
- メールサーバー
- Webサーバー
- ファイアウォール/ルーター
- 最低限のGUIデスクトップ環境
- コンソールから各種プログラムを実行できる環境
- 常時待機する最低限のAIエージェント
つまり,単機能のNASやルーターを作るのではなく,ネットワークの入口からストレージ,Webサービス,管理用デスクトップ,コンソール環境,さらにAIエージェントまでを一台にまとめた,常時稼働型の小型サーバーを目指しています.
この用途では,CPU性能をひたすら追求する必要はありません.むしろ重要なのは,必要な機能を十分に動かせる性能を確保しながら,何もしていない時間には極めて小さな消費電力で待機できることです.
そのため,現在の基準では非常に古いN3700というCPUでも,目的に対して適切な構成を作ることができれば,十分に実用的な選択肢になります.
最大の課題:限られた拡張性をどう使うか
このN3700-ITXを再利用するにあたって,最大の問題は,低消費電力そのものではなく,限られた拡張性をどのように使い切るかという点にあります.
特に重要なのが,メーカーが基本的にWi-Fi用として用意しているHalf mini-PCIeスロットです.
このスロットを単なるWi-Fi用として眠らせるのではなく,PCIeデバイス用の拡張ポートとして利用できないかを検討しました.
ここにGPUとしてGeForce GTX 1050 Tiを接続することを想定しています.
つまり,
N3700-ITX
│
├─ Half mini-PCIe
│ └─ GTX 1050 Ti
│
└─ PCIe x1
└─ USB / SATA / ネットワーク関連の拡張
というように,通常はWi-Fiカード用とされているmini-PCIeまで含め,マザーボード上に存在する拡張資源を可能な限り有効利用する構成を目指しています.
USB 3.0の速度問題
しかし,GPUを搭載するだけでは目的を達成できません.
このN3700-ITXには,以前からUSB 3.0の速度が十分に出ないという問題が確認されていました.
実際にUSB HDDを接続して転送試験を行ったところ,既存のUSB経路では書き込み速度が約24 MB/sしか出ませんでした.
使用されていた経路は,
N3700 xHCI ↓ ASM1074 ↓ USB HDD
です.
USB 3.0の規格上の最大速度は5 Gbpsであり,単純換算でも625 MB/s相当になります.もちろん実際にはプロトコルのオーバーヘッドやストレージ側の性能などによってこれより低下しますが,それでも約24 MB/sという結果は,USB 3.0として期待される性能から大きく離れています.
したがって,今回の再構築では,この既存USB経路をそのまま利用するのではなく,PCIe側に別のUSBコントローラを追加し,問題のある経路そのものを回避することを検討しています.
WAN側とLAN側,二本のGbEを確保する
さらに,このマシンを従来どおりファイアウォール/ルーターとして利用するためには,ネットワークインターフェースも重要です.
最低でも,
WAN
│
└─ GbE
│
↓
N3700-ITX
│
└─ GbE
│
↓
LAN
という,WAN側とLAN側の二本のGigabit Ethernetを確保する必要があります.
これは今回の構成における至上命題の一つです.
単純にUSBポートを増やすだけではなく,GPU,USB,SATA,WAN,LANという複数の機能を,限られたPCIe資源の中で同時に成立させる必要があります.
ストレージも単純なファイルサーバーではない
さらに,このマシンではシステムディスクだけを扱えばよいわけではありません.
日常的に,
- システムディスク
- 約5 TBのストレージ
- ホットスワップ可能な二本の3.5インチSATAリムーバブルディスクスロット
を使用します.
リムーバブルディスクについても,単なるデータ交換用ではありません.
例えば,
- rsyncによるバックアップ
- ddによるディスク同士のミラーリング
- ディスクの丸ごとのコピー
- OSやシステムディスクの複製
- 一時的なストレージの接続
などを日常的に行います.
そのため,SATAポートやUSBポートの数だけを増やせばよいわけではなく,実際の運用方法まで含めて,ストレージ経路を設計する必要があります.
「全部載せ」ではなく,全体として成立させる
今回の難しさは,個々の機能を実現することではありません.
GTX 1050 Tiを接続すること自体は可能です.
USB 3.0カードを追加することも可能です.
GbE NICを追加することも可能です.
SATAを増設することも可能です.
しかし,N3700-ITXには無限に拡張スロットがあるわけではありません.
限られた,
- PCIe x1
- Half mini-PCIe
- オンボードSATA
- USB
- ネットワークインターフェース
を組み合わせて,
低消費電力 + ルーター + ファイルサーバー + メールサーバー + Webサーバー + デスクトップ + コンソール環境 + 常時待機AIエージェント + GTX 1050 Ti + 十分なストレージ + バックアップ/ディスクコピー環境 + WAN/LAN二本のGbE
を一台のマシンとして成立させなければなりません.
しかも最終的な目標は,これらを動かしながら,待機時には10 W未満という極めて低い消費電力を維持することです.
したがって,今回必要なのは単なる「古いPCの復活」ではありません.
限られた拡張資源を一つずつ検討し,USBの実測上の問題を解決し,mini-PCIeをGPUに転用し,二本のGbEを確保し,複数のストレージを扱えるようにし,そのうえでサーバー,ルーター,デスクトップ,AIエージェントを一つのシステムとしてまとめ上げることです.
このため,今回のN3700-ITX再生計画では,個々のパーツの性能だけではなく,**全体としてどれだけ多機能でありながら,無駄がなく,常時稼働に適した構成にできるか**を重視しています.
さて,では作業を開始していきます.
まず,既存の解っていた問題について.
USBが問題になった経緯
今回のUSB拡張を検討する大きな理由の一つが,N3700-ITXの既存USB経路で十分な速度が出なかったことです.
これは前から解っていたことですが,今回実際に,
N3700 xHCI ↓ ASM1074 ↓ USB HDD
という経路でUSB HDDを使用したところ,書き込み速度が約24 MB/sという結果になりました.
これはUSB 3.xの理論帯域からするとかなり低い値です.
USB 3.0の最大転送速度は5 Gbpsです.
単純にビットをバイトへ換算すると,
5 Gbps ÷ 8 = 625 MB/s
となります.
もちろんこれは物理層の理論値なので,プロトコルのオーバーヘッドやUSBストレージ側,HDD側などの影響により,実際の転送速度はこれより低くなります.
しかし,今回確認された約24 MB/sは,それらを考慮してもUSB 3.0として期待される速度より大幅に低い値です.
USB経路を切り離すという発想
そこで,既存のUSB経路をそのまま高速化しようとするのではなく,PCIe側からUSBコントローラを追加し,別のUSB経路を作る案が出てきました.
現在の構成が,
N3700 xHCI ↓ ASM1074 ↓ USB HDD
であるのに対し,PCIe USBカードを使用すれば,
N3700 PCIe 2.0 x1 ↓ USB 3.0コントローラ ↓ USB HDD
となります.
つまり,既存のxHCI→ASM1074というUSB経路を完全に避けることができます.
今回重要なのは,単に「USB 3.0カードなら速いはず」と考えているのではなく,実際に低速だった既存経路とは別のハードウェア経路を用意して,ボトルネックを回避することです.
USB 3.0とUSB 3.2の違い
ここで,増設カードを選ぶ際に「USB 3.0」と「USB 3.2」のどちらが必要なのかという問題が出てきました.
USBの名称は非常に紛らわしく,USB 3.2だから必ず20 Gbpsというわけではありません.
対応関係は次のようになります.
| 表記 | 別名 | 最大速度 |
|---|---|---|
| USB 3.0 | USB 3.1 Gen 1 / USB 3.2 Gen 1 | 5 Gbps |
| USB 3.1 Gen 2 | USB 3.2 Gen 2 | 10 Gbps |
| USB 3.2 Gen 2x2 | - | 20 Gbps |
したがって,今回のような古いマザーボードでは,「USB 3.2」という名称だけを見て高価なカードを選ぶ意味はあまりありません.
PCIe 2.0 x1がボトルネックになる
N3700-ITXのPCIe x1スロットはPCIe 2.0 x1です.
PCIe 2.0 x1の帯域は,片方向で約500 MB/sが目安になります.
そのため,例えば10 GbpsのUSB 3.2 Gen 2コントローラを接続したとしても,
USB 3.2 Gen 2
│
│ 10 Gbps
↓
PCIe 2.0 x1
│
│ 約500 MB/s
↓
N3700
となり,PCIe側が先に制限要因になります.
一方,USB 3.0は5 Gbpsなので,このマザーボードでPCIe x1にUSBカードを追加する目的なら,USB 3.0対応カードで十分です.
実際の用途から見た必要帯域
今回想定している用途では,非常に高速なUSBインターフェースそのものが目的ではありません.
例えばうちのようにWAN側が240 Mbpsの場合,
240 Mbps ÷ 8 = 約30 MB/s
です.
USB HDDを使用する場合,先に示したように,オンボードの既存経路で今回確認された速度は約24 MB/sでした.
しかし別経路を確保し,仮にそこでHDDを100 MB/s程度で利用できたとしても,
USB HDD 約100 MB/s WAN 約30 MB/s --------------------- 合計 約130 MB/s
程度です.
(ちなみに,WAN側I/FがUSBの上に乗っているのは,以前のように,もはやPCIe x1スロットをGbEカードに専有させることは出来ないからです)
PCIe 2.0 x1の約500 MB/sという帯域に対して,十分余裕があります.
HDDではなく,SSDだとしても十分かも知れません.
したがって,
PCIe 2.0 x1にUSB 3.0カードを追加する
という構成は,今回の用途に対して帯域上かなり妥当です.
USB + SATAコンボカードという案
さらに,USBだけではなくSATAも追加できるカードが候補になりました.
実際には予算の都合でやりませんでしたが.
N3700-ITXのオンボードSATAポートは既存の用途で埋まっているため,SATAポートを増やせれば,
オンボード SATA ├─ system ├─ storage ├─ guest └─ guest PCIe SATA ├─ backup └─ 作業用
というように,追加ストレージ用の逃げ道を作れます.
サーバーや実験機として使う場合,
- ddによるディスクコピー
- OSイメージ作成
- HDD交換
- 一時ディスク
- バックアップ
など,追加のSATAポートを利用できる場面があります.
そのため,PCIe x1をUSBだけに使うのではなく,USB + SATAコンボカードにする案には合理性があります.
USB NICをUSB側へ接続する構成
さらに,USBポートにUSB NICを接続すれば,PCIe x1一つから複数の用途を引き出すこともできます.
PCIe 2.0 x1
│
↓
USB 3.0 / SATA
コンボカード
│ │
│ └── SATA HDD
│
├── USB NIC
│ └── WAN
│
└── USB HDD
WANが240 Mbps程度であれば,USB NICに必要な帯域は約30 MB/sです.
そのため,PCIe x1の帯域から見ても,USB NICとストレージを組み合わせる構成は十分現実的です.
ただし,USBストレージ,SATAストレージ,USB NICを同時に大量転送すれば,最終的にはPCIe x1の約500 MB/sという共有帯域に達する可能性があります.
今回想定している用途では,その上限に常時張り付くような構成ではありません.
USB/SATAコンボカードのコントローラ
カード選びでは,単に商品名に「USB 3.0」や「USB 3.2」と書かれているかを見るだけではなく,実際のコントローラを見ることが重要です.
候補として,
- Renesas μPD720202系
- VIA VL805系
- ASMedia ASM1061系(SATA)
などが挙がりました.
例えば,
Renesas μPD720202
│
└─ USB 3.0
ASMedia ASM1061
│
└─ SATA
のような構成のUSB/SATAコンボカードがあります.
古いLinux環境で使用することを考えると,カードの規格上の最大速度だけでなく,実際のコントローラとドライバ対応を確認することが重要です.
電源について
最後に,USB/SATAコンボカードの電源供給について検討しました.
当初は,PCIeスロットから25 W程度の電力を取れるのではないかという認識がありましたが,ここは注意が必要です.
PCIe x1スロットについては,通常は最大10 W程度を目安に考えるべきです.
したがって,
PCIe x1 │ ├─ USBコントローラ ├─ USBポートへの5V給電 └─ その他のカード回路
をすべてスロット給電だけで賄えるかどうかは,カードの設計によります.
USB 3.0カード単体であれば,PCIe x1からの給電だけで動作する製品もあります.
一方,USB/SATAコンボカードの場合は,
- USBポートから大きな電流を取りたい
- 複数のUSB機器を同時接続したい
- SATA機器を接続する
- カード側の電源を補助したい
といった条件が加わります.
そのため,MolexやSATAなどの補助電源コネクタが付いたカードを選ぶほうが安全です.
私は電源の余りケーブルの都合上,また,GTX-1050Tiを載せるライザーと揃える為に,Molexを選びました.
Molexのほうが容量的にも多少有利です.
補助電源は接続しなくてもよいのか
Molex付きカードでも,補助電源を接続しなくても動作する製品はあります.
ただし,
Molexが付いているから,接続しなくても必ず動作する
とは言えません.
カードによって,
- USBポートへの5V給電専用
- SATA機器への電源供給
- USBコントローラを含むカード全体の電源補助
など,補助電源の役割が異なるためです.
今回の方針としては,
Molex付きのUSB 3.0 / SATAコンボカードを選ぶ
↓
必要なら最初からMolexを接続して使用する
という形が無難です.
特に,USB NICとUSB HDDなどを同時に使用する可能性があるため,給電能力をわざわざギリギリにするメリットはありません.
現時点での構成方針
ここまでの検討をまとめると,N3700-ITXの復活目的は,古い低消費電力マシンをサーバー・実験機として再利用しつつ,既存のUSB経路の問題を避けながらストレージとネットワークの拡張性を確保することです.
構成としては,
ASRock N3700-ITX
│
├─ PCIe 2.0 x1
│ │
│ └─ USB 3.0 / SATA コンボカード
│ ├─ USB NIC
│ ├─ USB HDD
│ └─ SATA HDD
│
└─ Half mini-PCIe
└─ライザーを使用してGTX-1050Ti
という方向になります.
特に重要なのは,既存のUSB経路で,
N3700 xHCI ↓ ASM1074 ↓ USB HDD ↓ 書き込み 約24 MB/s
という結果が実際に出ていることです.
そのため,今回のPCIe USBカード追加は単なる「USBポートを増やしたい」という話ではなく,**既存のUSB経路をPCIe接続の別USBコントローラへ切り替え,実測で低速だった経路を回避すること**が主目的の一つになっています.
(もちろんオンボードのなんちゃってUSB3ポートは低速デバイスで使用可能)
まとめ
今回の検討は,単純な「古いN3700をもう一度使う」というところから始まりました.
そこから,
N3700-ITXを再利用
↓
PCIe x1 / Half mini-PCIeを活用できないか
↓
PCIe x1にUSB/SATAカードを追加
↓
既存USB経路の低速問題を回避
↓
USB NIC・USB HDD・SATA HDDを追加
↓
PCIe 2.0 x1の約500 MB/sで十分か検討
↓
今回の用途ならUSB 3.0で十分と判断
↓
補助電源付きカードを選ぶ方針
という流れになりました.
特にUSBについては,理論上の規格速度だけを見るのではなく,実際のN3700-ITX上でUSB HDDを接続した際に約24 MB/sという結果が得られていることが重要です.
このため,今回の拡張では「より新しいUSB規格を使う」ことそのものよりも,**既存のxHCI→ASM1074→USB HDDという経路をPCIe接続の別USBコントローラへ置き換えること**に意味があります.