如何在Docker容器内部使用FIO时绕过内存缓存?

问题描述 投票:0回答:1

我正在尝试使用启用了O_direct的灵活IO工具对主机和Docker容器上的I / O性能进行基准测试,以绕过内存缓存。结果非常可疑。 docker的性能几乎比我的主机好50倍,这是不可能的。似乎docker根本没有绕过缓存。即使我以--privileged模式运行它。这是我在容器内运行的命令,有什么建议吗?

fio --name=seqread --rw=read --direct=1 --ioengine=libaio --bs=4k --numjobs=1 --size=10G --runtime=600  --group_reporting --output-format=json >/home/docker/docker_seqread_4k.json
docker io benchmarking
1个回答
0
投票

((请注意,这实际上不是编程问题,所以Stackoverflow是问这个问题的错误位置……也许Super UserServerfault是更好的选择,并且可以获得更快的答案?)

结果非常可疑。 docker的性能几乎比我的主机好50倍,这是不可能的。似乎docker根本没有绕过缓存。

如果您的最佳情况等待时间可疑小,则很有可能是您的怀疑依据-asking for O_DIRECT is a hint not an order and the filesystem can choose to ignore it and use the cache anyway(请参阅有关“您正在请求直接I / O到文件系统中文件的部分,但...”) 。

总之,码头工人正在使用的文件系统可能无法以您请求的方式准确地(使用默认的码头工人文件系统绕过缓存),如果可以选择的话,最好在外部进行任何此类测试一个容器(包含所有警告)。

© www.soinside.com 2019 - 2024. All rights reserved.