Resizable BAR for (almost) any UEFI system. Contribute to xCuri0/ReBarUEFI development by creating an account on GitHub.

243 points•nateb2022•10 days ago•77 comments•

77 comments

abrookewood8 days ago
FYI: Resizable BAR (Base Address Register) is a PCI Express feature that removes the traditional 256MB memory limit, allowing your CPU to access your graphics card's entire VRAM at once for a potential 5% to 15% boost in gaming performance
jttnr8 days ago
Thanks for the quick explanation. I'd been reading through the README to figure out what it was for, but wasn't able to.
prmoustache8 days ago
Thanks, that context was definitely missing. Is that a feature that exists on any GPU brand/model?
p_l8 days ago
Only on specific devices, but generally every GPU released in last few generations, and every dedicated GPU from intel[1], supports "large BAR" this way to map entire GPU memory into MMIO space. This has to be supported on both target device and AFAIK the PCI Root Port[2], and of course needs to be properly handled in firmware - which this tool fixes.

[1] Intel GPUs actually can't work without it, because they do not have legacy "windowing" mode where portions of 256MB BAR window are mapped to different areas in GPU memory

[2] This tool implies that it's possible to handle root port side entirely in firmware, but it's new to me at least, so I can't vouch for that :)

zir_blazer8 days ago
These kind of BIOS modding shenannigans is why I got interesed in Coreboot, so that enhancing a Firmware capabilities becomes possible without touching propietary tools/code.

Other similar mods included adding NVMe Boot capabilities to older Firmwares that didn't supported them so that you could boot from modern NVMe drives if you used some kind of adapter (As none of those Motherboards have M.2 Slots, but you can use them with a PCIe-to-M.2 adapter card). Also adding required stuff to get certain CPUs booting in Motherboard that were never officially supported (Depending on generation, could be as simple as adding new CPU Microcode).

userbinator8 days ago
These days you might be able to just point an AI at the original BIOS and tell it what you need done, instead of attempting to install a complete rewrite like Coreboot (which comes with its own limitations, the biggest one being that only a rather small subset of mobos are actually supported.)
zir_blazer8 days ago
Yes, I know that there are examples in the wild of that kind of AI modding:

https://www.downtowndougbrown.com/2026/08/fixing-an-emachine...

https://www.tomshardware.com/pc-components/cpus/modder-uses-...

Coreboot in desktops is perhaps in the best shape it has been in more than a decade because you have the MSI Z690-A/Z790-P series for LGA 1700 (Which were current gen when released, and still viable if you want Intel with DDR4, albeit the boards aren't available in retail anymore) and the recently released port for the MSI B850-P for AM5 Phoenix. It was a major leap from previously, where it only supported ancient platforms or unobtanium reference boards. I bashed Coreboot a lot for that, but now you actually have usable options. Same with Servers, with the Gigabyte MZ33-AR1 for AMD Turin. When was the last time you saw Coreboot running on current gen boards available in retail, if ever?

snvzz8 days ago
Regarding Coreboot, it is far worse than that. They literally do not care anymore; focus is not on corebooting all the boards, but on serving some sort of commercial "customer".

e.g. they do seldom if ever take patches for adding support or fixing issues in older boards. They just sit there ignored.

A fork or entire new project with different focus is sorely needed.

bigwheels8 days ago
What does this do? I perused the README but I'm still clueless on what the purpose and use-case is for ReBAR.

(Posting this under the assumption others will also appreciate a bit of quick context.)

zir_blazer8 days ago
Since about 5 or 6 years ago, PCIe Video Cards advertise a capability known as Resizeable BAR. PCI Devices like GPUs require some memory to use for PCI MMIO, which is directly visible on the CPU Address Space. As a side note, this Address Space is shared with RAM, and anyone that was around when having 4 GiB RAM with a 32 Bit OS was common (Earlier than 2010 or so) knows that you only saw about 3.25 GiB RAM or so because of sharing the Address Space with PCI MMIO, and those fortunate enough to have used SLI usually saw even less than that, like 2.87 GiB RAM.

GPUs has been using a 256 MiB PCI MMIO window regardless of how much VRAM they actually have since... nearly forever? At least since PCIe is a thing, since I recall than AGP Aperture Size was seteable in era accurate BIOSes. PCIe 3.0 specification introduced a feature known as Resizeable BAR, where the PCI Device can tell a compatible Firmware how much MMIO it actually wants. GPUs uses that to tell a ReBAR capable UEFI Firmware that it wants more MMIO (Usually as big as the GPU VRAM), or uses legacy 256 MiB otherwise.

userbinator8 days ago
GPUs have been using a 256MB window since they started coming with 256MB of VRAM, as it would otherwise be a pointless waste of address space to have a window larger than the actual amount of VRAM. Previously, they would have a window exactly equal to the size of VRAM (likely rounded up to the next power of 2.)
akiselev8 days ago
Just to make sure I understand: Is the resizable BAR/MMIO a RAM buffer for PCie packets? Or does it have some deeper integration with DMA or something? I assume it's not like memory mapped peripherals on an AXI bus which is why you need the buffer?
cesarb8 days ago
It's hard to explain without going into a few low-level details of PCI Express, but let me try.

Most PCI devices expose some memory and/or I/O ports to the CPU. That memory (or I/O ports) is mapped to somewhere in the address space visible to the CPU. Besides the memory and I/O ports, all PCI devices also expose a separate set of configuration registers; among these registers, there are the Base Address Registers (BARs), which configure where the memory or I/O ports is mapped.

Here's an example output from "lspci -vv" for a GPU:

        Region 0: Memory at 7c00000000 (64-bit, prefetchable) [size=8G]
        Region 2: Memory at 7e00000000 (64-bit, prefetchable) [size=256M]
        Region 4: I/O ports at f000 [size=256]
        Region 5: Memory at fca00000 (32-bit, non-prefetchable) [size=1M]
        Expansion ROM at fcb00000 [disabled] [size=128K]
Note that regions 0 and 2 are above the 4GB addressable by old 32-bit CPUs. To be compatible with these old CPUs, this card and many others like it allow the firmware (and/or the operating system) to choose not only where the memory is mapped, but also its size. We can see this in the same "lspci -vv" output for this GPU:

        Capabilities: [200 v1] Physical Resizable BAR
                BAR 0: current size: 8GB, supported: 256MB 512MB 1GB 2GB 4GB 8GB
                BAR 2: current size: 256MB, supported: 2MB 4MB 8MB 16MB 32MB 64MB 128MB 256MB
Older systems which do not understand this extended capability will still treat these regions as fixed size, probably with the first size in this list (256MB for region 0, 2MB for region 2). Newer systems can tell the device to "resize" the BAR to a bigger size, which obviously needs the first region to be placed above the 4GB barrier since it's too big.

Why is this useful? This particular GPU has 8GB of VRAM; it's quite obvious that region 0 is a direct view into that VRAM. When using the maximum BAR size, the CPU can directly read and write anywhere into the VRAM; when using a smaller BAR, the CPU can only see a small window into the VRAM, and has to use less direct methods to access it.

(As an aside: go right now and do a "sudo lspci -vv" on your computer, if you see a Resizable BAR capability which isn't using the maximum size, you can probably gain a bit more speed for free by going into the BIOS and enabling "Resizable BAR" and/or "Above 4G decoding". If you can't find these options, well, AFAIU that's what this project is all about..)

ChocolateGod8 days ago
> (As an aside: go right now and do a "sudo lspci -vv" on your computer, if you see a Resizable BAR capability which isn't using the maximum size, you can probably gain a bit more speed for free by going into the BIOS and enabling "Resizable BAR" and/or "Above 4G decoding". If you can't find these options, well, AFAIU that's what this project is all about..)

IIRC Linux doesn't need resizable bar enabled in the BIOS since the kernel will resize the bar if supported by the GPU, Windows however relies on the UEFI doing it which is where it being enabled in the BIOS is needed.

segfaultbuserr8 days ago
ReBar's commercial name is AMD Smart Access Memory, it allows a PCIe device such as a GPU to map more VRAM to the system at once, which improves performance by reducing access overhead. This generated much fanfare in the early 2020s after AMD officially supported it in the newly released AMD Zen 3 CPUs with RX6800 series GPUs. It was marketed as a new technology to boost GPU/gaming performance. What AMD did was just rebranding an obscure feature in the PCIe specification [1]. As shown by this project, it was actually supported by the PCIe controller since Sandy Bridge, just disabled in the firmware. For a decade nobody bothered to use it. Presumably, AMD saw an opportunity and enabled it, presumably after validating the hardware and fixing any driver compatibility problems.

[1] This is nothing new in the tech industry. Intel rebrands DVFS as SpeedStep, IOMMU as VT-d, AMD rebrands the NX bit as Enhanced Virus Protection, etc.

kimixa8 days ago
I feel part of the "Smart Access Memory" name is actually the driver features and paths to actually make use of it.

It's not like ReBar is a single toggle "Make Things Faster", but a different option in how it can map gpu memory to the cpu. The driver still needs to use it - and decide where it's use vs the "staging buffer" approach would actually be be benefitial.

bpye8 days ago
IOMMU branding at least makes a little bit of sense. AMDs and Intels virtualisation ISA are completely different, including their IOMMU.
account428 days ago
SAM wasn't just about the resizable BAR capability but also about driver adjustments to make efficient use of the larger BAR.
Moto74518 days ago
Resizable Base Address Register. In short, rather than the 256MB of mapped memory available to the CPU for any PCI device, ReBAR capable devices can map larger memory to the CPU’s addressable memory space. Without ReBAR or sufficient tricks (that Intel GPUs lack) you have to shuffle 256MB chunks around between GPU and CPU.
bpye8 days ago
> sufficient tricks (that Intel GPUs lack)

Isn't it just being able to shift the window of GPU memory visible to the CPU?

wmf8 days ago
It allows the CPU to access all GPU VRAM. This improves gaming performance, especially for AMD GPUs.
willis9368 days ago
It should come with a warning label. If you're in a scenario where VRAM is being maxed out and thrashing main memory then ReBAR will worsen the frequency and magnitude of the stutters. I ran into this with a 3070 (8 GB) recently.
marcus99998 days ago
this fixes a real annoyance on older workstation boards where above 4g decoding is a requirement but the option isn't even in the bios menu. saw a build recently on an x79 board where it had to be exposed with a hand patched bios before anything like this or a modern gpu would work at all.
Melatonic8 days ago
Does this help for more than just gaming ?
jedbrooke8 days ago
thanks for the throwback, I remember having to hand patch the bios on my x79 system to use a gpu with 12GB vram. Fun times. My motherboard also mysteriously stopped working shortly after…
bpye8 days ago
I patched my old Haswell system to add an NVMe DXE so I could boot from a modern SSD. I currently have a Lets Note laptop that definitely has UEFI, but pretty much pretends to be BIOS - apparently it's possible to modify to expose UEFI features but I have yet to try...
nullify888 days ago
Since I don't want to tinker with my HP Firmware, a brief investigation led me to OpenCore's ability to enable Resizable BAR in the bootloader before Windows boots. Not sure how reliable it is. https://github.com/xCuri0/ReBarUEFI/discussions/118

Read the full thread on Hacker News →

Related stories