【问题标题】:Eliminating the impact of UnionFS on results when benchmarking inside Docker在 Docker 内部进行基准测试时消除 UnionFS 对结果的影响
【发布时间】:2016-05-09 08:59:55
【问题描述】:

我正在尝试使用在基于 fedora:23 映像的容器中运行的 Phoronix Test Suite 6.4.0 Milestone 2 对运行 Docker 的整体系统性能进行基准测试。

必须考虑的一件事是,Docker 使用专有的 UnionFS 来存储数据。但是,当在 Docker 中运行真实世界的应用程序(如 Apache)时,持久数据通常存储在主机上的专用文件夹中,运行在标准 Linux 文件系统(如 ext4 或在我的情况下为 btrfs)上。

我建议的解决方案是使用“docker volume”将主机目录挂载到 docker 中。问题是我不知道要在基准测试中使用哪些目录并且必须安装在 Docker 容器中。

例如,测试套件pts/disk 绝对应该使用 docker 卷而不是 UnionFS。它包含这些测试。

pts/compress-gzip
pts/sqlite
pts/apache
pts/pgbench
pts/compilebench
pts/iozone
pts/dbench
pts/fs-mark
pts/fio
pts/tiobench
pts/postmark
pts/aio-stress
pts/unpack-linux

应该从主机挂载 Docker 容器中的哪些目录(制作 docker 卷)?使用 docker 卷甚至是一个好主意吗?在对 Docker 进行基准测试时,是否还有其他需要注意的事项?

【问题讨论】:

    标签: linux docker filesystems benchmarking unionfs


    【解决方案1】:

    如“Mount a shared-storage volume as a data volume”中所述

    除了在您的容器中挂载主机目录之外,一些Docker volume plugins 还允许您配置和挂载共享存储,例如 iSCSI、NFS 或 FC。

    从 docker 1.9 开始,这是使用 docker volume create 完成的(然后您将这些卷安装在容器中的预期路径中)

    这可以让你:

    Docker 容器中的哪些目录应该从主机挂载

    任何包含持久数据和/或具有大量 IO 操作的文件夹。

    【讨论】:

    • 请注意,“为什么要使用像 flicker 这样的数据卷插件”而不仅仅是“Docker 数据卷”这个问题的答案是“与绑定到单个服务器的 Docker 数据卷不同, Flocker 数据卷,称为数据集,是可移植的,可以与集群中的任何容器一起使用。” Afaik 如果我牺牲可移植性,Docker 数据量在功能上是等效的,甚至可能比任何 Docker 卷插件都快,对吧?
    • @Slazer 我同意。我只是更喜欢使用 docker volume create 从 docker 1.9 开始作为插件,无论是否是插件,它都可以让卷更加可见,而不是被隐藏为一个容器,该容器只是为了启动(从不运行)并由其他容器安装。
    • 您能否建议我,看看我将要运行的测试(通常是使用实际应用程序的磁盘 I/O 密集型任务),哪些文件夹是从主机挂载的最佳候选者(作为 docker volume 或 docker volume 插件)?我没有编写测试程序,所以我看不到任何简单的方法来猜测正在使用的文件夹。测试在 Docker 容器中以 root 身份运行。
    • @Slazer 这真的取决于正在运行的应用程序。因此,我在回答中的最后一句话是笼统的。尝试先在没有卷的情况下运行测试,建立基线,然后引入卷。
    • 我想最好的方法是将它们一个一个地限制在主目录中(也许是 SELinux),然后看看会发生什么。我怀疑他们试图使用/tmp 之类的东西,也许/var/usr。至少 Apache 和 SQLite 可能仅靠我的主目录就能过得去……
    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 2011-11-01
    • 2014-02-26
    • 2018-07-18
    • 2014-12-30
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多