I really think that you underestimate the importance of pauseless GC. Already today, users of Go are having problems with Go at scale, YouTube's vitess pushes memory off-heap to memcached[1] because of GC issues.Another example is indexing the entire wikipedia in memory - simply impossible even with Java's excellent GC algorithms (5% of request have delay of ~5 secs) [2].Yet another example is HBase's book that recommends not using more than 16Gb heap, otherwise GC pauses will make your peers think you're dead (this is what made me think).These issues are inherent to servers, since those have typically hundreds of Gigabytes, and situation will probably get "worse" in the near future.This is not a question of having a little higher bar in a certain benchmark game, this is a question of whether Go will be able to solve some significant engineering problems, while still offering fully garbage collected environment or not. It could be the added value that will allow Go to fight the "good enough" solutions.
On Thu, Oct 11, 2012 at 6:28 AM, Elazar Leibovich <ela...@gmail.com> wrote:What makes you say that?
> I really think that you underestimate the importance of pauseless GC.
As has been pointed out before, the main problem with compacting schemes for Go is the presence of interior pointers. It certainly can be done at the cost of extra memory (a simple approach would be to make every pointer a pointer to the base of an object, plus an offset). But perhaps there's a smarter approach (along the lines of computing the bases and offsets when garbage collecting only, and undoing it again afterwards).
Thinking about freeing partial objects makes my head hurt. I suspect it may make other things hurt too.From a liveness semantic point of view, the simple, "makes sense" treatment of interior pointers is to think of them as keeping the object they point *into* reachable (and not just the field they point to). This keeps the problem within the classic heap GC realm, and simply requires a way to derive the object address from an interior pointer (something most generational collectors can already do due to card marking, see previous note).Even if there was some specific partial-freeing optimization possible (e.g. through knowing that pointers only move forward as mentioned below), I doubt much real-world gains would be had from applying them, at least not in a way that would be worth the complexity and correctness risk...
--
---
You received this message because you are subscribed to a topic in the Google Groups "golang-dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/golang-dev/GvA0DaCI2BU/unsubscribe.
To unsubscribe from this group and all its topics, send an email to golang-dev+...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Won't cycle breaking still cause stop-the-world pauses? You still need to scan the entire heap from time to time.
Having built large realtime data processing systems, i'd like to point out that from a industry perspective, GC is one of the most important issues if not the most important.Especially in distributed, latency sensitive message driven systems (multicast messaging dislikes GC), GC is the major issue when using Java.I'd say in many cases losing 30% performance to get a near pauseless GC could be considered a good tradeoff.In fact the major point in favouring C++ over Java is GC, not performance (with modern class libs and smart pointers, C++ performance is below Java frequently).I can't see GO squeeze inbetween C++ and Java without a significant improvement in GC. As Gil Tene said above, the later one starts adressing the issue, the more expensive it gets. Should be top priority
On Tuesday, December 24, 2013 11:02:33 PM UTC+1, Rüdiger Möller wrote:Having built large realtime data processing systems, i'd like to point out that from a industry perspective, GC is one of the most important issues if not the most important.Especially in distributed, latency sensitive message driven systems (multicast messaging dislikes GC), GC is the major issue when using Java.I'd say in many cases losing 30% performance to get a near pauseless GC could be considered a good tradeoff.In fact the major point in favouring C++ over Java is GC, not performance (with modern class libs and smart pointers, C++ performance is below Java frequently).I can't see GO squeeze inbetween C++ and Java without a significant improvement in GC. As Gil Tene said above, the later one starts adressing the issue, the more expensive it gets. Should be top priorityAs far as prioritys go, have you read this thread?: Go compiler and other tools written in Gohttps://groups.google.com/forum/#!searchin/golang-dev/russ$20cox/golang-dev/M_FU0599nZ0/0aLTwyEuY1sJIt looks to me like the prioritys for the next 12 months have already been set with sufficient ambition. Since in this process it is planned that the code will be refactored and restructed into idomatic go, I suspect that there may be openings (I am just speculating) for improving and innovating storage management as well. At least I think its a good opportunity to get involved.
Frankly a 30% performace hit looks like a very tough sale to me. I have come to understand that maintenance is also a big consideration.
Am Mittwoch, 10. Oktober 2012 11:33:04 UTC+2 schrieb Elazar Leibovich:In certain use cases, Java GC pauses impose real problem in certain use cases, see e.g. [1] [2]. Azul systems have an interesting solution which sounds really appealing [3], I know they're selling VMs whose main benefit is a pauseless GC algorithm.Is Go considering similar approach? I'm have very little understanding in GC, but it looks like pauseless GC will be a unique selling point for Go, not offered by any other open source language.
--
---
You received this message because you are subscribed to the Google Groups "golang-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-dev+...@googlegroups.com.