oops!
Well, actually after reading the user's manual from the motherboard, it's been figured out that the 2nd Discrete GPU is running at 4x, not 8x. Despite the mistake, we got that going for us, which is nice.
Please, take a look at the VFIO series, if you haven't already.
Hi Folks, continuing with the virtualization topic, taking advantage of the INTEL VT-D and the Fedora Linux, this time I am going to discuss the benefits of having a dual graphics card setup. Last time I wrote about it, I recommended that the Linux (as the host Operating System) should use the INTEGRATED GPU from my i7 6700K and passthrough the GTX 1070 at full PCI speed (16x). In other words, Fedora will use the Radeon 7950 as the primary dispplay, while the GTX 1070 will be handed over to the Windows VM.
It does not mean the Windows VM will have 2 GPUs available (which is possible, but this is not the post).
The issue with the initial configuration is that, when allocating all possible cores to the VM, its performance would bottleneck due to its CPU limitations.
Remember: we are talking about a 4-core, 8-thread CPU. Results from a RYZEN, THREADRIPPER and COFFEE LAKE CPUs may vary a lot from my 6700K.
I noticed a lot of stuttering when playing games like PUBG (both early access and test versions), RE7 and MGS V: Phantom Pain. So that's why I decided to try a dual GPU configuration and when benchmarking with Unigine Heaven/Valley, I barely noticed any difference in terms of framerate between the 2 configurations. In other words, running the GTX 1070 at 8x speed (or 16x) doesn't seem to be a game changer (no pun intended)...
I haven't noticed much difference when doing other tasks, like software developing with Microsoft Visual Studio and video editing with LightWorks.
The Machine
In terms of hardware, nothing much changed: my workstation still rocks an i7 6700K (at stock speeds), 32GB of DDR3 @ 1333 MHz, the motherboard is an ASUS Z170-P D3 (BIOS updated to 2201 official version) and a GEFORCE GTX 1070 Turbo from ASUS. Only this time, I installed my [g]old Sapphire Radeon 7950 in the first PCIe 3.0 slot, which makes both run at 8x now.
In the future I may delid the CPU and apply liquid metal, since a lot of people are getting amazing thermal results and therefore, better overall PC performance. Because the CPU is overloaded in the "single" GPU configuration, I have seen CPU temperatures going as high as 70C ~ 80C. And with that temperature range comes a lot of stuttering...
The Software
Well, in this department a lot has changed: I now have Fedora 27 running on the host side with the kernel 4.14.3-300, the guest windows update to the 1709 version and NVIDIA 388.59 drivers installed. The virtual machine configuration also needed to be changed, because the PCIe address of its dedicated GPU is not at 1:0.0 and 1:0.1 (it resides now at 5:0.0 and 5:0.1 in my configuration).
QEMU-KVM version was also upgraded, to version 2.10.1
It's really easy to find out where the GPU addresses from the 2nd PCIe slot, by going to the Linux terminal and listing the PCI devices with lspci -vnn command.




So, instead of using the first PCIe slot address (1:0.0 and 1:0.1), I edited the VM bash script to use the new address. Take a look below:
Because other configuration files don't include devices' PCIe addresses, only vendor IDs, just the script responsible for booting the VM up needed to be changed.
Synthetic Benchmarks
I ran Unigine Valley and Heaven on both APIs (OPENGL and DIRECTX) and both configurations. First, the valley and heaven results from the DUAL GPU configuration:




Compared to the benchmarks of the iGPU + 16x SINGLE GTX1070 GPU:




Well, the synthetic benchmarks won't tell us much, because Unigine does a pretty good job on testing only the GPU. However, when using the workstation in overall tasks, my impression is that the DUAL configuration runs a lot smoother.
For the benchmarks, the GTX 1070 clocked at 1911 MHz - 4004 MHz (core and memory). GPU temps went as high as 75 C.
Game Framerates
The games I have installed for testing FRAMERATE are PUBG (test servers), Resident Evil 7 - Not a Hero DLC, Metal Gear Solid V: The Phantom Pain (2015 GOTY for me) and The Witcher 3 (aka middle-age GTA). All games were tested at 1080p.
I used FRAPS to generate all the data used in the charts below.
Player Unknown's Battleground - Test Servers
For a multiplayer game though, that's where I saw some differences in performance: the games runs a lot smoother in a dual GPU configuration.


Metal Gear Solid 5 - The Phantom Pain
For this single player game, I haven't found so many differences between the 2 configurations. The FPS dropped as low as 40, but a consistent 60 FPS experience throughout the whole time. The mission I played to benchmark the game was the [Extreme] Code Talker.
I ended the game when my workstation as in single configuration, meaning I could enjoy the game very much.


The Witcher 3 - Wild Hunt



For the Witcher 3 though the results were unexpected: the dual configuration had quite a few FPS dips more than the single gpu configuration. I played the Final Trial Quest when benchmarking.


Resident Evil 7 - Not a Hero DLC



Again, I didn't see a lot of difference when playing a single player game in both configurations and the RE Engine is very optimized (so, a smooth gaming experience all along).


Conclusion
Even though in most platforms the use of 2 discrete GPUs makes the devices share the PCIe speed lane (8x, 8x) and therefore run at a speed lower than in a single discrete GPU (16x), the fact that the CPU is less overheaded with tasks makes the DUAL GPU configuration experience a lot better.
I have to remark I am using a relatively outdated hardware (i7 6700K with 4 cores), so results with other CPUs like Kaby Lake or Coffee Lake may vary a lot from what's being seen in this post. Well, I hope this material has some use for people out there.
Enjoy!