Build your own Ethereum Mining Rig, part 4: Optimization

Same hardware: before (top) and after (bottom) GPU BIOS mods. Click to enlarge.

This fourth installment of our Ethereum mining guide will focus on optimizing your rig’s performance via GPU clock speed and voltage setting tweaks to achieve maximum efficiency.

The tweaks that I outline in this article are applicable whether you’re using Linux or Windows. If you’re using the hardware that was recommended in the first part of this guide (or very similar hardware), you should expect to achieve Ether mining performance gains of 20-25%, compared to stock settings! At the same time, you’ll reduce power consumption by 10-15% (and consequently, lower GPU temperature and fan noise).

More speed for less power—how is that possible? Click “read more” to find out, in our mining performance optimization guide!

 Build an Ethereum Mining Rig, part 4: Optimization

Let’s get the bad news out of the way up front: achieving these levels of performance gain require flashing your GPU BIOS with custom replacements. Doing this incorrectly may leave you with a non-working GPU that can be difficult or (sometimes) impossible to restore to factory settings. The steps that I outline in my guide will show you how to minimize the risk that you end up with a bricked GPU, but always remember that messing around with BIOS settings can potentially result in unstable hardware.

Disclaimer: Installing a custom BIOS and/or changing factory clock speed & voltage settings on your graphics card(s) may cause system instability, may harm your hardware, and probably invalidates your warranty. I assume no responsibility for hardware damage if you choose to follow this guide!

With that said, I’ve flashed probably close to a hundred GPUs, and I haven’t destroyed any hardware yet. =) If you proceed, just make sure to follow the steps in order, don’t take any shortcuts, and stop if there is anything that you’re confused or unsure about.

What you’ll need

There are ways to create and flash custom BIOS mods to your GPUs without some of these things, but I believe this method is by far the most user-friendly:

  • A computer running Windows
    You’ll flash your GPUs with this computer. My mining rigs run Linux, but I keep a small/cheap SSD loaded with Windows 10 handy for testing/BIOS flashing purposes (I simply swap the SATA connector between disks when I want to switch OSes). Any version of Windows 7, 8, or 10 will work fine (note that you don’t have to activate Windows to install it). Or, you can simply temporarily move your GPUs to another computer running Windows to flash them.
  • ATIFlash / ATIWinFlash
    You can download the latest version of ATIFlash here (v2.74 at the time of this article). We’ll use this to read and write BIOS files to our GPU hardware.
  • Polaris BIOS editor
    You can download the latest version of Polaris BIOS editor here (v1.4.1 at the time of this article). We’ll use this to modify BIOS files.
  • ATI Pixel Clock Patcher
    You can download the latest version of ATI Pixel Clock Patcher here (v1.4.5 at the time of this article). We’ll need this to get AMD’s Windows driver to recognize a modded BIOS.
  • A Kill-a-Watt electricity usage monitor (or similar device)
    Not strictly required, but I highly recommend this—it’ll pay for itself! I have two of these and consider them invaluable in dialing in the performance of my mining rigs. When doing optimization tests, I often find that the last few percentage points of speed gain come at a much larger cost in power consumption (and thus, a decrease in overall profitability)—having an electricity monitor allows me to find the efficiency sweet spot between raw speed and electricity usage.
  • Some baseline information on each of your GPU’s factory performance to compare your modifications against. If you haven’t already, let each GPU run for 5+ of mining and record its speed, temperature/fan speed, and power consumption at the wall (assuming you have a Kill-a-Watt). This will be immensely useful later when trying to figure out if your mods are beneficial or not.

From this point on, I’m going to assume that you’re following directions on a Windows computer with the above software available, ideally with a Kill-a-Watt connected for testing. I’m also going to assume that you have a single GPU installed. If you have multiple GPUs, I highly recommend that you disconnect all but one, and work on them one at a time. All of the software does support multiple GPUs, but you’ll keep confusion and the potential for mistakes to a minimum by only connecting one video card at a time. The times that I’ve made mistakes with BIOS flashing, it has always been because I flashed the wrong card due to having multiple GPUs connected!

