Skip to content Skip to footer
TinyKVM: Fast sandbox that runs on top of Varnish by perbu

TinyKVM: Fast sandbox that runs on top of Varnish by perbu

17 Comments

  • Post Author
    wmf
    Posted March 14, 2025 at 4:02 am

    Fascinating but I'm having trouble understanding the big picture. This runs a user process in a VM with no kernel? Does every system call become a VM exit and get proxied to the host? Or are there no system calls?

  • Post Author
    chatmasta
    Posted March 14, 2025 at 4:22 am

    I love this. Please never stop doing what you’re doing.

    edit: Of course you’re the top contributor to IncludeOS. That was the first project I thought of while reading this blog post. I’ve been obsessed with the idea of Network Function Virtualization for a long time. It’s the most natural boundary for separating units of work in a distributed system and produces such clean abstractions and efficient scaling mechanisms.

    (I’m also a very happy user of Varnish in production btw. It’s by far the most reliable part of the stack, even more than nginx. Usually I forget it’s even there. It’s never been the cause of a bug, once I got it configured properly.)

  • Post Author
    dangoodmanUT
    Posted March 14, 2025 at 4:25 am

    quick someone make rust bindings

  • Post Author
    nine_k
    Posted March 14, 2025 at 4:54 am

    Oh. It's like Firecracker, only much faster 8-)

    What I like most is the ability to instantly reset the state of the VM to a known predefined state. It's like restarting the VM without any actual restart. It looks like an ideal course of action for network-facing services that are constantly under attack: even if an attack succeeds, the result is erased on the next request.

    Easy COW page sharing for programs that are not written with that in mind, like ML model runners, is also pretty nice.

  • Post Author
    ruben_varnish
    Posted March 14, 2025 at 5:15 am

    Original post: https://fwsgonzo.medium.com/tinykvm-the-fastest-sandbox-564a…

    You can find a bunch of posts related to this topic there as well.

  • Post Author
    gunian
    Posted March 14, 2025 at 6:16 am

    man see virtualization man happy man see it no crossplatform man sad

  • Post Author
    jensneuse
    Posted March 14, 2025 at 6:43 am

    Is this a modern version of CGI with process isolation?

  • Post Author
    notpushkin
    Posted March 14, 2025 at 6:54 am

    This is so cool.

    I’m exploring micro-VMs for my self-hosted PaaS, https://lunni.dev/ – and something with such little overhead seems like a really interesting option!

  • Post Author
    winternewt
    Posted March 14, 2025 at 7:36 am

    I'm curious: would it be a good idea to switch my desktop Linux pc to using huge pages across the board?

  • Post Author
    tuananh
    Posted March 14, 2025 at 7:44 am

    this is really cool if it works for your use cases.

    Some notes from the post

    > I found that TinyKVM ran at 99.7% native speed

    > As long as they are static and don’t need file or network access, they might just run out-of-the box.

    > The TinyKVM guest has a tiny kernel which cannot be modified

  • Post Author
    conradev
    Posted March 14, 2025 at 8:39 am

    Could this be used to migrate execution of a single program between two different machines?

  • Post Author
    Tepix
    Posted March 14, 2025 at 9:06 am

    Interesting to see the performance gain.
    But without file i/o and network access, what are the use cases?

  • Post Author
    laurencerowe
    Posted March 14, 2025 at 9:24 am

    This is really exciting. The 2.5us snapshot restore performance is on a par with Wasmtime but with the huge advantage of being able to run native code, albeit with the disadvantage of much slower but still microsecond interop.

    I see there is a QuickJS demo in the tinykvm_examples repo already but it'd be great to see if it's possible to get a JIT capable JavaScript runtime working as that will be an order of magnitude faster. From my experiments with server rendering a React app native QuickJS was about 12-20ms while v8 was 2-4ms after jit warmup.

    I need to study this some more but I'd love to get to the point where there was a single Deno like executable that ran inside the sandbox and made all http requests through Varnish itself. A snapshot would be taken after importing the specified JS URl and then each request would run in an isolated snapshot.

    Probably needs a mechanism to reset the random seed per request.

  • Post Author
    oulipo
    Posted March 14, 2025 at 9:26 am

    I'm new to this area, can someone ELI5 this? What's the difference/advantages/disadvantages compared to other process isolation like containers?

    Would I use this to run a distributed infra on a server a bit like docker-compose? or it's not related?

  • Post Author
    jedisct1
    Posted March 14, 2025 at 11:18 am

    Quicky someone make Zig bindings.

  • Post Author
    rwmj
    Posted March 14, 2025 at 12:39 pm

    Isn't this basically libkrun? https://github.com/containers/libkrun

  • Post Author
    curtisszmania
    Posted March 14, 2025 at 1:18 pm

    [dead]

Leave a comment

In the Shadows of Innovation”

© 2025 HackTech.info. All Rights Reserved.

Sign Up to Our Newsletter

Be the first to know the latest updates

Whoops, you're not connected to Mailchimp. You need to enter a valid Mailchimp API key.