簡體   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