关于基准测试流程

这四种镜像之间有什么区别?

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

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

上次修改时间:2023 年 11 月 6 日: 更新 benchmarkingprocess.md (304c1c8ff)