首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头与OpenStack标杆

码头与OpenStack标杆
EN

Stack Overflow用户
提问于 2016-01-24 19:32:51
回答 1查看 119关注 0票数 1

我和一些朋友正在为大学做一个项目,我们想比较Docker和OpenStack的简单脚本的执行时间。然而,我们得到的结果是我们都无法解释的,所以我希望有人能解释我们是否做错了事情,或者如果我们只是缺乏了解发生了什么的知识。

下面是简单的'prime.sh‘脚本

代码语言:javascript
复制
   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 "

我们所做的是使用Unix命令(如time ./prime.sh)在OpenStack中的UbuntuServer14.04实例、Docker中的UbuntuServer14.04以及主机OS (也就是UbuntuServer14.04)本身上执行它。在每个系统上,我们执行了10次脚本。

我们的结果是:

代码语言:javascript
复制
OpenStack     16,48 Sec
Docker:       25,77 Sec
HostOS:       30,45 Sec

有人能帮我解释一下吗?我们不明白为什么在Host上执行脚本所需的时间几乎是在开放堆栈上执行的两倍,以及openstack比docker快8秒的原因。

PS。在Unix上,' time‘输出真实、用户和sys时间,而docker和HostOS在sys和用户时间(都是3秒和1秒左右)中非常短,OpenStack在sys时间中几乎需要16秒。我不知道这是否改变了什么,因为实时应该是重要的,但也许它有助于理解?

编辑:1

为了执行,我们将ssh‘转到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以最快的速度执行代码,其次是停靠程序,OpenStack需要比其他操作系统更长的时间

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-24 20:17:04

我要指出的第一件事是,这段代码花费了大量的时间来做诸如expr的子seems扩展之类的事情,这似乎不重要。如果使用bash,则对于小素数(不改变算法)可以获得更快的结果:

代码语言:javascript
复制
prime1() { 
  local -i num="$1"
  local -i i=1 
  while (( i++ < num )); do
    (( num % i )) && continue
    printf '%d is divisible by %d\n' "$num" "$i"
    return
  done
  printf '%d is a prime number\n' "$num"
}

(如果您正在获取/bin/sh或破折号,则需要以更POSIXLY_STRICT的方式编写它,如下所示:

代码语言:javascript
复制
prime2() {
  local num="$1"
  local i=2
  local cur
  while [ $i -lt $num ]; do
    cur=$(( $num % $i ))
    if [ $cur -eq 0 ]; then
      printf '%d is divisible by %d\n' "$num" "$i"
      return
    fi
    i=$(( i + 1 ))
  done
  printf '%d is a prime number\n' "$num"
}   

我的测试使用bash在El Capitan上得出以下结果:

代码语言:javascript
复制
$ ./prime 
Running prime1
14293 is a prime number

real    0m0.168s
user    0m0.160s
sys 0m0.006s
Running prime2
14293 is a prime number

real    0m0.323s
user    0m0.303s
sys 0m0.019s
Running prime_orig
14293 is a prime number 

real    0m46.016s
user    0m19.682s
sys 0m25.132s

因此,仅仅为了比较,你会在与质数比较无关的通话中损失超过46秒。这让我怀疑调用本身的方法有些古怪。例如,您可以将脚本传递给vm,使主机负责扩展expr子save,这样可以节省大量的处理时间。

这都是猜测,但在问题中提供更多的信息,我会充实它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34980440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档