4f76283213
This allows users to configure the buildkit GC.
The following enables the default GC:
```
{
"builder": {
"gc": {
"enabled": true
}
}
}
```
The default GC policy has a simple config:
```
{
"builder": {
"gc": {
"enabled": true,
"defaultKeepStorage": "30GB"
}
}
}
```
A custom GC policy can be used instead by specifying a list of cache prune rules:
```
{
"builder": {
"gc": {
"enabled": true,
"policy": [
{"keepStorage": "512MB", "filter": ["unused-for=1400h"]]},
{"keepStorage": "30GB", "all": true}
]
}
}
}
```
Signed-off-by: Tibor Vass <tibor@docker.com>
(cherry picked from commit 4a776d0ca76c4bdf4399aef8c102361d6c2819eb)
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
Upstream-commit: 73e2f72a7c5bd6d6f8306e0ffe4371e1c3b00a21
Component: engine
52 lines
1.5 KiB
Go
52 lines
1.5 KiB
Go
package worker
|
|
|
|
import (
|
|
"math"
|
|
|
|
"github.com/moby/buildkit/client"
|
|
)
|
|
|
|
const defaultCap int64 = 2e9 // 2GB
|
|
|
|
// tempCachePercent represents the percentage ratio of the cache size in bytes to temporarily keep for a short period of time (couple of days)
|
|
// over the total cache size in bytes. Because there is no perfect value, a mathematically pleasing one was chosen.
|
|
// The value is approximately 13.8
|
|
const tempCachePercent = math.E * math.Pi * math.Phi
|
|
|
|
// DefaultGCPolicy returns a default builder GC policy
|
|
func DefaultGCPolicy(p string, defaultKeepBytes int64) []client.PruneInfo {
|
|
keep := defaultKeepBytes
|
|
if defaultKeepBytes == 0 {
|
|
keep = detectDefaultGCCap(p)
|
|
}
|
|
|
|
tempCacheKeepBytes := int64(math.Round(float64(keep) / 100. * float64(tempCachePercent)))
|
|
const minTempCacheKeepBytes = 512 * 1e6 // 512MB
|
|
if tempCacheKeepBytes < minTempCacheKeepBytes {
|
|
tempCacheKeepBytes = minTempCacheKeepBytes
|
|
}
|
|
|
|
return []client.PruneInfo{
|
|
// if build cache uses more than 512MB delete the most easily reproducible data after it has not been used for 2 days
|
|
{
|
|
Filter: []string{"type==source.local,type==exec.cachemount,type==source.git.checkout"},
|
|
KeepDuration: 48 * 3600, // 48h
|
|
KeepBytes: tempCacheKeepBytes,
|
|
},
|
|
// remove any data not used for 60 days
|
|
{
|
|
KeepDuration: 60 * 24 * 3600, // 60d
|
|
KeepBytes: keep,
|
|
},
|
|
// keep the unshared build cache under cap
|
|
{
|
|
KeepBytes: keep,
|
|
},
|
|
// if previous policies were insufficient start deleting internal data to keep build cache under cap
|
|
{
|
|
All: true,
|
|
KeepBytes: keep,
|
|
},
|
|
}
|
|
}
|