Step 1: Make a backup of your factory GPU BIOS

Saving your GPU BIOS with ATIWinFlashBefore we start, open your Radeon Settings and disable any overclocking/undervolting that you have set up through WattMan (if you followed my Windows setup guide, you’ll need to temporarily disable the “EthDcrMiner64” profile that you created in step 12). After that:

  • Open ATIWinFlash (extract the .zip file you downloaded and double-click ATIWinflash.exe).
  • You should see your GPU detected at the top under “System Video Devices”. Again, I highly recommend that you have only a single GPU connected for this entire process!
  • Click “Save” to make a backup of your GPU’s BIOS data. Don’t lose this file!

Your computer might appear to freeze for a few seconds while your GPU BIOS data is being saved—this is normal. When ATIWinFlash is done, you can close it for now.

Step 2: Open your GPU’s factory BIOS with Polaris BIOS editor

Here is where we’re going to be making all of our modifications. Editing the BIOS data gives us access to a few values that we normally wouldn’t have any control over—most importantly, the memory timing values.

  • Open Polaris BIOS Editor (extract the .zip file you downloaded and double-click PolarisBiosEditor.exe).
  • Click “OPEN BIOS” in the top left, then browse to where you saved your GPU’s factory BIOS in step 1, and double-click it to open it.

You should see something like the image below (click for full-size). I’ve highlighted the areas that we’ll be modifying in blue—if you stick to these areas, you’ll generally be safe from getting yourself into too much trouble, as the GPU doesn’t enter these states until it’s mining or otherwise working hard. Note that the first entries in the “GPU” and “Memory” section are outside of the blue area and should never be touched unless you absolutely know what you’re doing. Likewise, the memory timings at 1500mhz and below should usually be left at default settings.

Factory BIOS in Polaris BIOS editor
My screenshot shows the default BIOS from an Asus 1650mhz factory-clocked RX 470 4GB GPU. If you have a 4GB RX 470, it should look pretty similar, although many of the values will likely differ by a small amount. At these factory settings, I get around 20 Mh/s in Claymore’s Ethereum miner, which isn’t spectacular.

If you don’t see memory timing values for your card, try this version of Polaris instead (click the “clone or download” button, then “Download ZIP”).

When you’re comfortable, let’s move on and start modifying some values.

Step 3: Modify BIOS memory timing values

At this point, you should still have Polaris BIOS editor open, with your GPU’s factory default BIOS loaded. We’re going to focus on the lower-right corner area containing memory timings.

If you have a RX 470/480 that has memory clocked at 1750mhz or less (eg: most 4GB cards), you may have noticed that it’s really easy to overclock past 1750mhz via the driver (in Windows, anyway). You probably also noticed that mining performance immediately tanks as soon as you do so: a 1751mhz overclock results in much slower performance than 1750mhz. You may have wondered why, and these memory timings are the answer. On most 4GB cards, the GPU switches over to less aggressive memory timings at clock speeds beyond 1750mhz, which results in slower performance even though the absolute clock speed is higher. We’re aiming to fix that.

This isn’t an exact science, and some experimentation may be necessary for you to achieve optimal results, but what follows is a good starting point and should work for 99% of you:

  • If you have a RX 470/480 that is factory clocked at 1750Mhz or less (eg: nearly all 4GB cards):
    Copy the value in the 1500Mhz field, and then paste it into all of the fields after it (1625mhz, 1750mhz, 2000mhz). The easiest way to do this is to click anywhere inside the 1500mhz value, then press CTRL+A to highlight the entire string, and then press CTRL+C to copy it. Then you can simply click into the remaining fields and press CTRL+A followed by CTRL+V to paste over the existing value.
  • If you have a RX 470/480 that is factory clocked at 2000Mhz or more (eg: nearly all 8GB cards):
    This is a bit trickier, but generally most cards will be most stable by simply copying the value in the 1750mhz field into the 2000mhz field. The easiest way to do this is to click anywhere inside the 1750mhz value, then press CTRL+A to highlight the entire string, and then press CTRL+C to copy it. Then you can simply click into the 2000mhz field and press CTRL+A followed by CTRL+V to paste over the existing value.

