【发布时间】:2016-01-24 19:32:51
【问题描述】:
我和一些朋友正在为大学做一个项目,我们想比较 Docker 和 OpenStack 的简单脚本的执行时间。 但是,我们得到的结果是我们都无法解释的,所以我希望有人能解释我们是否做错了事,或者我们只是缺乏了解发生了什么的知识。
这是简单的“prime.sh”脚本
num=14293;
i=2
while [ $i -lt $num ]; do
if [ `expr $num % $i` -eq 0 ]
then
echo "Divisible by $i"
exit
fi
i=`expr $i + 1`
done
echo "$num is a prime number "
我们所做的是在 OpenStack 中的 Ubuntu Server 14.04 实例、Docker 中的 Ubuntu Server 14.04 和主机操作系统(也是 Ubuntu Server 14.04)本身上使用 Unix 时间命令(如 time ./prime.sh)执行它。在每个系统上,我们执行了 10 次脚本。
我们的结果是:
OpenStack 16,48 Sec
Docker: 25,77 Sec
HostOS: 30,45 Sec
有人可以帮忙解释一下吗? 我们不明白,为什么脚本在主机操作系统上的执行时间几乎是在开放堆栈上的两倍,以及为什么 openstack 比 docker 快 8 秒。
PS。 在 Unix 上,'time' 输出真实时间、用户时间和系统时间,而 docker 和 HostOS 的系统时间和用户时间非常短(大约 3 秒和 1 秒,两者),OpenStack 需要将近 16 秒的系统时间。我不知道这是否会改变什么,因为实时应该是重要的,但也许它有助于理解?
编辑:1
为了执行,我们通过 ssh'ed 进入 OpenStack Ubuntu 实例,触摸那里的脚本,然后从命令行执行它。
Docker 也是如此,这里我们使用docker exec -it ourubuntu bash 来获取容器并在那里创建并执行脚本。
执行脚本的命令总是
time ./prime.sh
实际上我们使用了一个简单的 for 循环
for i inseq 1 10; do time ./prime.sh; done
得到一些结果。
编辑:2
使用 $(( .. )) 而不是 expr .. 的新脚本,执行时间更容易理解。
现在,Host OS 执行代码的速度最快,其次是 docker,OpenStack 比其他的需要更长的时间
【问题讨论】:
-
您似乎在“do”之后缺少了一个分号。这只是一个复制粘贴错字吗? (我编辑了它,但要求确定。)
-
我有点怀疑您的代码实际上是否完全按照您在问题中编写的那样运行。 (一方面,存在语法错误的问题。)您的测试实际上是否在每个系统上返回相同的 value?
-
是的,代码按预期运行,在所有系统上它返回 14293 是一个素数,我认为这不是问题所在。由于所有系统均基于 Ubuntu 14.04,我将使用分号重新运行测试
-
好的,请在问题中添加关于您如何调用测试的描述。越精确越好。
标签: ubuntu docker benchmarking openstack