Enable HAGS and maximize ReBAR on your recent NVIDIA GPU

Though both of these features are disabled by default, I've discovered over the course of my testing that Elite: Dangerous benefits modestly from hardware accelerated GPU scheduling and resizable BAR. The former is a Windows setting exposed by NVIDIA's drivers that seems to help in non-GPU limited scenarios (very common in EDO, even with very fast CPUs) while the latter reduces the overhead of GPU memory management. Together they can noticeably smooth out performance in some scenarios, but don't expect miracles.

In general, you'll need a Ryzen 3000 or newer AMD platform or a 10th generation or later Intel platform, with appropriate firmware and Windows 10 or newer, as well as an NVIDIA 3000 series or newer RTX card, to fully support ReBAR (some boards may enable support on prior generation hardware). Hardware accelerated GPU scheduling should be available on almost any platform going back to at least the GTX 1000 series (Pascal) parts.

AMD GPUs have ReBAR enabled by default, where applicable, and their drivers do not utilize the Windows HAGS feature, so this information is not applicable to them.

Anyway, enabling HAGS is as easy as finding the setting in whatever version of Windows you're using, but you'll want GPU-Z and NVIDIA Profile Inspector to enable ReBAR.

Open GPU-Z and navigate to the "Advanced" tab, then select "PCIe Resizable BAR" from the pull-down menu. This should show wether the system supports ReBAR (if anything is missing, you may need to change some firmware settings, or a board or GPU firmware patch, perhaps newer drivers) and, at the bottom, what the maximum ReBAR size is. You'll want to take the largest figure there (which should correspond with the "large memory range" shown in device manager, if one is curious) and convert that figure to bytes (n * 1024 * 1024), then convert decimal bytes into a hexadecimal number.

Next, open NVIDIA Profile Inspector and select "Elite Dangerous" from the list of profiles. The scroll down to the "Common" section and find the three rBAR options. The first two should be "enabled" and "1", while "Size Limit" should be the hex value you calculated prior. You can just select the default value, which corresponds to 1GiB, but I find performance is slightly better, with no downsides, if the value is equal to the maximum. Edit: Make sure you click 'apply changes'

MbjMkIn.png
 
Last edited:
Just to add another datapoint: HAGS is not the be-all-end-all solution, it can even make things worse - it does for me. Now, this is probably an issue of driver version combinations or something similar, but enabling HAGS turns ED into a terrible stutterfest for me.

I play in VR on Windows 10 with a 5900X with 32 GB @3600 MHz and a 3080 Ti through SteamVR. I just tested it right now, opening the galaxy map and moving the focus cursor left to right gives me a very jittery, stuttery image even though I am neither CPU- nor GPU limited at this point - stable 90 frames per second.

Disabled HAGS, rebooted, same test: Buttery smooth. So the internet is not wrong that, at least on Windows 10, HAGS can be the source of terrible stuttering.

Oh, and I am running the nvidia driver version 517.48 at the moment. I am hesitant to update my drivers when things are running smoothly.
 
Just to add another datapoint: HAGS is not the be-all-end-all solution, it can even make things worse - it does for me.

These features can be situational and if one has issues, it's easy to disable either or both. That said, I think support has gotten to the point, especially on the 4000 series, where these features are usually going to be beneficial, so I've enabled ReBAR globally and just left HAGS enabled unless I encounter specific problems.

Disabled HAGS, rebooted, same test: Buttery smooth. So the internet is not wrong that, at least on Windows 10, HAGS can be the source of terrible stuttering.

Oh, and I am running the nvidia driver version 517.48 at the moment. I am hesitant to update my drivers when things are running smoothly.

In general, I'm on the newest available driver as there are always issues I'm waiting to see resolved. There have also been explicit improvements to HAGS in more recent drivers.

Since 526.47 (six releases ago and the the furthest back I cared to verify against release notes), at least the following issues I've experienced have been addressed:
  • [Cyberpunk 2077] In game map may display corruption [3829994]
  • GPU may get stuck in P0 state after exiting certain games [3846389]
  • Desktop Window Manager (dwm.exe) service may report significantly higher GPU usage on certain PC configurations [3830387/3739997] (the workaround to this, prior to 526.98, was to disable HAGS)
  • MSI Afterburner is not prioritizing GPU temp limit over power when selected in app [3858911]
  • Background apps may randomly display a slight shift in color saturation [3766872]

As of the newest release driver (528.02), I'm still waiting on fixes for the following acknowledged issues:
  • Toggling HDR on and off in-game causes game stability issues when non-native resolution is used. [3624030]
  • Monitor may briefly flicker on waking from display sleep if DSR/DLDSR is enabled. [3592260]