Once you’ve made the edit that is appropriate for your GPU, click on the “SAVE AS” button located at the top left. Save your modded BIOS with a new name (don’t overwrite your factory BIOS!), and then close the Polaris editor when you’re done.

Step 4: Flash your modified BIOS back to your GPU

Flashing your GPU BIOS with ATIWinFlashNow it’s time to write your custom BIOS back to your hardware. This can be a little scary if you’ve never attempted anything like this before, but generally if you’ve followed the steps as written, you shouldn’t have any issues. Again, there are no absolute guarantees, so proceed at your own risk!

  • Open ATIWinFlash back up.
  • Click on the “Load Image” button and select the modded BIOS that you created in step 3.
  • Click on the “Program” button to write the BIOS to your GPU. Your computer may appear to freeze for what might seem like a long time—this is normal.
  • You’ll be prompted to reboot when ATIWinFlash finishes. Don’t reboot yet—we have one more thing to do. Go ahead and close ATIWinFlash, though.
  • Unzip the ATI Pixel Clock Patcher utility that you downloaded and double-click atikmdag-patcher.exe. It should offer to apply a patch, let it. You only need to do this step once per GPU, even if you flash it multiple times. If you skip this step, when your computer reboots, the AMD display driver will refuse to load because it’ll detect that your GPU BIOS has been tampered with it.
  • Go ahead and reboot after the patch is applied.

If you’ve done everything correctly, your computer should boot normally, and you’ll arrive back at the Windows desktop, ready to test your changes.

Step 5: Test your modified GPU BIOS

Now is a great time to fire up your miner and see what kind of difference your changes made.

If you have a 4GB card, the timing change alone should be enough to get you from ~20 Mh/s to ~24 Mh/s. If you have a 8GB card, you likely went from ~24 Mh/s to ~28 Mh/s. We can do better, but that’s a pretty good start!

Power consumption will be unchanged (or even up slightly, due to the more aggressive timings), but we haven’t touched voltages yet.

Once you’ve recorded your GPU’s new metrics (speed, temperature/fan speed, power usage), we can move on.

Step 6: Find appropriate clock speed and voltage values for your GPU

Before we head back into Polaris BIOS editor to increase memory clock speed settings, it’s a good idea to have an idea of how high we can push them. It’s a lot easier (and faster) to make these tweaks in Windows via the driver (Radeon Settings/WattMan), and then once we’re confident on the proper values, write them to BIOS.

So if you haven’t already, read step 12 of my Windows guide to get an idea of the process around overclocking and undervolting via driver-level edits. If you’ve already gone through the process, you’ll need to repeat it, as your new more-aggressive memory timings invalidate all of your previous data—you won’t be able to push the memory clock speed as high as you previously could (but performance will be much better).

Using Radeon Settings/WattMan in the manner that I describe in my Windows guide:

  • Increase memory clock speed slowly until you see signs of system instability (incorrect share warnings in your miner, artifacts on screen, crashes)
  • Decrease core clock speed slowly until it starts to significantly negatively impact performance
  • Decrease memory voltage slowly until you see signs of instability (you may not be able to significantly lower memory voltage, depending on your card)
  • Decrease core voltage slowly until you see signs of instability

Don’t rush; make sure that your system is stable before moving on. It’s possible to reach speeds of nearly 29 Mh/s with 4GB cards, or over 31 Mh/s with 8GB cards, but watch out for power consumption and stability issues—it’s not always worth running at higher speeds. I’ve found that 25-26Mh/s for 4GB cards, and 27-29Mh/s for 8GB cards is right around the sweet spot for maximum efficiency and stability. When you feel confident that you have good clock speed and voltage values, then move on to the next step where we’ll write them to the BIOS.

Step 7: Write new clock speed and voltage values to GPU BIOS

