Popular Post CMMChris Posted April 17, 2020 Popular Post Share Posted April 17, 2020 (edited) Hello everyone! Together with the help of @DSM2 I built a Kext aiming at removing limitations put in place by Apple for PC graphics cards that reduce performance in some benchmarks like Geekbench and some scenarios where memory bandwidth is crucial. Likely most of you already know the issue that some GPUs don't perform as expected in Geekbench. For example, a Radeon VII only scores around 50k to 60k points while on Windows it can easily reach the 82k range - with overclocking even more. This issue is not only affecting the Radeon VII but numerous other graphics cards as well. This problem started back when macOS 10.14.5 Mojave was released, introducing the fix for fan control on Vega 56 / 64 cards. As it turns out, Apple never fixed the fan issues but instead put a dirty workaround in place. Modern AMD GPUs utilize a so-called SMU firmware to manage some of the cards functions. This SMU firmware needs to be uploaded by the graphics driver. It looks like the Vega 56 / 64 fan control bug was caused by a faulty SMU firmware implementation by Apple. Instead of fixing it, all they did was to disable loading of SMU firmware on PC graphics cards. This can be verified by force loading the SMU firmware again on Vega 56 / 64 cards. The fan control bug will then be back. Not loading SMU firmware causes a number of issues and one of them is memory bandwidth being cut in half. Since Geekbench is very sensitive to memory bandwidth, this is what causes the low scores. So essentially, Apple scammed their customers here, putting a dirty fix in place that now affects a large amount of graphics cards. And of course this not only affects hackintosh users but also Mac Pro users or eGPU users, utilizing PC graphics cards on their Mac. Now this is where my RadeonBoost Kext comes in. It makes sure that SMU firmware is loaded again, removing the memory bandwidth limitations, making sure the GPU can be used to its fullest potential. The results really speak for themselves. Demo of the result: Spoiler Radeon VII Geekbench Metal (1st with Radeon Boost, 2nd without) Radeon VII Geekbench OpenCL (1st with Radeon Boost, 2nd without) RadeonBoost.kext has been built with Hackintosh users in mind, but of course it does work on a real Mac as well. That includes both Mac Pros as well as Macs with an eGPU. You can either inject the kext via OpenCore or put it into /Library/Extensions, repair permissions and rebuild kext cache. Putting it inside /L/E of course requires SIP (System Integrity Protection) to be disabled since the Kext is not signed. Of course you can go ahead and edit the info.plist of RadeonBoost.kext to your likings. For example you can add your own properties. This comes handy if you want to additionally overclock or undervolt your GPU by using a PowerPlay Table, which of course can be added to the Kext as well. On a Hackintosh you of course can keep injecting them through the bootloader without having to edit the kext. List of supported GPUs: RX480, RX580, RX590 (!!! USE ALONG WHATEVERGREEN !!!) Radeon VII, RX 5500, RX 5500 XT, RX 5600, RX 5700, RX 5700 XT (WHATEVERGREEN NOT NECESSARY) Download & Changelog May 28 2020: V1.6 - Disabled SMU Firmware Loading for Navi10/14 due to broken SMU firmware starting from macOS 10.15.5, improved Polaris compatibility April 24 2020: V1.4 - Added target SMBIOSes for AGPM injector to prevent overriding of stock AGPM configuration on SMBIOSes that don't need an AGPM injector (e.g. iMac19,1 etc) April 20 2020: V1.3 Replaced "ATY,EFIVersion" with "ForceLoadFalconSmuFirmware" (thanks to Whatevergreen developers for discovery of this parameter), changed Polaris properties (RX480, 580, 590 users please re-test), removed Apple framebuffer properties (performance difference is minor) April 19 2020: V1.2 Removed support for Vega 56, Vega 64 and Vega Frontier (REASON) April 19 2020: V1.1 Removed unnecessary device properties, added embedded AGPM injector for SMBIOSes where it makes sense (iMacPro1,1; MacPro7,1; MacPro5,1; MacPro4,1) April 17 2020: V1.0 Initial Public Release For download of RadeonBoost.kext please check this posts attachements. Enjoy! RadeonBoost.kext.zip Edited May 28, 2020 by CMMChris 18 10 1 Link to comment Share on other sites More sharing options...
Pavo Posted April 17, 2020 Share Posted April 17, 2020 Awesome concept but one question, why are you using AppleUSBMergeNub as the IOClass for injection? Shouldn't that be on the AMD10000Controller IOClass. 1 Link to comment Share on other sites More sharing options...
CMMChris Posted April 17, 2020 Author Share Posted April 17, 2020 Because I can merge properties with it. Easiest way to get the job done. There are other kexts as well that use MergeNub for that purpose. Link to comment Share on other sites More sharing options...
Simonej Posted April 18, 2020 Share Posted April 18, 2020 Hi CMMChris, thanks for sharing! Few questions please, could you give some advice to add RX560 and RX570? Is it compatible with AGPMInjector? 1 Link to comment Share on other sites More sharing options...
startergo Posted April 18, 2020 Share Posted April 18, 2020 1 hour ago, Simonej said: Hi CMMChris, thanks for sharing! Few questions please, could you give some advice to add RX560 and RX570? Is it compatible with AGPMInjector? It should be, cause it works on my RX-480. Link to comment Share on other sites More sharing options...
Pavo Posted April 18, 2020 Share Posted April 18, 2020 7 hours ago, CMMChris said: Because I can merge properties with it. Easiest way to get the job done. There are other kexts as well that use MergeNub for that purpose. Would you mind if I added this to AGPMInjector? 2 Link to comment Share on other sites More sharing options...
DocXavier Posted April 18, 2020 Share Posted April 18, 2020 Hi CMMChris, many thanks! It works on my RX460 Link to comment Share on other sites More sharing options...
CMMChris Posted April 18, 2020 Author Share Posted April 18, 2020 (edited) 5 hours ago, Pavo said: Would you mind if I added this to AGPMInjector? You mean the additional device properties for each GPU I use in my kext? Better wait until this one is finished. There are some reported issues I have to deal with. For some reason it doesn't work with an eGPU right now and Navi14 support appears to be broken at the moment. 17 minutes ago, DocXavier said: Hi CMMChris, many thanks! It works on my RX460 Unlikely, the Kext doesn't contain the RX460 device id. 6 hours ago, Simonej said: Is it compatible with AGPMInjector? It's just injecting device properties so it shouldn't be interfering with anything else. Edited April 18, 2020 by CMMChris 1 Link to comment Share on other sites More sharing options...
DocXavier Posted April 18, 2020 Share Posted April 18, 2020 9 minutes ago, CMMChris said: Unlikely, the Kext doesn't contain the RX460 device id. Ops ... It was a false test with Geekbench¡¡ I made it just before installing your kext with a result of 11k aprox. Restart, test again and 21k ... because of that I thought the kext was working, sorry ... I have tried right now disabling the kext, and result was 21k ... It would be possible to ad RX460 device? Anyway, many thanks¡¡ Link to comment Share on other sites More sharing options...
r!ppz Posted April 18, 2020 Share Posted April 18, 2020 Does this also improve gaming performance or only compute? Link to comment Share on other sites More sharing options...
kushwavez Posted April 18, 2020 Share Posted April 18, 2020 Nice! Thanks for this very user friendly method of tweaking. macOS 10.15.4 - ASUS RX 5700, kext put to Clover/kexts/Other Before: OpenCL: 43361 Metal: 38024 After: OpenCL: 53861 Metal: 59954 On Windows OpenCL is 64951 so it is a nice improvement indeed! @r!ppz No, it does not improve gaming performance. Most games are performing bad on macOS because of the bad implementation of the graphics API (most games are using an outdated OpenGL API, not Metal, for ex. CSGO is horrible with 130 FPS on macOS, 250+ on Windows). Unfortunately only developers could improve the performance by tweaking their games to perform better. Link to comment Share on other sites More sharing options...
r!ppz Posted April 18, 2020 Share Posted April 18, 2020 (edited) What about Metal games like World of Warcraft? Edited April 18, 2020 by r!ppz 1 Link to comment Share on other sites More sharing options...
Regi Yassin Posted April 18, 2020 Share Posted April 18, 2020 Sapphire RX580 with or without this injector kext still the same result (I think), no significant improvements. GB 5 with kext Metal 48442 OpenCL 41336 ---------------- without kext Metal 47908 OpenCL 40838 Link to comment Share on other sites More sharing options...
nmano Posted April 18, 2020 Share Posted April 18, 2020 I just test with OpenCore AMD Radeon RX Vega 64 Compute Engine 1 Link to comment Share on other sites More sharing options...
kushwavez Posted April 18, 2020 Share Posted April 18, 2020 10 minutes ago, r!ppz said: What about Metal games like World of Warcraft? If I guess correctly (from your signature) you are using an RX 5700 XT. In wow your GPU will never be on 100% utilisation because the game itself is not that demanding. So you might see no difference with/without the kext, but of course you can try and correct me if I'm wrong. If there is a game that could maximise GPU utilisation, that might see a little FPS increase. I tried Unigine Valley bench (OpenGL), ended up with 93 avg. FPS with and without kexts. in Borderlands 2 (which is using Metal) avg. FPS was ~180 FPS with/without the kext. CSGO (OpenGL) is the same with ~120 FPS Link to comment Share on other sites More sharing options...
r!ppz Posted April 18, 2020 Share Posted April 18, 2020 I am GPU limited in WoW cause of my 5k display. I play at 50% render resolution. Link to comment Share on other sites More sharing options...
kushwavez Posted April 18, 2020 Share Posted April 18, 2020 1 minute ago, r!ppz said: I am GPU limited in WoW cause of my 5k display. I play at 50% render resolution. In that fact you might see a little increase in my opinion, try it and let us know! Link to comment Share on other sites More sharing options...
r!ppz Posted April 18, 2020 Share Posted April 18, 2020 1 minute ago, kushwavez said: In that fact you might see a little increase in my opinion, try it and let us know! I cranked up to 100% render scale. It can sustain 60fps now in crowded areas. However, that card gets so loud. Never heard it that loud before lol. Link to comment Share on other sites More sharing options...
kushwavez Posted April 18, 2020 Share Posted April 18, 2020 11 minutes ago, r!ppz said: I cranked up to 100% render scale. It can sustain 60fps now in crowded areas. However, that card gets so loud. Never heard it that loud before lol. I think it's just because now the game can utilise more power, and the fans will ramp up to stay the card cool (note: macOS and Windows using different profiles for fan controlling). Link to comment Share on other sites More sharing options...
damhamaza Posted April 18, 2020 Share Posted April 18, 2020 Its working!. My GPU is RX5700 but im using XT vBios. 1 Link to comment Share on other sites More sharing options...
LAbyOne Posted April 18, 2020 Share Posted April 18, 2020 hi @CMMChris Do you think this will also work (be needed) with my old card? or its just something for more recent cards 1st spec in sign Link to comment Share on other sites More sharing options...
CMMChris Posted April 18, 2020 Author Share Posted April 18, 2020 Only the cards listed are supported now. Link to comment Share on other sites More sharing options...
moozuki Posted April 18, 2020 Share Posted April 18, 2020 Gigabyte RX580 Gaming 8 GB Before: Metal Opencl 53159 32944 After: Metal Opencl 52931 33168 Windows: Vulcan Opencl 54364 47046 Link to comment Share on other sites More sharing options...
CMMChris Posted April 19, 2020 Author Share Posted April 19, 2020 New version 1.2 added in first post. Vega10 support has been removed (Vega 56, Vega 64, Vega Frontier). Reason: People have observed fan control being broken when using this kext like it was the case prior to the release of macOS 10.14.5 Mojave. You remember? 10.14.5 was the macOS release that fixed the fan issues with Vega 56, 64 and Frontier cards. But you might also remember that exactly with this release the Geekbench scores have become lower as well. Thanks to the developers of Whatevergreen we now know that Apple disabled the loading of the SMU Firmware to PC graphics cards with this release of macOS. macOS does now check for the device property "ATY,EFIVersion" before uploading the SMU firmware to the graphics card. Adding it back causes the SMU firmware to be loaded again and is the main reason for the increase in Geekbench scores. Anyhow, it also causes the Vega10 fan bug to come back. It really looks like Apple never fixed the Vega10 fan control issues which apparently are caused by a bug inside the SMU firmware. So they simply did a dirty hack, disabling the firmware for all PC cards and thus essentially crippling them in some way. Since I cannot fix this issue and a silent card is more important than Geekbench scores, I decided to drop Vega10 support for RadeonBoost. If you are pissed about the way Apple does handle bug fixing these days, open bug reports about this issue. 2 Link to comment Share on other sites More sharing options...
Pavo Posted April 19, 2020 Share Posted April 19, 2020 15 minutes ago, CMMChris said: New version 1.2 added in first post. Vega10 support has been removed (Vega 56, Vega 64, Vega Frontier). Reason: People have observed fan control being broken when using this kext like it was the case prior to the release of macOS 10.14.5 Mojave. You remember? 10.14.5 was the macOS release that fixed the fan issues with Vega 56, 64 and Frontier cards. But you might also remember that exactly with this release the Geekbench scores have become lower as well. Thanks to the developers of Whatevergreen we now know that Apple disabled the loading of the SMU Firmware to PC graphics cards with this release of macOS. macOS does now check for the device property "ATY,EFIVersion" before uploading the SMU firmware to the graphics card. Adding it back causes the SMU firmware to be loaded again and is the main reason for the increase in Geekbench scores. Anyhow, it also causes the Vega10 fan bug to come back. It really looks like Apple never fixed the Vega10 fan control issues which apparently are caused by a bug inside the SMU firmware. So they simply did a dirty hack, disabling the firmware for all PC cards and thus essentially crippling them in some way. Since I cannot fix this issue and a silent card is more important than Geekbench scores, I decided to drop Vega10 support for RadeonBoost. If you are pissed about the way Apple does handle bug fixing these days, open bug reports about this issue. You can add PowerPlayTable to the Vega 10 section of the kext and it fixes the fan issue. Confirmed working from 2 users 2 Link to comment Share on other sites More sharing options...
Recommended Posts