RemoteFX (with Hyper-V) is a serious business tool. For games.
My downstairs PC (on the dining room table) is an HP Touchsmart all-in-one Core 2 Duo Intel Integrated Graphics 965-based box, which makes it absolutely abominable for games.
Upstairs, my internet connection plugs into my Hyper-V host (actually, a TMG instance on it), and I’ve a sort-of-gaming PC set up next to that, which has a nice video card, and chair, and half-assembled steering wheel.
I’ve GigE running all over the place.
Back to the downstairs PC, though: I once tried Borderlands on it, and at the lowest settings, I could’ve made a faster PowerPoint deck. Pretty sure my WP7 phone has more 3D graphics grunt.
Recently, I’ve been playing a lot of Jagged Alliance, because it seems like there’s just so much of it about, and I really loved the earlier incarnations.
But to play Jagged Alliance Online, or Jagged Alliance: Back In Action, I’ve needed to move from downstairs, where I like to hang out in the dining/living room, to upstairs, or The Man Room, where I’m quite isolated from my girlfriend, the TV, and the small family of woodpeckers that’s moved into the dining room table.
The Solution: RemoteFX!
The Hyper-V box got upgraded to a Core i7 (from a Q6600) with 16GB RAM recently. This means SLAT/EPT is available, which means that I now have the possibility of sexy 3D GPU graphics without actually crippling the performance of the VMs running on it.
Also, it got me thinking about RemoteFX:
Could I get reasonable 3D gaming performance from the Hyper-V host, using the downstairs box as just a screen?
Not having used RemoteFX before, I did some research. Then some more research. Then some more. Everyone and their dog was trying it with an unsupported GPU (“for business purposes”… suuuuure), but there were some success stories around, so I persevered despite not really understanding what I was doing. (It’s a good quality. Honest.)
Note: This should not be taken as endorsement or condonement of using an unsupported GPU. If stuff just randomly stops working, or a driver update breaks this, there’s no recourse. So if you need a supported, working, supportable solution, DO NOT DO THIS. (yes, just like Xbox Live through TMG).
I jammed an Nvidia 9400 (or something; the only spare PCIe card I had) in the server as a proof of concept (depending on what you read, you either need more than one card, or the Intel isn’t a suitable RemoteFX GPU anyway).
- Pre-work: Disabled Live Mesh’s Remote Desktop support (it installs a video adapter driver that I’m pretty sure isn’t WDDM and I didn’t want to fiddle around with it; RDP is fine)
- Installed the RemoteFX role (Virtualization Host)
- Created a Hyper-V VM and Installed Windows 7 Ultimate X64 SP1
- Uses the External Hyper-V network (my internal home LAN, with DHCP, a proxy, etc)
- 2 procs
- 4GB RAM (was 2GB, but figured I had the RAM spare, might offset the slow disk I’ve got it on)
- Installed the RemoteFX adapter into the VM (if you’re following this as a guide DO NOT DO THIS NOW)
- (1600x1200 (client res is 1680x1050; close enough))
- Noted that the refresh of the VM properties was now quite slow. Driver? Whizbang feature thing? Comes and goes.
- Screamed and cursed while shutting the VM down again because I’d forgotten to enable Remote Desktop first, and the Hyper-V remote window won’t connect to a RemoteFX enabled VM.
- Removed remoteFX adapter from VM.
- Enabled Remote Desktop in the VM
- Remoted into the VM to check it worked
- it did!
- Checked that my Remote Desktop settings on the client were all up to eleven (LAN, full experience, 32-bit colour)
- Shut down the VM and re-installed the RemoteFX adapter
- Faffed around with Cap drivers and reboots. Short version: didn’t need one
- Used the Group Policy Settings to un-balance RemoteFX performance as much as possible (only ever likely to be me using it at once) -
To CAP or not to CAP?
The literature commonly refers to installing the RemoteFX Cap Driver because most servers don’t use WDDM drivers for their inbuilt video cards.
Mine did have a WDDM driver (the i7 has Intel Integrated HD Graphics)… but I didn’t know that, so I assumed it was XPDM and installed the Cap driver; turns out I simply didn’t need to, and there was much installing and uninstalling of the cap driver, with reboots required. (Which take out my house’s Internet connection).
In short: looks to me like if your inbuilt server adapter is WDDM, no need for the CAP driver. But like I said – I removed the ?XPDM? Live Mesh adapter before starting.
It worked, but the 9400 didn’t support new niceties like Shader Model 3.0, so BIA was out. And JAO ran too slowly for my liking. And the card was ollllld. So assuming that’d be the problem, I figured I’d try a new one.
A new video card
So I bought a new ATI/AMD Radeon HD 6770 1GB card (and a 6790 for the gaming PC…) for $140, and dropped that into the Hyper-V box.
(Yes, I know it’s unsupported. Yes, I know there are special GPUs for this. No, I can’t help you if you run into trouble with this.)
At this point, I tried installing drivers, but it didn’t seem to work initially, possibly because I still had the Cap driver installed (there was screen blanking). Eventually, after several uninstall-reinstall cycles, it just worked. I didn’t (as of 12.1 Catalyst) need different drivers; I didn’t install Catalyst Control Center on the successful run, but I don’t think it was that anyway.
The Event Log messages about nonworking GPUs disappeared, and I had a working RemoteFX host again. (Moral of the story: if you are using a cap driver, and you need to add or change a video card, disable the cap driver first).
How does it go?
It goes alright!
Some games react weirdly to RDP-style inputs (particularly the mouse); some games have glitches they don’t otherwise have with the synthetic 3d adapter.
I would not try playing most FPSs via RemoteFX (you’re instantly dealing with input lag plus network lag plus rendering time on the server and the client, plus that mouse-movement-is-display-mouse-movement thing).
Also, keep in mind: this is a screen remoting protocol; if your box can’t do smooth full-motion 3d on its own, or smooth full-screen video, doing smooth full-motion 2d-of-3d might put a fair load on it as well. If Aero is jerky on the box (it is on the Touchsmart), that’s about the best-case frame-rate you’re likely to get from RemoteFX or anything for that matter. There are performance counters to track where bottlenecks are.
Quick summary of games I’ve tried:
I can now play Jagged Alliance: BIA on my downstairs PC pretty reliably, which is all I wanted to do in the first place. I do it a lot right now. I use 1280x720, 30Hz (seems to respond better), 2xaa, 4xAniso (or 4x whatever that last setting is), and Vsync.
JAO has some graphical weirdness (blank world map and face tiles) which fixes itself up when you play with the 9 and 0 keys (graphics detail level). Again, can now play it on the Touchsmart, which is incapable of playing it on its own.
Company of Heroes looks great, and with all the settings turned up to max, I got a “Great” score on COHmark. Can’t remember the numbers, but better than I expected. Haven’t played with it extensively yet.
I tried Civ IV, and it was the first time I’ve played it… it worked pretty well.
Frozen Synapse didn’t work at all, just crashed to desktop.
Deus Ex: GOTY – man, that game’s a pain to configure these days, what with its software rendering default and 16 bit colour! ugh! – it doesn’t really work well, input issues once the video issues are fixed.
In summary: awesome for the downstairs PC
It’s not a solution that allows me to dedicate the full unfettered power of the GPU to a single client (at least, I haven’t worked out how), but with a nice, grunty GPU in the server box, it’s nice that I won’t have to replace the touchsmart until Win8 comes out (bevel-less touch is important), and then I’ll get me one of those sexy new HP all-in-ones, and maybe play games locally again for a while. Or maybe stick with the thin screen/lots of bandwidth solution!