Note that this step is not strictly necessary if you plan to use Windows for your miners long-term. You can certainly just dial in whatever values you found in the previous step at the driver/WattMan level and call it a day. I prefer to have everything done at the BIOS level, as then I don’t have to worry about software configuration, and can move GPUs between environments with ease.

If you’re running Linux, this is the only way (currently, at least) to overclock and undervolt.

  • Open Polaris BIOS Editor back up.
  • Load the modified BIOS that you created in step 3 (click “OPEN BIOS” in the top left and browse for your modded .rom file).
  • In the “Memory” area, carefully input your values for memory clock speed and voltage in the bottom row.
  • In the “GPU” area, carefully input your values for core clock speed and voltage in the bottom row. You’ll probably be overwriting a 65xxx value in the voltage column—that’s ok.
  • Still in the “GPU” area, fill in the table between the bottom row and the first row (but do not touch the first row!) with values that ramp up to whatever you entered in the bottom row. It isn’t super important to get these values “right”; you can look at the original table and see what percentage adjacent rows vary by, and just calculate new values that way.

Here is my finished, modded BIOS for my Asus RX 470 4GB (click for full size):

Factory BIOS in Polaris BIOS editor

The original factory BIOS is shown in step 2 for reference. Note that I’ve made absolutely no edits outside of the area I originally outlined in blue. I get over 25 Mh/s after the modifications (+25%), while using ~15% less power compared to stock. These changes are fairly conservative; I’m stable at nearly 27 Mh/s on this card with more aggressive settings, but the increase in power consumption isn’t worth it at my electricity rate.

If you’re looking for a good starting point, the settings pictured here should be stable in just about every 4GB card (in the timings section, just copy the 1500mhz value to every row below it).

When you’re done making your edits in Polaris, save your final BIOS (click “SAVE AS”) as a new file. Then open up ATIWinFlash and write the new .rom to your GPU (same as step 4). Reboot and test!

Step 8: Repeat steps 1-7 for each of your remaining GPUs

Yes, it’s a little tedious. But it goes quite a bit faster after your first one. Don’t be tempted to simply take the first BIOS that you create, and flash that to all of your other cards—every GPU is different, even between cards that are the same brand/model. It’s quite possible (likely, even, if you have a lot) that some of your cards will be capable of stable speeds 25+ mhz higher than others. Test them all; it’ll save you headaches later.

Analyzing the cost/benefit of different setups

If you’re stuck on whether or not an extra 1-2 Mh/s is worth 25 watts of additional power consumption, remember that you can use an online calculator to help simplify things. For example, here is a GPU hashing at 25 Mh/s @ 100 watts vs another GPU at 26 Mh/s @ 125 watts (assuming $0.15 per kWh, remember to plug in your own rate!). At the time that this was written, the slower GPU is slightly more profitable.

BIOS mods: before and after comparison

My test rig, running two RX 470 4GB cards, and one RX 480 8GB card, mining ETH in Linux. Top is stock factory settings, bottom is after BIOS mods outlined in this guide. From 65 to 80 Mh/s, using 70 watts less power!

 

In the next and final installment of this Ethereum mining guide, I’ll post a mining FAQ and some other tidbits that didn’t quite fit anywhere else. Until then, thanks for reading, and feel free to leave questions or comments!

99 Responses to Build your own Ethereum Mining Rig, part 4: Optimization

  1. Flakmunki says:

    Hi,

    Have a MSI twin frozr 280x and after backing up my bios with the ATI tool, i open it in polaris and it says the bios is smaller than 512 and cannot be edited and when i continue, all the values in the various blocks are jumbled rubbish?

    Bios rom is 256kb big.

    Any ideas????

    • Liggy says:

      Suspect you may be using wrong polaris BIOS editor. There is at least 2 types that I know of, perhaps more, I needed to use the Micron memory one for my GPU and that opened the BIOS file just fine with no corruption.

      If its not that you could try exporting Bios from GPU-z instead?

  2. Nathan says:

    I used your settings on my RX470 (4GB) and now it refuses to boot. I get the windows logo for a few seconds and then vertical lines on the screen. Is there any way for me to recover the card or is it basically trash? Thank you.

    • Liggy says:

      Hi Nathan

      I was messing about with Bios settings on a sapphire Rx470 OC 8GB with Micron mem and basically did exactly this!

      Simple fix I found (which was easier than I was expecting it to be), was to boot into safe mode, open device manager and remove your RX470 display adapter from the list of devices.

      If you now reboot windows again normally the drivers for high clock/mem speeds wont even be loaded so you can then get back into windows normally again and then reflash the bios and start again.

      Hope this helps 🙂

  3. Wiz says:

    Hi! First I want to thank you for the incredible detail and effort you’ve put into making these guides.

    I have a machine running multiple AMD RX560s. Yesterday I successfully followed your instructions to get one of my 560s reflashed and running at higher speeds. I didnt have the time to reflash all cards tho, so I started to go through the process of installing all my cards again. Basically when I added a second card (non-flashed), it caused my first card (flashed) to fail.

    Have you encountered this before, and any advice on resolving it?

    Thanks!

  4. Chris says:

    Changing mv on bios os not possibile for almost every RX card. You see 100W power consumption because power controller put low mv for low MHz core. You can do 80W with lower mv for 8GB 28MH, 4GB 27MH.

  5. Guido says:

    Hi,

    Perfect guide, thank you.

    I was wondering if you can see if something else is going on that crashes the videocard, as my memory overclock is not that high (4.5%)?

    I have a Sapphire Radeon RX 480 NITRO+ 8G OC, with 2000 MHz stock memory frequency and 1342 stock GPU clock, and followed your guide. I copied the 1750 timing into the 2000 field, even though the 1625 was different from the 1750 field I didn’t use that (is it still an option though?). Runs smooth.
    Then I downed the GPU clock, runs stable. Then upped the memory clock a little, and when I believe it was stable, I undervolted some.
    However, only after 10 hours the videocard crashes.

    Could you see why? Exact settings, as well as the HWInfo log, in the link below. Suddenly millions of GPU errors, as well as a weird D3D usage of 63%, as well as changed VRM voltage&current change.

    Thanks, Guido

    https://drive.google.com/file/d/0B00UcxG4FiDIemNBaHBQZlduLTg/view?usp=sharing

  6. Carlos says:

    I’m interesting on values to OC a RX580 and a GTX 1080TI that I’m testing. For me is not important power consumption

  7. Gonza says:

    Hey Crypto, what do you think of MSI Afterburner instead of the Radeon Drivers for tweaking before doing the final flash?

  8. Gimli says:

    Hi, not too long ago read about the hashrate of RX series will drop some 10-15% at every major #dag epoch.

    Will flashing of bios solve this problem? Looking into getting RX series card, but not sure whether newer versions / older versions make any difference or not.

  9. PeterPants says:

    Simple question. I have a card I modded the bios per this guide. I have the original bios, if I flash back to the original will I still need to use the bios patcher? In other words can I return the card back to normal or will I have to use the patcher every time I update the drivers? Thanks

  10. maghan437 says:

    hi will this work on a r9 390 & r9 380?

  11. Guido says:

    Hello, I would like to share an issue and how I resolved it.

    Im on Sapphire Nitro+ RX480 8GB OC and Windows 10 64bit, if that matters.

    Scenario is like this:
    1- PC while mining crashed or something. When I returned to it, the machine was off
    2- After booting up, I saw an update ready for Radeon, which I installed.
    3- After rebooting, clicking the Radeon icon in taskbar kept saying there was somethign wrong with the AMD Display Driver.
    Device Manager showed RX480, but displayed as there was a problem with it; the well known error code 43, with detailed error 0000002B.

    I tried everything to resolve this; clean driver uninstall in safe mode, a multitude of Radeon driver versions, physically reconnected the graphics card, and even a Windows Restore (but I did not have restore point before the issues started).

    In the end, what fixed it was:
    >>> Run ATI Pixel Clock Patcher again and reboot, as described in step 4 <<<

  12. juan says:

    hi
    i do everything as indicated
    but i have the problema everything is 0, and computer dont recognize

    i thing is the amd sign drivers or something like that, y tried to reinstall de drivers, i run more tan 1 time the ATI Pixel Clock Patcher
    and it didnt work

    i have to load the original bios and it again work but at 20 mhs

    can you help me with it?

    what i have to do

    • Guido says:

      I am a newbie, but I would say; try to change less settings in the BIOS. For example, if there is 1500 1750 and 2000 Mhz timing settings and you copied 1500 into the 1750 and 2000, try to keep the 1500 setting as-is and only copy the 1750 field into the 2000 field.

      Let us know what happens (via the Reply button)

  13. notlesh says:

    Do you find that undervolting memory helps? I would be surprised if it’s significant compared to GPU core speed.

  14. Guido Z says:

    I have 5 Asus Hynix RX 470 4G, 2 XFX Samsung RX 470 4G and 1 Gigabyte gaming g1 Hynix RX 470 4G.
    All of them with wattaman settings config are able to mine at 25mh/s and ~80w of power cost.
    If I modify the BIOS, undervolting is apparentely not working, (I tried to set fixed values such as 950, but I think it needs another kind of values, e.g. 6XXXX)
    And this is the windows behavior.
    If I use any of them except the gigabyte one, none of the BIOS changes are working. (All GPUS mine at 20mh/s and ~100w)

  15. Marius says:

    Great guide.
    In your next section, could you please cover security and networking/lan configuration for these mining rigs.

    How do we protect it from hacking etc?
    What ports are required on the firewall?
    Do we need to separate mining rigs from home LAN with subnet/IP range ?
    Is Wifi good enough or should it be hardwired to the router?
    What is the data traffic like?
    Is a separate broadband connection required?
    Do you need to backup anything?

  16. robert says:

    There are many other resources for networking and security.

    Security on a mining rig is no different than that of your PC at home. We assume you are behind your router’s firewall at the minimum.

    No ports need to be opened. You can create a separate subnet if you want to. Wifi is OK for a few rigs but if you have more than 3-5, you should think about something else.

    If you don’t have broadband with at least 128k up/down, then don’t bother.

  17. AussieBen says:

    Wow. Same make GPUs having different figures is the understatement of the year. I purchased 4x (8GB Nitro 580s) cards of same make and model, same location at same time with in line serial numbers. First one couldn’t get anything stable over 2100 mclock, ended up at 29.800MH/s best config at 85-90w. Unboxed the 2nd card and went incrementally straight to 2250 mclock and could end up optimising at 30.900mh/s at around 90-95w. I new it would be different but didn’t think it would be this much. How can it differ this much when they are mass produced in a factory?

    I have a question. I always get around 5% lower on mining with DAG stuff over the “-benchmark -1” option when fine tuning. I am wondering if this is because I’m in Australia and need to use overseas servers with 300-600ms DAG times. Can anyone else test this for me? For example, someone that lives in the US and connects to a US server with sub 30ms or whatnot DAG times? Can you give me the benchmarked MH/s and actual MH/s differences you get?

    Looking forward to optimizing the next two cards.

    Sub yeah, I would definitely not use the same .rom for all cards of the same model. And if you use someone else’s .rom then definitely tweak it for your card specifically. There isn’t any shortcuts for this. It’s quite time consuming.

    Cheers.

    • Robert T says:

      when I try it, the benchmark sets up for epoch #136.
      when I mine for real, claymore setup for for epoch #139 and the hash rate is like 0.03 slower. This is based on a small sample, so can’t know for sure. I am using AMD DAG beta fix

      However Each epoch gets more difficult, so the hash rate slowly decreases.

      And if you are not using the new AMD DAG Epoch fix, the hash rates will be much greater.

      • Robert T says:

        Sorry, I meant hashrate differences between the two epochs will be greater if you do not install the AMD driver (assuming you have an AMD card).

  18. Felix says:

    hello Crypto Badger or anyone who can help,
    I have a rx 580 8gb. Can I follow the instructions for the Rx 480 8gb will that work?

Leave a Reply

Your email address will not be published.