Unpopular Opinion Penguin #5: Pedal to the VMetal

Hello and welcome to another entry of the most popular section on this blog!, Unpopular Opinion Penguin. Today’s topic is all about VMetal. Why did we create it, and why did it disappear as quickly as it was released.

Without further ado, let’s begin.

It all began more than ten years ago. On the 11th of January 2011, I was a frequent user of AskUbuntu, where I’d spend my time helping others resolve their questions about Ubuntu.

That day I made a question myself after reading through the manual of my (then) new motherboard. What is IOMMU, and will it improve my VM performance?. Once another AskUbuntu user posted an answer, I read up on Xen and KVM. Needless to say, I was overwhelmed with the documentation, but I got the gist of the idea of what they were.

So I made a follow-up question. How to make a VM use AMD IOMMU so I can use a 2nd Graphics card?. Here for the first time, I hear the term ‘passthrough.’ Unfortunately for me, what I wanted to do still required a lot of work at the time, and it wasn’t until very much a decade later that it’d finally come true.

Now we fast forward to January 2019. I had put together a new computer, and as I was exploring the UEFI of the motherboard (an AORUS AX-370 Gaming 5), I stumbled across an option to enable or disable the IOMMU, and then I remembered my previous questions.

So I read up again on this hardware feature, and my curiosity peaked when I found that QEMU now fully supported doing passthrough for PCI devices using a new driver called VFIO. I did my research, and in a few weeks, I had something working: A virtual machine using one of my graphics cards for the guest.

FYI, my desktop computer has two GTX 1080s.

But while it was working, I thought we could improve it, so I brought this secret project to the rest of the Nitrux team.

I asked Anupam Basak, who vastly improved on my working (but still basic) prototype. He delivered a program that could do the passthrough for the VM, allocated CPU cores depending on how many were available, same with RAM, and even loaded GPU firmware (a requirement to use AMD Polaris cards) to perform as close to bare-metal as possible.

It also dynamically allocated QEMU flags depending on the CPU in use. Overall I was excited to include in a future release of Nitrux as I was hoping that VMetal and znx would become the killer features of our distribution (not mentioning PNX, which I’ll leave for another time). Additionally, the focus we have with AppImages.

Both programs eliminate the need for dual-booting (or multi-booting) Linux and Windows (or that was the intention, at least).

But we all know how that turned out.

A ‘minor’ update to the website later, and VMetal was included in Nitrux 1.2.0.

You see, with VMetal, we didn’t want to make a VirtualBox competitor. We wanted it to be a click-and-run type of program, something that you would ‘use’ and not spend some time configuring because the main reason it exists was to play games specific to Windows. Although it wasn’t limited to that either, since it was using QEMU, the same code could’ve been reused to run Android (also with hardware acceleration).

Although there was a caveat, and that was that the hardware had to support the virtualization features needed for VMetal to work. And that meant that not everyone could enjoy it.

Unfortunately (for us), there was nothing we could do about that, and I mean it in a literal way. We’re talking about needing to either have access to the source code of the firmware of any given motherboard or reverse engineer it. It was not feasible.

But as it became customary for us at this point, after including VMetal in a release of the distribution, we received 10% curiosity and 90% hate. Even though by this point, we did have more thorough documentation about VMetal on our website (that we later removed and archived on a repository) than we did about znx when we launched it (not that people read it anyway).

Most of the problems stemmed from two things.

The first was that people did not want to use the distribution to use VMetal; they wanted VMetal on their distribution. Because it wasn’t a matter of ‘just’ running a binary that would’ve taken some time, so we’d always say that it’d be something to do in the future but that we weren’t saying ‘no.’

And the second was hardware support. VMetal needed UEFI support, VT-d or AMD-V support, GPUs that supported UEFI boot, a motherboard that supported selecting GPUs as primary and secondary adapters, motherboard firmware that allocated PCI-E slots in separate groups. In other words, not all motherboards were really ‘compatible’ since many would do an atrocious job at organizing IOMMU groups (The ACS override patch is a workaround. However, it comes at the expense of security.)

VMetal also needed a fast CPU with enough cores and threads (more than 4), enough RAM (more than 8GB), enough storage (more than 100 GB), and enough USB ports.

We knew this, and we were clear about these requirements, but, again, people thought that it was just this ‘magical potion’ that would make their P4 run Crysis.

Just like it happened with znx, the more we tried to clear all these misconceptions about VMetal, the more people ignored them and the more they hated it.

Videos (like the ones below), blog posts, screenshots. Nothing worked.

I literally take an external SSD, using an ISO of the distribution deployed with znx, and plug it into two different computers. In both instances, the system boots and VMetal work with entirely different hardware. And yet, people took a dump on us.

Yes. That’s an Easy-Anti cheat-protected game running.

It got to the point where we were just exhausted about the undeserved commentary. People who had never tried it claiming it didn’t work, people who ignored all the documentation we had claiming it didn’t work on their computers, etcetera.

It wasn’t worth it, so we removed it a few releases into the future and the project and idea canned.

And that was it.

Unpopular Opinion

I know this one wasn’t as big of a story as the others, but the fact that it’s so mainly short sums it up. 

Obviously, I do still use it because I know for a fact that it does work. In the end, I’m left with this lingering feeling that these were all things that could’ve been great to have included but that the more that we deviated from the traditional Linux distribution, the more people would be upset.

As the mere existence of such distribution was a threat to their way of life or something.

I don’t know; I’ll never understand it.