LibVF.IO VS Mdev-GPU

Compare LibVF.IO vs Mdev-GPU and see what are their differences.

LibVF.IO

A vendor neutral GPU multiplexing tool driven by VFIO & YAML. (by Arc-Compute)

Mdev-GPU

A user-configurable utility for GPU vendor drivers enabling the registration of arbitrary mdev types with the VFIO-Mediated Device framework. (by Arc-Compute)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
LibVF.IO Mdev-GPU
35 3
771 52
1.9% -
3.1 0.0
5 months ago over 1 year ago
Nim Haskell
GNU Affero General Public License v3.0 GNU General Public License v3.0 only
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

LibVF.IO

Posts with mentions or reviews of LibVF.IO. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-06-07.
  • run 2 VMs with 1 game on each
    1 project | /r/VFIO | 4 Oct 2023
    Maybe you can try LibVF.IO
  • What GPU would you buy for a gaming server?
    2 projects | /r/cloudygamer | 7 Jun 2023
  • GPU virtualization?
    3 projects | /r/kvm | 20 May 2023
    I'm on Linux and I'm running a 3070 Ti (Nvidia). I have always wanted to do GPU virtualization but because NVIDIA won't release vGPU for consumer card no one can do it without crossing legal red tape or problems with bricking your GPU. I did find this [https://github.com/jamesstringerparsec/Easy-GPU-PV] however it is only for windows, I found this [https://github.com/Arc-Compute/LibVF.IO/] and does not work with my GPU, and this [https://github.com/DualCoder/vgpu_unlock] and can't get it to work. Done any one know an alternative on Linux that work just like this, overcoming these problems (on KVM)?
  • Local Multiplayer
    1 project | /r/linux_gaming | 7 Apr 2023
    If you are willing to thinker with you gpu driver you could look up libvfio and create multiple VM with the same gpu.
  • Need help ASAP. Computer hangs at grub ""
    2 projects | /r/Fedora | 29 Jan 2023
    It seems they have issues with recent drivers/kernel, too: https://github.com/Arc-Compute/LibVF.IO/issues/61
  • Anyone running vGPU unlock in their system? How is it going?
    1 project | /r/VFIO | 30 Nov 2022
    I ran it like a year ago it was fine but not for my workflow. Might revisit the setup soon since it matured a lot since then. I suggest you also look at: https://github.com/Arc-Compute/LibVF.IO
  • Want to try to switch to linux again. Need some info.
    8 projects | /r/linux | 13 Nov 2022
    For Affinity, I don't know. I have heard of people using Photoshop via VM, the problem usually comes when you need to utilize a lot of GPU because outside of GPU passthrough (might worth researching single-GPU passthrough and libvfio if you don't want to use two GPUs), GPU performance isn't great for VMs. I did find a few threads on the subject of Affinity on Linux, though, so maybe those could help.
  • Rx 7900 xtx based on slides is 10-15% slower than 4090 using 95 less watts and costs $600 less
    4 projects | /r/Amd | 3 Nov 2022
    I feel you on this. Looking forward to running libvf. Wine has come a long ways, but I ended up keeping a old PC a secondary to not deal with the hacking/workarounds to run some games. Using the older system for my Linux.
  • Why do we call them "display managers"
    1 project | /r/linux | 15 Sep 2022
    It's theoretically possible using a method like libvfio. This should allow you to split your gpu into 2 virtual gpus. It's designed for use with a vm, but could likely work with multi seat
  • Ask HN: What's the best source code you've read?
    46 projects | news.ycombinator.com | 10 Sep 2022
    Perhaps not the "best" source code I've ever read, but libVF.io had some beautiful code for what's generally gnarly system-glue code. The iommu setup code is a good example and inspires me to think that system-glue code doesn't need to be gross or impenetrable: https://github.com/Arc-Compute/LibVF.IO/blob/master/src/libv...

    Another one I've appreciated reading (and learned more about 2d graphics from) is Pixie, a 2d graphics library written in Nim. Here's the implementation of a fair subset of SVG paths: https://github.com/treeform/pixie/blob/master/src/pixie/path...

    And one last one for basic algorithms: https://github.com/nim-lang/Nim/blob/version-1-6/lib/pure/al...

    Of course Knuth's original code is still some of the best classic code. K&R's original C book is a classic.

Mdev-GPU

Posts with mentions or reviews of Mdev-GPU. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-08-24.
  • Libvf.io: Add GPU Virtual Machine (GVM) Support
    3 projects | news.ycombinator.com | 24 Aug 2022
    According to https://docs.linux-gvm.org/

    "GVM ... may be used in combination with KVM or other platform hypervisors such as Xen* to provide a complete virtualization solution via both central processing (CPU) and graphics processing (GPU) hardware acceleration."

  • GVM: A GPU Virtual Machine for Iommu-Capable Computers
    15 projects | news.ycombinator.com | 6 Jul 2022
    > OpenMdev.io is meant for developers, not for users.

    Frankly, it isn't meant for developers, either. Almost every page on that site is either woefully incomplete, or crib notes from docs/talks, which is fine for a high-level overview, but it's not an API reference developers can use either. The sample code is mostly just lifted from other places (such as https://github.com/torvalds/linux/blob/master/samples/vfio-m...), so useless you're better off reading the source (https://openmdev.io/index.php/OpenRM), or just links to other people's APIs which interested devs can find.

    It's fine to collate this, but it's far more like someone's personal aggregator than any kind of reference site.

    > No, it's a Libvirt alternative with convenience functions for VFIO users. Here's the documentation:

    > https://openmdev.io/index.php/LibVF.IO

    I read this before I ever wrote a reply, which you should have guessed because there was no other way to get any information. None of it tells anyone WHY this should use this instead of the bindings which have 100 developers on them, which have been battle tested for years, and for which the original author of VFIO wrote exhaustive, excellent manuals on the blog I linked earlier 7.5 years ago.

    What advantages does your system offer?

    > GVM/Mdev-GPU is unrelated to LibVF.IO which I think is where you're getting confused. LibVF.IO does not actually have any integration with GVM/Mdev-GPU so if you're reading that code you're not going to learn how GVM/Mdev-GPU works. We're planning to integrate the two but it's not done yet.

    I'm not confused either about how GVM/mdev-gpu works or about its relation to libvf.io. It's not hard to read between the missing lines of your project roadmap.

    > GVM/Mdev-GPU creates the mediated devices that are exposed in the mdevctl list. Read this code instead: https://github.com/Arc-Compute/Mdev-GPU/

    I did read that. There's nowhere else I would have said "Haskell bindings to RMAPI". I didn't call it anything else because it doesn't manage any other kind of mediated device, it's a pretty thin shim, and there's no real way to suss out what it's doing other than reading the code or the autogenerated module docs, which don't actually tell any developers where to get the values they need to populate it, which they can only get by reading other API docs (not yours), and if they're going to do that, they may as well just write their own in a language they like better.

    It's not clear from the outset what the advantage is over just submitting a PR to mdevctl to echo into /sys/devices/..../[create|remove], and overall, the README doesn't give any information about it whatsoever, even `--help` output to show the args and defaults.

    > Sure, arcd is a reference Virtual Machine Monitor as it says at the top of this page: https://openmdev.io/index.php/LibVF.IO

    No, it is not. Point blank, it is not. libvirt also isn't. Even qemu isn't for hardware virt, and you're not doing IOMMU operations on emulated CPU calls. kvm is. It's a toolkit to manage virtual machines, maybe.

    This does not answer the question at all of "why not libvirt?"

    > It's actually unrelated to GVM. You can use GVM with whatever you want, including Libvirt/Virsh/Virt-Manager because we wanted to support users of those things with GVM rather than requiring that they use LibVF.IO.

    It's unrelated... for now. And there is zero reason to use this instead of libvirt hooks which were written by and are tested by teams which already do this for libvirt (which virsh and virt-manager are just interfaces to anyway).

    Again, I'm not saying this to be critical. There are plenty of libvirt-based projects out there which would welcome a standardized tool which they could all use as an entrypoint to this, because libvirt strictly does not (and will not, even with modularity) cover this use case rather than everyone re-inventing their own tooling to handle creation. It is unlikely in the extreme that the current state of GVM will work for anyone else's use case, primarily because "give me the UUIDs of existing devices" is already handled by walking /sys, and creating a new one of a given type (or removing it on VM shutdown) in more or less the same way.

    GVM isn't built in a way which is usable by any other project. That's ok, but it does nothing to explain the design decision.

    > Well, we do create mediated devices exposed in mdevctl defined by a user config file, so I would say it goes a fair amount beyond Haskell bindings for the RMAPI. I think it's reasonable to describe a GPU mediated device as a virtual GPU given you get a virtual function that represents a scheduling share and virtual BAR space with a share of the device VRAM (partition of the GPU) which you can pass to one or several guests to allow them to run an unmodified guest GPU driver. I can't really think of a better definition for a vGPU. The Mediated Device Internals article pretty much explains the APIs GVM is dealing with - I believe we even link some sample code: https://openmdev.io/index.php/Mediated_Device_Internals

    You create mediated devices for nVidia devices by sending ioctls exposed via RMAPI. This is potato/potato. The explanation you just gave STILL makes it sound as if this is a novel thing done by GVM/mdev-gpu rather than something common, and talking down to someone who is asking informed questions about why you did it this way by linking to internals (when I was physically there for most of those talks and helped write some of the docs) doesn't paint a pretty picture.

    > Your comment seems kind of trollish so I'm not really sure what benefit continuing this thread has. I think most of the stuff you're asking about is more or less documented and spelled out as openly as we're able to. What we're trying to do here is to make this stuff more open and available to people rather than locked away behind binary blobs. More or less everything we do is put into our wiki with very few exceptions. OpenMdev.io is made to be open to our community of folks working on Mediated Device/IO Virtualization functions on various projects so if you're a developer on this stuff and think anything is lacking you're welcome to contribute or suggest it to us in our IRC or Discord. I'm sure there's always room to improve and we put a ton of effort into trying to listen to feedback and improve upon things ourselves as well as accept contributions from others

    NONE OF THE STUFF I'M ASKING ABOUT IS DOCUMENTED OR SPELLED OUT. That's the point. From someone who was a maintainer, engineering leader, etc on a major open source virtualization platform who literally wrote code which does this kind of scheduling/creation across a cluster, I am telling you that your documentation is opaque, misleading, takes credit for things you did not invent, doesn't explain your use case, doesn't explain why you re-invented the wheel, doesn't explain why there's a gaping "missing middle" between "here are kernel sources/function signatures in drivers and here's a tool" (where that "missing middle" is /sys/devices/.../mdev_supported_types[/...] and "echo|uuidgen"), etc.

    This is, or could be, a great start to a unified ecosystem. You are going to have a very hard time getting a developer/user ecosystem if you do not provide better documentation, "what these tools do", find a way to talk with other virt developers without condescending to them, present usable interfaces other projects can call which are not "here is YAML/JSON to operate on with exec()", etc, and most of all, to acknowledge the work other have done/the knowledge they have rather than presenting any of this like it's brand new or novel. It could be a great utility. Or it could be something no other project ever uses. That's up to you.

    My comments are not intended to be trollish. They are intended to tell you "as someone who has written very similar code and done very similar things for a long time, the only way to figure out what the hell any of this was supposed to do was to literally read the source and make educated guesses". The average developer/user is not going to have the knowledge base to make those guesses at all, but they may see references to "arcd ..." like it's "developer documentation", go find it, and ask "why the hell is this managing qemu directly instead of libvirt", or "why is no libvirt XML/qemu hook provided"?

    These are real problems for the project. Docs, always, for every project. I know yours is new, but these are of unusually low quality for a submission to HN, and doubling down with links to the same inadequate docs like everyone you're talking to is a moron doesn't help your reputation. Additionally, examples. And reach out to others -- proxmox, ovirt, xcp, openstack (nova). See if you can collaborate. This will mean using (or at least providing) libvirt bindings/XML snippets like everyone else. It will be worth it.

What are some alternatives?

When comparing LibVF.IO and Mdev-GPU you can also consider the following projects:

vgpu_unlock - Unlock vGPU functionality for consumer grade GPUs.

linux-intel-lts

gvt-linux

GVM-user - GVM-user.

Easy-GPU-PV - A Project dedicated to making GPU Partitioning on Windows easier!

VFIO-Mdev_Samples - Sample code for creating a VFIO Mediated Device. GPLv2 sources mirrored from elixir.bootlin.com with simple makefile changes.

linux - Linux kernel source tree

ROCm - AMD ROCmâ„¢ Software - GitHub Home [Moved to: https://github.com/ROCm/ROCm]