Skip to content

Instantly share code, notes, and snippets.

@teddyking
Created March 27, 2018 10:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save teddyking/c7cb010eacefb0410427710ca55658fc to your computer and use it in GitHub Desktop.
Save teddyking/c7cb010eacefb0410427710ca55658fc to your computer and use it in GitHub Desktop.
Garden container disk usage experiment
package main
import (
"fmt"
"log"
"code.cloudfoundry.org/garden"
"code.cloudfoundry.org/garden/client"
"code.cloudfoundry.org/garden/client/connection"
)
func main() {
var diskLimit uint64
gardenClient := client.New(connection.New("tcp", "10.244.0.2:7777"))
diskLimit = 200000000
containerSpec := garden.ContainerSpec{
Image: garden.ImageRef{
URI: "docker:///ubuntu#16.04",
},
Limits: garden.Limits{
Disk: garden.DiskLimits{
ByteSoft: diskLimit,
ByteHard: diskLimit,
Scope: garden.DiskLimitScopeTotal,
},
},
}
container, err := gardenClient.Create(containerSpec)
if err != nil {
log.Fatal(err)
}
bulkMetricsBefore, err := gardenClient.BulkMetrics([]string{container.Handle()})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Total bytes limit : %d (hard) %d (soft)\n", diskLimit, diskLimit)
fmt.Printf("Total bytes used : %d\n", bulkMetricsBefore[container.Handle()].Metrics.DiskStat.TotalBytesUsed)
fmt.Printf("Total bytes remaining : %d\n", diskLimit-bulkMetricsBefore[container.Handle()].Metrics.DiskStat.TotalBytesUsed)
fmt.Printf("Exclusive bytes used : %d\n", bulkMetricsBefore[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed)
fmt.Printf("Exclusive bytes remaining : %d\n", diskLimit-bulkMetricsBefore[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed)
fmt.Printf("\n\n=== dd ing a 5mb file in the container ===\n")
process, err := container.Run(garden.ProcessSpec{
Path: "/bin/sh",
Args: []string{"-c", "dd if=/dev/zero of=file.txt count=1 bs=5000000"},
}, garden.ProcessIO{})
if err != nil {
log.Fatal(err)
}
exitCode, err := process.Wait()
if err != nil {
log.Fatal(err)
}
fmt.Printf("=== Process exited with code: %d ===\n\n", exitCode)
bulkMetricsAfter, err := gardenClient.BulkMetrics([]string{container.Handle()})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Total bytes limit : %d (hard) %d (soft)\n", diskLimit, diskLimit)
fmt.Printf("Total bytes used : %d\n", bulkMetricsAfter[container.Handle()].Metrics.DiskStat.TotalBytesUsed)
fmt.Printf("Total bytes remaining : %d\n", diskLimit-bulkMetricsAfter[container.Handle()].Metrics.DiskStat.TotalBytesUsed)
fmt.Printf("Exclusive bytes used : %d\n", bulkMetricsAfter[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed)
fmt.Printf("Exclusive bytes remaining : %d\n", diskLimit-bulkMetricsAfter[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed)
fmt.Printf("\nTotal bytes used incremented by : %d\n", bulkMetricsAfter[container.Handle()].Metrics.DiskStat.TotalBytesUsed-bulkMetricsBefore[container.Handle()].Metrics.DiskStat.TotalBytesUsed)
fmt.Printf("Exclusive bytes used incremented by : %d\n", bulkMetricsAfter[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed-bulkMetricsBefore[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment