Above 4G Decoding とは?PCIe デバイスが多い構成、NAS 拡張カード、大容量 VRAM GPU で有効化したい理由

BIOS の Above 4G Decoding の役割、4GB アドレス境界の歴史的理由、MMIO と BAR のリソース割り当て、JMB585 拡張カード、NAS、複数 GPU、Resizable BAR / SAM との関係を解説します。

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 ビットのアドレス空間で扱える最大は次のとおりです。

1
2^32 bytes = 4GB

現代の 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 の略です。役割は次のようなものです。

1
MMIO 空間が必要です。アドレス範囲を割り当ててください。

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 を有効化すると何が変わるか

有効化します。

1
Above 4G Decoding = Enabled

これは、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 BAR
  • Re-Size BAR
  • ReBAR
  • Smart Access Memory
  • SAM

これらは関係していますが、同じものではありません。

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 ではどんな名前か

マザーボードメーカーによって名前は少し異なります。よくある名称は次のとおりです。

1
2
3
4
5
Above 4G Decoding
Above 4GB MMIO BIOS assignment
Memory Mapped I/O above 4GB
64-bit PCIe decoding
PCI 64-bit Resource Handling

よくある場所は次です。

  • Advanced
  • PCIe Settings
  • PCI Subsystem Settings
  • Chipset
  • North Bridge
  • IO Ports
  • Boot

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 リソース衝突を減らせます。

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。