Making a Ryzen 9000 V/F Curve

Today, we’re putting together a Ryzen 9000 V/F Curve using the Ryzen 9 9950X3D dual-CCD “Granite Ridge” processor.

Ryzen 9000 V/F Curve: Introduction

Hello and welcome to CheckPoint, a blog series for talking about specific overclocking topics in a shorter format.

Today, I want to show you how I put together the Ryzen 9000 V/F curves I’ve been using in all my SkatterBencher guides. These V/F curves are not only useful to visualize the impact of tuning with Curve Optimizer and Curve Shaper, but they also help me better analyze instability when tuning the processor.

I will use the Ryzen 9 9950X3D as an example because it’s a dual-CCD processor with two distinctly different CCDs since CCD 0 has 3D V-Cache and CCD1 is the highest binned available for Ryzen 9000.

I will walk you through the entire process and provide some notes and tips along the way. By the end of the blog post, I hope you’ll be able to do this for your own processor as well. Let’s get started!

What’s a V/F Curve?

If you’ve watched several of my videos or any other overclocking guides, you should be familiar with the term V/F curve. In case you haven’t: a V/F curve describes the relationship between an operating frequency and the voltage required to operate at that frequency.

Pretty much every modern SoC has a voltage-frequency curve though some are more advanced than others. AMD in particular uses a combination of lookup tables and adaptive clocking to match an operating frequency with a suitable operating voltage. The “adaptive” nature of the AMD clocking technology – marketed under the banner Precision Boost 2 – makes it more difficult to get a grip on the CPU’s V/F curve.

The simplest way of looking at the V/F curve would, of course, be if AMD would expose a CPU’s VFT table via the BIOS or software tool. Unfortunately, a CPU’s V/F curve is a closely guarded trade secret for many reasons and, thus, we’re left with the observation method to figure out the V/F curve.

AMD Precision Boost 2 Technology

AMD Precision Boost 2 is a technology that opportunistically increases the CPU performance based on the CPU temperature, current, and power headroom. Its magic is performed by the SMU or System Management Unit.

Each chip on a Ryzen CPU has an SMU, meaning there are 3 SMUs on a Ryzen 9000 CPU with 2 CCDs and 1 IOD. One of those SMUs will work as Master SMU, while the others work as Slave SMUs.

The SMU has a range of capabilities, including, most importantly, the ability to manage the CPU performance within the so-called infrastructure constraints. The infrastructure restricts the maximum operating limits on various metrics, including power draw, temperature, and voltage. We don’t have a comprehensive, confirmed list of metrics, though some are exposed to the end-user via the Precision Boost Overdrive overclocker’s toolkit and other AMD BIOS menus.

The point of explaining all this is to highlight that, when we try to capture the CPU V/F curve, we need to think of all the various ways the frequency may be adjusted by the SMU.

The nature of the highly adaptive AMD Precision Boost 2 algorithm is that the CPU operating frequency bounces around all the time, rarely sitting at the same frequency for more than a couple of seconds. This makes it challenging to reliably derive the CPU’s V/F curve.

Another roadblock is the voltage topology of a Ryzen desktop processor as a single voltage plane powers the cores in both CCDs. That means the effective voltage is determined by the V/F curves of each CCD, so it’s not easy to isolate the curve of each CCD.

However, we can use certain tools to simplify the process.

Ryzen 9000 V/F Curve: Process

Now that we understand V/F curves and Precision Boost, let’s get down to actually putting together the V/F curves. To do this, I rely on four important tools: LoopFmax, OCCT, HWiNFO, and Excel.

Shamino’s LoopFmax is a small tool that lets you automatically decrease the configured Precision Boost maximum allowed frequency (or Fmax) between +200 and -1000 every time interval. I typically use intervals of 10 seconds as it’s a good tradeoff between gathering sufficient data points and the duration of the data gathering.

OCCT Memory Test is one of the stress tests available in the OCCT software package. It’s designed to test system memory stability but it’s a great tool for compiling the V/F curve because it’s a really light all-core workload. That means it doesn’t heat up the processor or use too much power while having all cores running at the maximum allowed frequency.

HWiNFO is my preferred tool for system telemetry and it offers a simple way to log the data. The data captured by HWiNFO is the foundation for eventually building the V/F curves.

Microsoft Excel is a tool everyone knows and needs no introduction. I’ll use this to clean up the data and build the charts.

Data Gathering

Gathering the data is a pretty simple process for single-CCD Ryzen processors but, as I mentioned earlier, it is a bit trickier with multi-CCD processors due to the shared core voltage rail. By that, I refer to the Ryzen 9000 CPUs having a single voltage rail that powers the cores in both CCDs.

For the Ryzen 9 9950X3D, I want to isolate the V/F curve for each CCD. So, the first step is to go into the BIOS and disable the cores in the other CCD.

In the BIOS, go to the Advanced Menu and enter the AMD Overclocking submenu. Here, go into the Manual CPU Overclocking CPU Core Count Control submenu. If we want to only enable the 3D V-Cache CCD, we can go into the CCD 01 Bit Map Down Core Control submenu and modify all values to 0. Then, make sure to access Bit Map Down Core Apply Changes to save the configuration. This will cause the system to reboot.

In my experience, it’s always best to apply any Curve Optimizer settings after disabling the cores.

Now, we can go into the operating system and set up our system for V/F curve data capturing. Here’s what to pay attention to:

  1. OCCT Memory Test: set it to 10% and SSE instruction set to keep the load as low as possible.
  2. HWiNFO: make sure that all cores are loaded before starting logging as that will keep the data cleaner.
  3. LoopFmax: set Start Fmax to the default Fmax +200, End Fmax to the default Fmax minus 1000, and a reasonable interval period of 10 seconds.

Once all cores are loaded properly you can start the HWiNFO logging process and start the LoopFmax. Now it’s just a matter of waiting until the CPU has cycled through all Fmax steps.

Data Processing

Next, let’s open Excel and start processing the data. Here’s what we want to do:

First, we want to isolate the voltage and frequency data. Since I’m building a general V/F curve for the entire CCD I will treat all data from each CPU core equally. So, I use the Excel VSTACK function to put all VID and Core Clock data in a long column.

Next, we need to compile the V/F points. For this, I use a pivot table where each frequency point is mapped to an average voltage. Averaging out the voltage helps smooth out the V/F curve which makes it easier to visualize and compare.

As a final step, you might want to clean up some of the outlier data.

Now, you should have a VF table for each CCD matching a Core Clock with its operating voltage. All that’s left is to put this into a nice-looking graph.

Building the Charts

Putting together the graph is elementary Excel work so I won’t go too deep into the process. The only thing I want to mention is that I’m usually not making charts based on the pivot tables but build them manually because then it’s easy to add other V/F curves as well.

Ryzen 9000 V/F Curve: More Things

Hopefully, this guide can help you put together the V/F curve of your Ryzen processor. Of course, there are more things we can look into.

For example, you could compile the V/F curve of each core independently by enabling just a single core from the BIOS. Or you could compile the V/F curve with a different application to compare the V/F range in higher, more demanding workloads.

These are things I’ve also got on my to-do list so maybe I’ll get around it someday.

Ryzen 9000 V/F Curve: Outro

Alright, that’s it for this CheckPoint – let me know if you have any ideas in the comments below, and see you in the next one!

Leave A Comment