GoGCTuner brought CPU utilisation down ~50%

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

    The Go programming language

  • I really hope that they will release this as a library. We're having the exact same challenges running Go in production.

    The biggest challenge with Go in production is that, as the article points out, Go doesn't have a maximum memory setting that can be used to tune the GC. If you run Go with a memory limit on Kubernetes, it's common for it to simply run out of memory rather than using the limit for backpressure.

    This is kind of surprising, since Go is so entrenched in the Kubernetes world (and both Docker and Kubernetes are written in Go). It's possible that Google itself doesn't develop that much stuff in Go, and that the Go team doesn't have a huge incentive to innovate in this area.

    There have been a few attempts at improving heap management, including an aborted attempt at respecting ulimit [1], a promising implementation of a SetMaxHeap() function [2], and a propsoal for dealing with backpressure [3], but these projects have mostly failed to get proper traction. It's a complex problem that needs a cohesive solution.

    Fortunately, there is now a proposal [4], which has been accepted, to add a soft limit to Go, which has a more thought-through design, though I'm not sure if it's being actively worked on. I'm also not sure if that proposal, when implemented, will make the Uber approach redundant, or if these are in fact complementary.

    [1] https://github.com/golang/go/issues/5049

    [2] https://github.com/golang/go/issues/16843

    [3] https://github.com/golang/go/issues/29696

    [4] https://github.com/golang/proposal/blob/master/design/48409-...

  • proposal

    Go Project Design Documents

  • I really hope that they will release this as a library. We're having the exact same challenges running Go in production.

    The biggest challenge with Go in production is that, as the article points out, Go doesn't have a maximum memory setting that can be used to tune the GC. If you run Go with a memory limit on Kubernetes, it's common for it to simply run out of memory rather than using the limit for backpressure.

    This is kind of surprising, since Go is so entrenched in the Kubernetes world (and both Docker and Kubernetes are written in Go). It's possible that Google itself doesn't develop that much stuff in Go, and that the Go team doesn't have a huge incentive to innovate in this area.

    There have been a few attempts at improving heap management, including an aborted attempt at respecting ulimit [1], a promising implementation of a SetMaxHeap() function [2], and a propsoal for dealing with backpressure [3], but these projects have mostly failed to get proper traction. It's a complex problem that needs a cohesive solution.

    Fortunately, there is now a proposal [4], which has been accepted, to add a soft limit to Go, which has a more thought-through design, though I'm not sure if it's being actively worked on. I'm also not sure if that proposal, when implemented, will make the Uber approach redundant, or if these are in fact complementary.

    [1] https://github.com/golang/go/issues/5049

    [2] https://github.com/golang/go/issues/16843

    [3] https://github.com/golang/go/issues/29696

    [4] https://github.com/golang/proposal/blob/master/design/48409-...

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

    A Go->C++transpiler meant for data-oriented gameplay and application programming especially for WebAssembly. Using this mostly in the context of specific personal projects and heavily focusing the feature set on those. Used in my Raylib gamejam project: https://github.com/nikki93/raylib-5k -- also being used to develop a private longer term game project and a note-taking app. (by nikki93)

  • I've written my own Go (subset + extensions) -> C++ transpiler and using it on a game project: https://www.youtube.com/watch?v=8He97Sl9iy0 -- No GC, it does have slices and has access to an entity/component API and with that I think you're basically set and don't need GC for games.

    Example transpiler input / output: https://github.com/nikki93/gx/blob/master/example/main.gx.go... becomes https://gist.github.com/nikki93/97ff376abb6718427387bb9cca2f...

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