Forums » General

The game will perform worse in a Virtual Machine.

Feb 25, 2024 incarnate link
[EDIT]: There was some concern raised on Discord that this would also hypothetically impact things like GeForce NOW, Xbox Game Pass, and so on. The full answer there is a little complicated, but generally a purpose-built cloud VM, intended specifically to run streamed gaming in real-time, is probably going to be fine (we've run it on Shadow and other, similar services in the past). Basically, there is a big difference between that kind of environment, versus minimizing VO in a VMware or WSL window on your home desktop.

There are a lot of "variables" in the setup and operation of a hypervisor environment (fully shared CPUs, dedicated "logical cores", dedicated GPU resources, semi-dedicated hardware clocking and paravirtualized pass-through interfaces, etc), and it's tough to meaningfully comment on all of them without this being.. a much longer post. But simply: a professionally-built Cloud Gaming service is probably going to be fine, but the results of trying to do that at home may be much less desirable. (Original post follows):


There's a lot of interest in virtualization of VO, lately, mostly out of a kind of quirky technical interest. However, I think I should clarify some realities that people may not understand. Summed up as:

Running the game in a Virtual Machine can substantially degrade your ability to play the game, and it has nothing to do with "framerate" or anything that you can easily measure on your side.

To put it simply: Vendetta Online (and any fully-realtime networked game) is basically a big synchronized network clock. Clock synchronization is critical: it determines who did what to whom, and when.

To simplify it even further: If your client "game clock" is out of sync, your shots will be less likely to do damage, and your ping may be a lot less stable.

This is because timing is used to evaluate whether your shots do damage to their target, as mentioned in the recent "no one is actually cheating" thread, and also mentioned here in this 2004 post from Andy, similarly discussing the a symptom of the same synchronization concern. The game's clocking system was further improved after that 2004 post, but this brings us to the modern issue..:

Hypervisor Virtual Machines become a problem, because they add a lot of clock jitter to the game. Instead of having a pretty precise "tick" of time, disciplined by a real quartz oscillator (the real-time clock), like any normal computer or phone.. a virtual machine is instead "untethered" from reality (the hardware is emulated), and it has kind of a "vague" idea of the motion of time, which may "jump" in time depending on a variety of factors (including system CPU load).

(Note: this has nothing to do with your "system time" or how synchronized it may be to the real world, we aren't using that "time" anyway. Also, "Clock drift" and "clock jitter" are completely different issues, "drift" is measured in minutes/hours/days, jitter is usually measured in milliseconds).

It doesn't really matter which hypervisor virtual machine: Xen, KVM, BHyve, Hyper-V (Windows Subsystem for Linux), VMware, etc.. they all induce problems (yes, some can be worse than others, I'm not getting into all the technical details). Attempts have been made, by the hypervisor developers, to improve this situation over the years; but it does still remain. In fact, dealing with those problems has involved a certain amount of re-architecture of the game server, since we migrated to running it from the cloud (ie, virtual machines).

"Size of the machine" also doesn't matter: you can buy a crazy AWS virtual server with a zillion vCPUs that costs $25,000/month, and there are still high-precision clock-jitter problems. Most companies operating cloud-based services don't really have to worry about this kind of issue: but we do.

Now.. if you also combine running a VM on top of a standard computer with aggressive ACPI power and CPU-speed states, screen saver / sleep-modes, a fairly chaotic "desktop-oriented" operating-system CPU scheduler, network adapters that may not even have paravirtualized drivers, and may also be told sometimes to go to "powersave mode" and buffer packets.. this can result in some pretty crazy shit for a precision-synchronized networked game to deal with.

You've basically created a bunch of problems that wouldn't exist if you just ran the game on the host computer normally (sans-VM).

We have been watching some pretty bizarre stuff over the last 8 months, while we were investigating the cheating problem that didn't exist (to be clear, these clock-sync situations are not "cheaters", they're having a worse game experience). I've also been re-designing aspects of the game's time systems, to try and make it more resilient to some of these bizarre issues, some of which were mentioned in last week's update. To be clear, the game is pretty good at precision timing.. there's a phase-locked-loop on every client, and we're constantly trying to make small adjustments to keep people synchronized, despite variations in network conditions.

But, if you're running clients in VMs.. expect to not have the best experience. Because I cannot work miracles, and some of you are buffering groups of packets for like 10+ seconds, or occasionally exhibiting extreme clock jitter. It's tough for the game to tell if you're having a ping spike, because of a network problem that we need to adjust to, or your VM's clock just went insane for a little while, or your computer just decided to stop processing packets in a real-time way. 15 years ago we didn't have to worry about the latter two issues.. it was just "is the network fluctuating?".

If you want a good Vendetta Online experience, run the game on the "bare metal", as it was intended.

Someone, somewhere is going to think this is about preventing "hackers" or something, but honestly.. it has nothing to do with that. I know there are other games that actively try to prevent players from using VMs; but at the present time it isn't a concern for us, as we do all our anti-cheat stuff on the server.

I just don't want people to blame us, or our game, for issues they're effectively inflicting on themselves.