关于基准测试流程
这四种镜像之间有什么区别?
在基准测试图表中,您会看到四种镜像:少量大层、少量小层、大量大层和大量小层。
所有镜像都使用相同的基本镜像:gcr.io/buildpacks/builder:v1
少量 vs 大量
少量将复制两个文件,而大量将复制 20 个文件。
小型 vs 大型
小型将复制一个 20MB 的文件,而大型将复制一个 123MB 的文件。
使用这些信息,您可以看到以下内容
- 少量大层:复制两个 123MB 的文件
- 少量小层:复制两个 20MB 的文件
- 大量大层:复制 20 个 123MB 的文件
- 大量小层:复制 20 个 20MB 的文件
最后,作为最后一层,复制一个简单的 11 行 Go 应用程序。
迭代 vs 初始
每个基准测试都有两个图表:迭代和初始。
初始
初始模拟首次加载镜像。
在运行之间,会从 minikube 和 Docker 中删除/清除所有现有镜像和缓存,以重现用户首次加载时的体验。
迭代
迭代模拟仅更改 Go 应用程序(镜像的最后一层)。
这正是 Skaffold 的使用场景,如果用户更改了文件,则会重新构建 Go 二进制文件并重新加载镜像。
在运行之间,缓存和现有镜像保持不变,仅更改 Go 二进制文件。
如何进行基准测试?
// Pseudo code of running docker-env benchmark
startMinikube() // minikube start --container-runtime=docker
for image in [fewLargeLayers, fewSmallLayers, ...] {
buildGoBinary()
// initial simulation
for i in runCount {
startTimer()
runDockerEnvImageLoad(image)
stopTimer()
verifyImageSuccessfullyLoaded()
storeTimeTaken()
removeImage()
clearDockerCache()
}
// iterative simulation
for i in runCount {
updateGoBinary()
startTimer()
runDockerEnvImageLoad(image)
stopTimer()
verifyImageSuccessfullyLoaded()
storeTimeTaken() // skip if first run
}
clearDockerCache()
calculateAndRecordAverageTime()
}
deleteMinikube() // minkube delete --all