HN 日本語サマリー

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

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

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

39 pointsby nateb202212 コメント

要約

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

全文翻訳

ReBarUEFI は、公式にサポートされていないシステムでResizable BAR を有効にするための UEFI DXE ドライバーです。これはパフォーマンス上の利点をもたらし、Intel Arc GPU が最適に機能するためにも必要です。 NVIDIA Turing GPU(20 または 16 シリーズ)を使用している場合は、Resizable BAR を有効にするために NvStrapsReBar を参照してください。 要件(オプション) 4G デコーディングが有効になっていること。オプションで見つからない場合は、ウィキページ「隠し 4G デコーディングの有効化」を参照してください。4G デコーディングがない場合、1GB の BAR に制限され、場合によっては 512MB になります。TOLUD を減らすことで、これを最大 2GB まで増やそうと試みることができます(オプション)。 Large BAR に対する BIOS サポート。ほとんどの問題を修正するためのパッチが存在します。 使用方法 ウィキガイド「FFS モジュールの追加」に従い、手順を進めてください。モジュールの追加と、必要に応じた追加の変更について説明されています。 実行後、4G デコーディングが有効になっており、CSM がオフになっていることを確認してください。次に、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 チュートリアル(Miyconst による) これらの X99 マザーボードでは UEFIPatch が不要なため、UEFIPatch の適用手順は含まれていません。以下で手順に従うことができます。 UEFI パッチ ほとんどの UEFI ファームウェアは 64 ビット BAR の処理に問題を抱えているため、これらの問題を修正するためのいくつかのパッチが作成されました。UEFI パッチフォルダにあるパッチを適用するために UEFIPatch を使用できます。UEFIPatch の使用方法については、ウィキページを参照してください。パディングファイルが変更されていないことを確認し、変更されている場合は回避策を使用してください。 動作するパッチ <4GB BAR サイズ制限の削除 <16GB BAR サイズ制限の削除 <64GB BAR サイズ制限の削除 64 ビット BAR が 32 ビットにダウングレードされるのを防止 MMIO スペースを 16GB~32GB から 512GB/39 ビット範囲(Skylake/Kaby Lake/Coffee Lake)の全体使用に増加 MMIO スペースを 8GB~16GB から 512GB/39 ビット範囲(Haswell/Broadwell)の全体使用に増加。古いパッチが 64GB に制限されていた問題は修正されました。 MMIO スペースを 16GB から 64GB/36 ビット範囲(Sandy/Ivy Bridge)の全体使用に増加。特定の маザーボードでは DSDT の変更が必要です。DSDT パッチ適用に関するウィキページを参照してください。 ReBarState GetLastError: 5 を解決するために NVRAM ホワイトリストを削除 4G デコーディングが有効な場合に USB 3 ポートが BIOS で機能しない問題を修正(Ivy Bridge/Haswell/Broadwell) X79 Above 4G デコーディング修正 ビルド EDK2 ツリー内でクローンした後、提供されている buildffs.py スクリプトを使用して DXE ドライバーをビルドします。ReBarState は Windows または Linux で CMake を使用してビルドできます。ビルドに関する詳細はウィキページを参照してください。 FAQ PCIe Gen2 システムでも動作しますか? 以前は PCIe Gen2 システムでは動作しないと考えられていましたが、あるユーザーは i5 2500k で動作させることができました。 BIOS を変更せずにシステムで Resizable BAR を使用できますか? 4G デコーディングがオンの Linux では使用できます。最近のバージョンでは GPU BAR が自動的にリサイズおよび割り当てられます。BIOS に 4G デコーディングオプションがない場合(隠しオプションも確認してください)または DSDT が faulty な場合は、Arch wiki の DSDT 変更ガイドに従い、DSDT パッチからの変更を適用し、カーネルコマンドラインで pci=realloc を付けて起動できます。現在、BIOS の変更なしで Windows でこれを実現する方法は知られていません。 サポートされていない 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 でのみテストできました。