Weather Refresh
Oops, No Weather For Now!
Information

Hi, this is Guilherme Suzuki speaking! I'm 34 years old and have been working with information technology since 2003.

Specialized in Microsoft programming languages and tools, I'm also very fond of the Linux world, having worked in projects involving the platform.

I really hope you enjoy this new website and its content, not only IT-related stuff.

+1 (647) 781 7390

KVM + VFIO + Intel VT-d: Dual Graphics Cards [16x, 4x] vs iGPU + GTX1070 [16x]

In this post I go into a different configuration for the KVM + PCI passthrough, using DUAL graphics cards (16x, 4x), instead of the iGPU + GTX1070 (at 16x).
  • KVM + VFIO + Intel VT-d: Dual Graphics Cards [16x, 4x] vs iGPU + GTX1070 [16x]

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 first GPU will be used by Fedora, the second one will be given to the Windows VM

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.

Dual configuration: is it worth the PCIe speed downgrade?

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.

the Radeon 7950 will be the Primary GPU for Fedora
the Radeon 7950 will be the Primary GPU for Fedora
5:0.0 - This is the new address to be used in the VM
5:0.1 - This is the new address to be used in the VM

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:

Valley - DirectX11
Valley - OpenGL
Heaven - DirectX11
Heaven - OpenGL

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

High to Ultra Settings for the PUBG

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.

PUBG Test Servers: Dual GPU
PUBG Test Servers: Single GPU

Metal Gear Solid 5 - The Phantom Pain

High Settings for the Game

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.

MGSV - TPP: Dual GPU
MGSV - TPP: Single GPU

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.

Witcher 3: Dual GPU
Witcher 3: Single GPU

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).

RE7 - Not a Hero DLC: Dual GPU Configuration
RE7 - Not a Hero DLC: Single GPU configuration

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!