4 ms·
It's not that surprising -- Go is designed for speed by simplicity, and a low-pause-latency GC is anything but simple.
by andrewaylett 5y ago
It's not that surprising -- Go is designed for speed by simplicity, and a low-pause-latency GC is anything but simple.
- jhgb 5y agoIn 2021, Go is supposed to have GC pauses on the order of several ms at worst. Not 40 ms. So it kind of is surprising, something seems to be broken there. I'm wondering whether this isn't a limitation caused by forcing a single core operation, the runtime might not be designed for that. EDIT: Someone else noted (https://news.ycombinator.com/item?id=27085507 https://news.ycombinator.com/item?id=27085507) a discussion on Reddit where a <5ms latency was achieved in 99.9% cases, so perhaps this is indeed a subpar result.
- dilyevsky 5y agoWhen you allocate against a running GC it will penalize you for this (literally sleep your thread) - hence garbage tail latency. The solution is to not do allocation which is what gogo library strives for
- kaba0 5y agoMost of the phases of GC can be done parallel, so allocation should stop only for a really small amount of time. For comparison, Java's low-latency GC (which optimize for latency but may reduce throughput), ZGC can do worst-case <1ms pause times, that is the OS scheduler will cost more than GC.
- dilyevsky 5y agoI’m talking about Go garbage collector specifically which does mark and sweep and will slow down functions doing frequent allocations on purpose in order to catch up. This is different from stw kind of scenario e.g shenandoah