繁体   English   中英

Docker和OpenStack基准测试

[英]Docker and OpenStack Benchmarking

我正在和一些朋友一起为大学做一个项目,我们想比较一个简单脚本在执行时间方面的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 "

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

我们的结果是:

OpenStack     16,48 Sec
Docker:       25,77 Sec
HostOS:       30,45 Sec

有人可以帮忙解释一下吗? 我们不明白,为什么脚本在主机OS上执行所需的时间几乎是在开放堆栈上执行脚本的两倍,并且为什么开放堆栈比docker快8秒。

PS。 在Unix上,“时间”输出实际,用户和系统时间,而docker和HostOS的系统和用户时间非常短(大约3和1秒,两者)OpenStack需要大约16秒的系统时间。 我不知道这种变化是否会改变,因为实时应该是重要的,但是也许有助于理解?

编辑:1

为了执行,我们将其切换到OpenStack Ubuntu实例中,在其中触摸脚本,然后从命令行执行它。 Docker也发生了同样的情况,这里我们使用了docker exec -it ourubuntu bash来获取容器,然后在那里创建并执行了脚本。

执行脚本的命令始终是time ./prime.sh实际上,我们for i in seq 1 10中使用了一个简单的for循环; do time ./prime.sh; done ; do time ./prime.sh; done ; do time ./prime.sh; done以获得许多结果。

编辑:2使用$((..))而不是expr ..的新脚本,执行时间要容易得多。 现在,主机操作系统以最快的速度执行代码,其次是泊坞窗,OpenStack需要比其他人更长的时间

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

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的方式编写它,如下所示:

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上产生了以下结果:

$ ./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子外壳,这样可以节省vm大量的处理时间。

现在都是推测,但在问题中提供更多信息,我将予以充实。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM