prometheus/storage/local/chunk
beorn7 434ab2a6a3 storage: Evict chunks and calculate persistence pressure based on target heap size
This is a fairly easy attempt to dynamically evict chunks based on the
heap size. A target heap size has to be set as a command line flage,
so that users can essentially say "utilize 4GiB of RAM, and please
don't OOM".

The -storage.local.max-chunks-to-persist and
-storage.local.memory-chunks flags are deprecated by this
change. Backwards compatibility is provided by ignoring
-storage.local.max-chunks-to-persist and use
-storage.local.memory-chunks to set the new
-storage.local.target-heap-size to a reasonable (and conservative)
value (both with a warning).

This also makes the metrics intstrumentation more consistent (in
naming and implementation) and cleans up a few quirks in the tests.

Answers to anticipated comments:

There is a chance that Go 1.9 will allow programs better control over
the Go memory management. I don't expect those changes to be in
contradiction with the approach here, but I do expect them to
complement them and allow them to be more precise and controlled. In
any case, once those Go changes are available, this code has to be
revisted.

One might be tempted to let the user specify an estimated value for
the RSS usage, and then internall set a target heap size of a certain
fraction of that. (In my experience, 2/3 is a fairly safe bet.)
However, investigations have shown that RSS size and its relation to
the heap size is really really complicated. It depends on so many
factors that I wouldn't even start listing them in a commit
description. It depends on many circumstances and not at least on the
risk trade-off of each individual user between RAM utilization and
probability of OOMing during a RAM usage peak. To not add even more to
the confusion, we need to stick to the well-defined number we also use
in the targeting here, the sum of the sizes of heap objects.
2017-03-27 14:33:50 +02:00
..
chunk.go Add call to estimate number of samples in a chunk to the API 2016-11-17 19:09:59 +00:00
chunk_test.go storage: Make tests go-vet and golint clean 2016-12-13 17:07:27 +01:00
delta.go storage: Verify validity of byte length when unmarshalling (double)delta chunks 2016-12-13 17:07:27 +01:00
delta_helpers.go storage: separate chunk package, publish more names 2016-09-26 13:25:11 +02:00
delta_test.go storage: Verify validity of byte length when unmarshalling (double)delta chunks 2016-12-13 17:07:27 +01:00
doubledelta.go storage: Verify validity of byte length when unmarshalling (double)delta chunks 2016-12-13 17:07:27 +01:00
instrumentation.go storage: Evict chunks and calculate persistence pressure based on target heap size 2017-03-27 14:33:50 +02:00
varbit.go Add call to estimate number of samples in a chunk to the API 2016-11-17 19:09:59 +00:00
varbit_helpers.go storage: separate chunk package, publish more names 2016-09-26 13:25:11 +02:00
varbit_test.go storage: separate chunk package, publish more names 2016-09-26 13:25:11 +02:00