Of course, there have been both undocumented fixes and bugs as well. The most annoying (and long standing...all of these have been around at least three years) undocumented issues I currently face are:
  • Temporal dithering and the inability to reliably adjust it (the only way is via the registry and the variables that control it are inconsistently parsed).
  • GPU randomly failing to send an HDR signal to displays when using full screen SDR applications when Windows HDR is enabled. The signal always needs to be HDR in these scenarios or the display is washed out. Alt-tabbing usually fixes it, but sometimes it breaks after alt-tabbing again, or takes repeated attempts. It's gradually gotten better, but is still a very prevalent problem.
  • Relatively high idle DPC latency from nvlddmkm.sys and dxgkrnl.sys compared to the drivers of competing products.
  • Lack of clarity on where certain features work and these features not working where competing features do (e.g. NVIDIA low latency mode not working in DX12 applications that do not support NVIDIA Reflex or DSC disabling DSR/DLDSR/NIS on Turing and Ampere parts, but working just fine, to my surprise, on Lovelace).

Anyway, on a side note, it's stuff like this that makes me highly skeptical of claims of overall NVIDIA driver superiority. I've used almost every NVIDIA driver release in the last twenty-five years (I haven't been without a contemporary NVIDIA GPU since the GeForce 256 DDR) and cannot recall any point in time where there weren't frustrating bugs. Of course, other brands also have issues, but it's been a very long time since I've felt, or been able to find anything beyond shaky anecdotes to suggest, that the competition hadn't caught up in overall driver quality.
 
if I have the time and patience, I might do a driver update and try again on the weekend. Up to the driver version I am running my experience with HAGS has been pretty much the same every time I tried it.

I enabled ReBAR a while ago and think I got fewer issues with streaming assets not loading and such, and a general improvement in smoothness. But soft issues like these are always hard to nail down, so... :).
 
I have no idea what hags and rebars are.
I thought that rebar is the new feature originally announced for the GeForce 30 series cards at launch where data can be transferred directly from an NVMe drive to the GPU (through the PCI Express bus) without having to go through the CPU. However, reading the (rather vague) description at Nvidia's website makes me unsure if it's actually that.
 
I thought that rebar is the new feature originally announced for the GeForce 30 series cards at launch where data can be transferred directly from an NVMe drive to the GPU (through the PCI Express bus) without having to go through the CPU. However, reading the (rather vague) description at Nvidia's website makes me unsure if it's actually that.
A GPU generates pics. That's pretty much what I know. And PCI express still exists?
 
A GPU generates pics. That's pretty much what I know. And PCI express still exists?
The PCI Express is actually a marvel of engineering. Each new version of it has doubled its transfer speed, and the bus is fully compatible backwards, forwards and "sideways" (as I like to say).

It's fully backwards compatible in that all newer versions of the PCI Express bus support cards designed for previous versions. That means that you can take an expansion card designed for PCI Express version 1, and install it in a PCI Express version 4 motherboard and it will work just fine.

It's also fully forwards compatible. That means that you can take an expansion card designed for PCI Express version 4 and connect it to an old motherboard that has only PCI Express version 1, and it will work. (Obviously transfer rates will be much slower, but it will work.)

It's also "sideways compatible": PCI Express slots and cards can be of varying widths. The most typical widths are x1, x2 (rarer), x4, x8 (also rare) and x16. I believe there's also theoretical support for x32 but there probably are no motherboards nor cards that wide.

What "sideways compatibility" means that you can take a card of any width and connect to a slot of any width, and it will work. You can take an x4 card and connect it to an x16 slot, and it will work. You can take an x16 card and connect it to an x4 slot, and it will work (just with a fourth of the transfer rate). In fact, you could take an x16 card and connect it to an x1 slot, and it will work, if there weren't a physical barrier in the slot that stops you from doing so, which is very common. But if you physically cut the barrier in the slot and insert the x16 card, it will work. (I believe the only reason for them to put the barrier there is so that people won't put a ginormous x16 GPU into an x1 slot and have it sag so much that it will bend and break the slot, or even the motherboard.)
 
Damn, my i7-9700K doesn't have support.

What board?

Feels like it's more than 20 years old. I remember PCIE precursors. I thougt there might have been a new standard for maybe better performance.

The precursors are mostly precursors in name only. Anyway, PCI-E is 20 years old and there are newer, higher performing standards for niche applications. However, as already mentioned PCI-E is regularly updated and doubles in bandwidth every generation. It's well suited to GPUs to the point that a faster interconnect wouldn't help much. PCI-E is rarely the bottleneck.

Anyway, resizable BAR doesn't improve performance of the interconnect, it lowers the overhead associated with using it by making larger blocks of GPU memory directly addressable.
 
