关于基准测试过程
四种镜像有何不同?
在基准测试图表中,您会看到四种镜像:少量大层、少量小层、大量大层和大量小层。
所有镜像都使用相同的基础镜像:gcr.io/buildpacks/builder:v1
少量与大量
少量将复制两个文件,而大量将复制20个文件。
小型与大型
小型将复制一个20MB的文件,而大型将复制一个123MB的文件。
根据此信息,您可以看到以下内容:
- 少量大层:复制两个123MB文件
- 少量小层:复制两个20MB文件
- 大量大层:复制20个123MB文件
- 大量小层:复制20个20MB文件
最后,作为最后一层,复制了一个简单的11行Go语言应用程序。
迭代与首次
每个基准测试都有两个图表:迭代和首次。
首次
首次模拟第一次加载镜像。
在每次运行之间,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