Userspace isn't slow, some kernel interfaces are

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • gvisor

    Application Kernel for Containers

  • I can chime in with some optimizations (linux).

    For normal UDP sockets UDP_GRO and UDP_SEGMENT can be faster than sendmmsg/recvmmsg.

    In Gvisor they decided that read/write from tun is slow so they did PACKET_MMAP on raw socket instead. AFAIU they just ignore tap device and run a raw socket on it. Dumping packet from raw socket has faster interface than the device itself.

    https://github.com/google/gvisor/blob/master/pkg/tcpip/link/...

  • gokrazy

    turn your Go program(s) into an appliance running on the Raspberry Pi 3, Pi 4, Pi Zero 2 W, or amd64 PCs!

  • Fun! We have support for running on gokrazy (https://gokrazy.org/) already, and that's probably where Unikernel Linux is more applicable for us, for when people just want a "Tailscale appliance" image.

    I'll email you.

  • 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.

    InfluxDB logo
  • tailscale

    The easiest, most secure way to use WireGuard and 2FA.

  • That was previously explored in https://github.com/tailscale/tailscale/issues/2303 and will probably still happen.

    When Josh et al tried it, they hit some fun kernel bugs on certain kernel versions and that soured them on it for a bit, knowing it wouldn't be as widely usable as we'd hoped based on what kernels were in common use at the time. It's almost certainly better nowadays.

    Hopefully the Go runtime starts doing it instead: https://github.com/golang/go/issues/31908

  • go

    The Go programming language

  • That was previously explored in https://github.com/tailscale/tailscale/issues/2303 and will probably still happen.

    When Josh et al tried it, they hit some fun kernel bugs on certain kernel versions and that soured them on it for a bit, knowing it wouldn't be as widely usable as we'd hoped based on what kernels were in common use at the time. It's almost certainly better nowadays.

    Hopefully the Go runtime starts doing it instead: https://github.com/golang/go/issues/31908

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts