HN 日本語サマリー

← 一覧へ戻る
プログラミング

ReBarUEFI: ほぼ全てのUEFIシステムでResizable BARを有効化

ReBarUEFI: Resizable BAR for almost any UEFI system (github.com)

219 pointsby nateb202270 コメント

要約

ReBarUEFIは、公式にサポートされていないシステムでもResizable BAR(リサイズ可能なベースアドレスレジスタ)を有効にするためのUEFI DXEドライバーです。これによりパフォーマンスが向上し、Intel Arc GPUの最適動作に不可欠です。このツールは、UEFIファームウェアにモジュールを追加し、PCIデバイスのBARサイズを動的に設定することで機能します。

全文翻訳

ReBarUEFI

[画像: GitHub Actions ReBarDxe] [画像: GitHub Actions ReBarState] [画像: Downloads]

公式にサポートされていないシステムでResizable BARを有効化するためのUEFI DXEドライバーです。これによりパフォーマンスが向上し、Intel Arc GPUが最適に機能するために必要となります。

[画像: screenshot showing cpu-z, gpu-z and amd software]

NVIDIA Turing GPU(20または16シリーズ)を使用している場合は、NvStrapsReBarを参照してResizable BARを有効にしてください。

要件

  • (オプション)4G Decodingが有効になっていること。オプションが見つからない場合は、Wikiページの隠し4Gデコーディングの有効化を参照してください。4G Decodingがない場合、BARサイズは1GB、場合によっては512MBに制限されます。TOLUDを減らすことで2GBまで増やせる可能性があります。
  • (オプション)Large BARsのBIOSサポート。これに関連するほとんどの問題を修正するためのパッチが存在します。

使用方法

WikiガイドのFFSモジュールの追加に従い、手順を進めてください。必要に応じて、モジュールの追加と追加の変更について説明されています。

修正されたファームウェアを実行したら、4Gデコーディングが有効になっており、CSMが無効になっていることを確認してください。

次に、ReleasesにあるReBarStateを実行します(Linuxの場合はCMakeでビルドしてください)。そして、Resizable BARのサイズを設定します。ほとんどの場合、問題なく32(無制限)を使用できるはずですが、32が機能しない場合は、より小さいBARサイズを使用する必要があるかもしれません。

Resizable BARが機能した場合は、動作するマザーボードのリストに返信して、リストに追加できるようにしてください。 ほとんどのファームウェアは、Secure Bootがオンの状態でも署名されていない/パッチ適用済みのモジュールを受け入れるため、特定のゲームの実行に問題はありません。

Resizable BARを有効にした後に問題が発生した場合は、一般的な問題(および修正)を参照してください。

仕組み

このモジュールはUEFIファームウェアのDXEボリュームに追加されるため、起動ごとに実行されます。ReBarDxeモジュールは、PciHostBridgeResourceAllocationProtocolのPreprocessController関数を、Resizable BARの機能を確認し、ReBarState NVRAM変数から取得したサイズに設定する関数に置き換えます。元の関数を実行した後、この新しいPreprocessController関数は、PCI列挙中にPciBusモジュールによって呼び出され、新しいBARサイズを検出し、それに応じて割り当てます。

AliExpress X99チュートリアル by Miyconst

[画像: Resizable BAR on LGA 2011-3 X99]

これらのX99マザーボードではUEFIPatchの適用は不要なため、その手順は含まれていません。以下で手順を確認できます。

UEFIパッチ適用

ほとんどのUEFIファームウェアは64ビットBARの処理に問題を抱えているため、いくつかのパッチが作成され、これらの問題を修正しています。UEFIPatchフォルダにあるパッチを適用するには、UEFIPatchを使用できます。UEFIPatchの使用方法については、WikiページのUEFIPatchの使用を参照してください。パディングファイルが変更されていないことを確認し、変更されている場合は回避策を使用してください。

動作するパッチ
  • <4GB BARサイズ制限の削除
  • <16GB BARサイズ制限の削除
  • <64GB BARサイズ制限の削除
  • 64ビットBARが32ビットにダウングレードされるのを防止
  • MMIOスペースを16〜32GBから512GB/39ビット範囲(Skylake/Kaby Lake/Coffee Lake)の全体使用に拡張
  • MMIOスペースを8〜16GBから512GB/39ビット範囲(Haswell/Broadwell)の全体使用に拡張。古いパッチが64GBに制限されていた問題は修正されました。
  • MMIOスペースを16GBから64GB/36ビット範囲(Sandy/Ivy Bridge)の全体使用に拡張。一部のマザーボードではDSDTの変更が必要です。詳細については、WikiページのDSDTパッチ適用を参照してください。
  • ReBarStateのGetLastError: 5エラーを解決するためのNVRAMホワイトリストの削除
  • 4G Decoding有効時のBIOSでのUSB 3ポートの動作不良を修正(Ivy Bridge/Haswell/Broadwell)
  • X79 Above 4G Decoding修正

ビルド

DXEドライバーをビルドするには、edk2ツリー内でクローンした後、提供されているbuildffs.pyスクリプトを使用してください。ReBarStateは、CMakeを使用してWindowsまたはLinuxでビルドできます。詳細については、Wikiページのビルドを参照してください。

FAQ

PCIe Gen2システムで動作しますか?

以前はPCIe Gen2システムでは動作しないと考えられていましたが、i5 2500kで動作したユーザーがいます。

BIOSを修正せずにResizable BARを使用できますか?

Linuxで4G Decodingをオンにして使用できます。最近のバージョンでは、GPU BARが自動的にリサイズおよび割り当てられます。BIOSに4Gデコーディングオプションがない場合(隠しを確認してください)やDSDTに問題がある場合は、Arch WikiのDSDT変更ガイドをDSDTパッチ適用の変更を加えて使用し、カーネルコマンドラインでpci=reallocを指定して起動できます。現在、BIOSの変更なしでWindowsでResizable BARを有効にする既知の方法はありません。

サポートされていないBARサイズを設定してしまい、システムが起動しません

CMOSをクリアすると、Resizable BARは無効になります。場合によっては、Resizable BARを無効にするためにCMOSバッテリーを取り外す必要があるかもしれません。

最適ではないBARサイズでもパフォーマンスは向上しますか?

私のシステム(i5 3470とSapphire Nitro+ RX 580 8GB)で、ドライバーでResizable BARを有効にした場合、2GBのBARサイズで最大12%のFPS増加が得られます。

謝辞

  • テスト/開発支援をしてくれた@dsanke, @cursemex, @dripsnek, @val3nt33n, @Mak3rdeおよび@romulus2k4

  • Linuxカーネル、特にamdgpuドライバー

  • すべてのOEM UEFIが従うベースとしてのEDK2

  • UEFIモジュールをパッチして人工的な制限を回避するために使用されたGhidra

  • NVRAMホワイトリストパッチを提供してくれた@vit9696

  • X79 Above 4Gパッチの支援をしてくれた@ZOXZX

  • UEFITool/UEFIPatchを開発した@NikolajSchlej

  • QEMU/OVMFはフックのテストを容易にしましたが、Resizable BARデバイスがなかったため、実際のPCでしかテストできませんでした。QEMU