Above 4G Decoding は、マザーボード BIOS にある低レベルな PCIe リソース割り当てオプションです。NAS、小型 PC、ワークステーション、複数 GPU 構成、ルーター、HBA / SATA 拡張カード、ローカル AI マシンの調整でよく登場します。
簡単に言えば、64 ビットシステムが PCIe デバイスの MMIO アドレス空間を 4GB より上の物理アドレス範囲に割り当てられるようにする設定です。
かなり低レベルに聞こえますが、解決する問題は現実的です。マザーボードに GPU、NVMe、NIC、SATA 拡張カード、キャプチャカード、HBA など複数の PCIe デバイスがあるとき、すべてが 4GB 以下の古いアドレス空間を取り合うと、リソース割り当て失敗、デバイス未認識、起動フリーズが起きることがあります。
なぜ 4GB という境界があるのか
4GB 境界は 32 ビット時代の歴史的な名残です。
32 ビットのアドレス空間で扱える最大は次のとおりです。
|
|
現代の PC は 64 ビット CPU と 64 ビット OS が普通で、メモリも 16GB、32GB、64GB 以上が珍しくありません。それでも、マザーボードが POST や PCIe デバイス初期化を行うときは、古い互換性を考慮します。多くの PCIe デバイスのリソースマッピングは、まず 4GB 以下のアドレス空間に配置されがちです。
問題は、4GB 以下の空間がすべて RAM 用ではないことです。システムはその一部をハードウェアデバイス用に予約する必要があります。
そこで出てくるのが MMIO です。
MMIO とは何か
MMIO は Memory-Mapped I/O の略です。
CPU は PCIe デバイス内部のレジスタやメモリウィンドウを、普通の RAM のように直接触るわけではありません。デバイスの一部のレジスタ、バッファ、VRAM ウィンドウをシステムアドレス空間にマッピングします。CPU がそのアドレス範囲を読み書きすると、実際には PCIe デバイスと通信していることになります。
ざっくり言うと:
- デバイスがアドレス範囲を必要とする。
- マザーボードがシステム物理アドレス範囲を割り当てる。
- CPU がその範囲にアクセスすると、実際には PCIe デバイスにアクセスする。
このマップされた領域は普通の RAM ではありません。ハードウェアが占有するアドレスウィンドウです。
古いデフォルト設定では、多くのデバイスの MMIO 領域は 4GB 以下、特に 3GB から 4GB 付近に制限されます。デバイスが少なければ問題になりにくいですが、増えると混雑します。
BAR とは何か
各 PCIe デバイスは BAR を使って、必要なアドレス空間をマザーボードに伝えます。
BAR は Base Address Register の略です。役割は次のようなものです。
|
|
GPU、NVMe、SATA コントローラ、NIC、HBA、USB 拡張カードはいずれも BAR 空間を必要とすることがあります。デバイスが多いほどアドレスウィンドウも増えます。GPU のようなデバイスは、より大きなマッピングを必要とすることもあります。
4GB 以下の MMIO 空間が足りないと、マザーボードは後から初期化するデバイスにリソースを割り当てられなくなることがあります。
無効のままだと何が起きるか
Above 4G Decoding が無効だと、マザーボードは PCIe リソースを 4GB 以下に詰め込もうとしがちです。デバイスが少なければ気づきませんが、多いと問題が出ます。
よくある構成は次のとおりです。
- ディスクリート GPU。
- 1 つ以上の NVMe SSD。
- JMB585 / ASM1166 SATA 拡張カード。
- 2.5G / 10G NIC。
- Wi-Fi / Bluetooth モジュール。
- 追加の HBA、キャプチャカード、USB 拡張カード。
これらのデバイスはすべて、マザーボードに BAR / MMIO アドレス空間を要求します。4GB 以下が埋まると、次のような問題が起きることがあります。
- PCIe カードが認識されない。
- BIOS にデバイスが出ない。
- Linux / Windows でデバイスが欠落したり、リソースエラーになる。
- POST 段階で起動が止まる。
- 黒画面またはカーソル点滅。
- 単体では各カードが動くが、複数同時に挿すと失敗する。
JMB585 SATA 拡張カードの場面では、カードを挿すと BIOS 前で止まる、NVMe や NIC を追加すると拡張カードが消える、といった症状があります。Option ROM、CSM、PCIe Gen 速度だけでなく、PCIe アドレス空間割り当ても確認する価値があります。
Above 4G Decoding を有効化すると何が変わるか
有効化します。
|
|
これは、64 ビットアドレスをサポートする PCIe デバイスの MMIO リソースを 4GB より上に配置してよい、とマザーボードに伝えます。
これにより、PCIe デバイスが 4GB 以下の狭い領域を取り合う必要が減ります。マザーボードは一部の BAR / MMIO マッピングを高いアドレスに配置でき、リソース衝突を減らせます。
現代の 64 ビットシステムでは、これはたいてい合理的な設定です。特に次のような構成で有効です。
- 多ディスク NAS。
- 複数 NIC のルーター。
- SATA / HBA 拡張カードを挿した小型 PC。
- 複数 GPU のワークステーション。
- AI 推論または学習マシン。
- GPU、NVMe、キャプチャカード、拡張カードを同時に持つデスクトップ。
目的は通常のソフトウェア性能を上げることではなく、ハードウェアリソース割り当てに余裕を持たせることです。
JMB585 / SATA 拡張カードとの関係
JMB585 のような SATA 拡張カード単体では、それほど大きな MMIO 空間を必要としないかもしれません。問題はそのカード単体の必要量ではなく、システム全体の PCIe デバイスがアドレス空間を取り合うことです。
たとえば小型 PC には次のようなものが同時に存在します。
- NVMe システムディスク。
- オンボード NIC。
- Wi-Fi モジュール。
- JMB585 の 5 ポート SATA 拡張カード。
- 場合によってはディスクリート GPU や別のコントローラ。
BIOS のリソース割り当てが保守的だと、JMB585 は最後のほうに初期化されるデバイスになります。前のデバイスが 4GB 以下を多く消費してしまい、JMB585 が BAR 空間を要求したときに割り当てに失敗したり、異常状態へ入ったりします。
Above 4G Decoding を有効にすると、一部のデバイスリソースを 4GB より上に配置でき、衝突の確率を下げられます。
壊れたカードを直すことはできず、すべての PCIe link training 問題を解決するわけでもありません。しかし「複数デバイスを挿したときだけ異常」という場面では非常に試す価値があります。
Resizable BAR / SAM との関係
多くの人は GPU 性能設定で初めて Above 4G Decoding を見ます。たとえば NVIDIA / AMD GPU 関連の次の機能です。
Resizable BARRe-Size BARReBARSmart Access MemorySAM
これらは関係していますが、同じものではありません。
Above 4G Decoding は土台です。PCIe デバイスの MMIO リソースを 4GB より上に置けるようにします。
Resizable BAR はその先の機能です。従来、CPU が GPU VRAM にアクセスできても、小さなウィンドウ、たとえば 256MB 程度のマッピングを通じて分割アクセスすることが一般的でした。ReBAR を有効化すると、CPU は GPU の VRAM のより広い範囲を一度にマップでき、理論上アクセス切り替えのオーバーヘッドを減らせます。
多くのマザーボードでは、Resizable BAR を有効にする前に Above 4G Decoding を有効にする必要があります。つまり:
Above 4G Decoding:デバイスアドレスを 4GB より上に置けるようにする。Resizable BAR/SAM:GPU の BAR ウィンドウを大きくできるようにする。
NAS や SATA 拡張カードでは、重要なのは ReBAR ではなく、前者が提供する PCIe アドレス空間です。
副作用はあるか
現代の 64 ビット Windows、Linux、Ubuntu、Debian、TrueNAS、Proxmox などでは、Above 4G Decoding を有効にしても明確な悪影響は通常ありません。
ただし次は注意します。
- 非常に古い 32 ビット OS には向かない場合がある。
- 古い BIOS や古い PCIe デバイスでは相性が悪いことがある。
- BIOS 設定変更後に起動できない場合は CMOS クリアまたはデフォルト復元を行う。
- ReBAR / SAM も有効にするなら、GPU、マザーボード、OS、ドライバが対応しているか確認する。
現代のハードウェアと 64 ビット OS では、特にデバイスが多い場合、有効にしておく価値のある低レベル設定です。
いつ有効化すべきか
次のような場合は Above 4G Decoding を有効にすることを検討します。
- 64 ビット OS を使っている。
- 複数の PCIe デバイスを挿している。
- ディスクリート GPU があり、特に VRAM 4GB 以上の GPU を使っている。
- JMB585、ASM1166、HBA、RAID カード、キャプチャカードなどを使っている。
- 多ディスク NAS やルーターを組んでいる。
- 複数 GPU、AI アクセラレータ、ローカル LLM マシンを使っている。
- PCIe カードを挿すと起動が止まる、黒画面、カーソル点滅になる。
- 単体では正常だが、複数デバイスを同時に挿すと異常になる。
JMB585 SATA 拡張カードの POST フリーズを切り分けているなら、次と合わせて確認します。
CSMを無効化する。- 不要な
Storage OpROMを無効化する。 - PCIe 速度を
AutoまたはGen3からGen2にする。 Above 4G Decodingを有効化する。- PCIe スロットを変更する。
BIOS ではどんな名前か
マザーボードメーカーによって名前は少し異なります。よくある名称は次のとおりです。
|
|
よくある場所は次です。
AdvancedPCIe SettingsPCI Subsystem SettingsChipsetNorth BridgeIO PortsBoot
Resizable BAR の近くに置かれているマザーボードもあれば、詳細 PCIe やチップセット設定の奥にあるものもあります。
まとめ
Above 4G Decoding の核心は、マザーボードが PCIe デバイスの MMIO / BAR アドレス空間を 4GB より上に割り当てられるようにすることです。ドライバ問題を直す設定ではなく、BIOS / PCIe リソース割り当て層のアドレス空間問題を扱います。
少数のデバイスしかない普通の PC では、効果を感じないかもしれません。多ディスク NAS、複数 NIC のルーター、JMB585 / ASM1166 SATA 拡張カードを挿した小型 PC、複数 GPU ワークステーション、ローカル AI マシンでは重要になります。
PCIe 拡張カードを挿すと BIOS で止まる、黒画面、カーソル点滅、デバイス未認識、または複数デバイス同時接続時だけ失敗する場合、Above 4G Decoding = Enabled は早めに確認すべき BIOS 設定です。万能薬ではありませんが、現代の 64 ビットハードウェアを 4GB 以下の古いアドレス制約から解放し、PCIe リソース衝突を減らせます。