关于基准测试过程

四种镜像有何不同?

在基准测试图表中,您会看到四种镜像:少量大层、少量小层、大量大层和大量小层。

所有镜像都使用相同的基础镜像: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

最后修改日期:2023年11月6日:更新 benchmarkingprocess.md (304c1c8ff)