I had already enabled Hags and ReBAR on my Aouros Z390 Pro with i9900k, currently with RTX4070Ti previously RTX3060Ti. I had notice no noticeable difference, but was aware that ReBAR was on the edge of being supported as there was no downside I left it. Having used Nvidia profile inspector to force it on it does seem to help. In Elite where the frame rate tanks when you leave the concourse to the hanger, still happens but seems to sort itself out quicker. Generally in elite things seem a bit smoother less pop in etc. I am obviously bottlenecked by the cpu and memory and ReBAR seems to help a bit. The big defference I noticed was with Star Citizen where the city's were a stuttering mess, now they are much smoother it still stutters but less so. If you can do it even with 9th gen Intel I have not found a downside yet.
 
On the topic of undocumented driver changes, 528.24 is finally defaulting to the correct bit depth for my monitor.
 
Though both of these features are disabled by default, I've discovered over the course of my testing that Elite: Dangerous benefits modestly from hardware accelerated GPU scheduling and resizable BAR. The former is a Windows setting exposed by NVIDIA's drivers that seems to help in non-GPU limited scenarios (very common in EDO, even with very fast CPUs) while the latter reduces the overhead of GPU memory management. Together they can noticeably smooth out performance in some scenarios, but don't expect miracles.

In general, you'll need a Ryzen 3000 or newer AMD platform or a 10th generation or later Intel platform, with appropriate firmware and Windows 10 or newer, as well as an NVIDIA 3000 series or newer RTX card, to fully support ReBAR (some boards may enable support on prior generation hardware). Hardware accelerated GPU scheduling should be available on almost any platform going back to at least the GTX 1000 series (Pascal) parts.

AMD GPUs have ReBAR enabled by default, where applicable, and their drivers do not utilize the Windows HAGS feature, so this information is not applicable to them.

Anyway, enabling HAGS is as easy as finding the setting in whatever version of Windows you're using, but you'll want GPU-Z and NVIDIA Profile Inspector to enable ReBAR.

Open GPU-Z and navigate to the "Advanced" tab, then select "PCIe Resizable BAR" from the pull-down menu. This should show wether the system supports ReBAR (if anything is missing, you may need to change some firmware settings, or a board or GPU firmware patch, perhaps newer drivers) and, at the bottom, what the maximum ReBAR size is. You'll want to take the largest figure there (which should correspond with the "large memory range" shown in device manager, if one is curious) and convert that figure to bytes (n * 1024 * 1024), then convert decimal bytes into a hexadecimal number.

Next, open NVIDIA Profile Inspector and select "Elite Dangerous" from the list of profiles. The scroll down to the "Common" section and find the three rBAR options. The first two should be "enabled" and "1", while "Size Limit" should be the hex value you calculated prior. You can just select the default value, which corresponds to 1GiB, but I find performance is slightly better, with no downsides, if the value is equal to the maximum. Edit: Make sure you click 'apply changes'

MbjMkIn.png

This seems to have helped immensely GPU scheduling was already on but the Rebar sizing was off in my BIOS so enabled it, checked GPU-Z to make sure it is there now (same sizes as what you show here), then downloaded the latest Nvidea profiler and RBAR was disabled. Turned it on set the second one to 1 then just picked the top one from the list under size (I am not familiar with the proper way to convert to hex but wow the stuttering mess is gone at least initially. Read some of the Nvidea description of what this is and sounds like it just makes much better use of the available VRAM. You are a genius sir thank you. How do you write that hex to insert it in size limit box?
 
Read some of the Nvidea description of what this is and sounds like it just makes much better use of the available VRAM.

It simplifies memory addressing.

How do you write that hex to insert it in size limit box?

I converted the largest BAR size listed in GPU-Z to bytes (32768MiB * 1024 * 1024 for an RTX 4090) which is what's in my Calculator view then just click "Hex", but in hindsight this was one byte off. You can just take that large memory range of '7FFFFFFF' (which is what you get when you subtract 7000000000 from 77FFFFFFF) and insert that directly into Profile Inspector.

Realistically, just using one of the preset values is usually fine. They are much smaller than the largest BAR usually supported, but still much larger than the default BAR size (256MiB) without ReBAR.
 
It simplifies memory addressing.



I converted the largest BAR size listed in GPU-Z to bytes (32768MiB * 1024 * 1024 for an RTX 4090) which is what's in my Calculator view then just click "Hex", but in hindsight this was one byte off. You can just take that large memory range of '7FFFFFFF' (which is what you get when you subtract 7000000000 from 77FFFFFFF) and insert that directly into Profile Inspector.

Realistically, just using one of the preset values is usually fine. They are much smaller than the largest BAR usually supported, but still much larger than the default BAR size (256MiB) without ReBAR.
Thank you :)
 
Back
Top Bottom