• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..27-Jul-2021-

testdata/H27-Jul-2021-4236

README.mdH A D27-Jul-20212.4 KiB4434

config.goH A D27-Jul-20211.5 KiB4416

config_test.goH A D27-Jul-20212.1 KiB6840

factory.goH A D27-Jul-20211.5 KiB5126

factory_test.goH A D27-Jul-20211.5 KiB4524

memory_ballast.goH A D27-Jul-20211.9 KiB7445

memory_ballast_test.goH A D27-Jul-20212.1 KiB8764

README.md

1# Memory Ballast
2
3Memory Ballast extension enables applications to configure memory ballast for the process. For more details see:
4- [Go memory ballast blogpost](https://blog.twitch.tv/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap-26c2462549a2)
5- [Golang issue related to this](https://github.com/golang/go/issues/23044)
6
7The following settings can be configured:
8
9- `size_mib` (default = 0, disabled): Is the memory ballast size, in MiB.
10  Takes higher priority than `size_in_percentage` if both are specified at the same time.
11- `size_in_percentage` (default = 0, disabled): Set the memory ballast based on the
12  total memory in percentage, value range is `1-100`.
13  It is supported in both containerized(eg, docker, k8s) and physical host environments.
14
15**How ballast size is calculated with percentage configuration**
16When `size_in_percentage` is enabled with the value(1-100), the absolute `ballast_size` will be calculated by
17`size_in_percentage * totalMemory / 100`. The `totalMemory` can be retrieved for hosts and containers(in docker, k8s, etc) by the following steps,
181. Look up Memory Cgroup subsystem on the target host or container, find out if there is any total memory limitation has been set for the running collector process.
19   Check the value in `memory.limit_in_bytes` file under cgroup memory files (eg, `/sys/fs/cgroup/memory/memory.limit_in_bytes`).
20
212. If `memory.limit_in_bytes` is positive value other than `9223372036854771712`(`0x7FFFFFFFFFFFF000`). The `ballest_size`
22   will be calculated by `memory.limit_in_bytes * size_in_percentage / 100`.
23   If `memory.limit_in_bytes` value is `9223372036854771712`(`0x7FFFFFFFFFFFF000`), it indicates there is no memory limit has
24   been set for the collector process or the running container in cgroup. Then the `totalMemory` will be determined in next step.
25
263. if there is no memory limit set in cgroup for the collector process or container where the collector is running. The total memory will be
27   calculated by `github.com/shirou/gopsutil/mem`[[link]](https://github.com/shirou/gopsutil/) on `mem.VirtualMemory().total` which is supported in multiple OS systems.
28
29
30Example:
31Config that uses 64 Mib of memory for the ballast:
32```yaml
33extensions:
34  memory_ballast:
35    size_mib: 64
36```
37
38Config that uses 20% of the total memory for the ballast:
39```yaml
40extensions:
41  memory_ballast:
42    size_in_percentage: 20
43```
44