lxcficon.jpg リソース割り当て変動システム

元のページに戻る

リソース割り当て変動システム

LXCFで生成したコンテナに割り当てるリソースを動的に変更します。 ここでは、CPUの割り当てを動的に変更しましょう。

まず、コンテナを3つ用意します。世界中の異なる地域に対してサービスするコンテナとしてasia-srv, euro-srv, およびusa-srvを作ります。 それぞれアジア、ヨーロッパ、USAは時差があります。その時差で昼間時間の地方に多くのCPUを割り当てる想定です。

# lxcf sysgen asia-srv  euro-srv usa-srv

# lxcf list
Name		Mode    	State	  Path
------------------------------------------------------
asia-srv	joint    	running	  /opt/lxcf/asia-srv
euro-srv	joint    	running	  /opt/lxcf/euro-srv
usa-srv		joint    	running	  /opt/lxcf/usa-srv

それぞれのコンテナ内で実行する仕事を用意します。仕事というのも変ですが、ここではCPUをバリバリ使うUnixBench https://code.google.com/p/byte-unixbench/を使ってみます。
WWW上からUnixBenchのtarボールをダウンロードして、/rootで展開しましょう。それをlxcfのdeployサブコマンドですべてのコンテナに転送します。

# tar xzf UnixBench5.1.3.tgz 
# ls 
UnixBench
# lxcf deploy UnixBench
###  asia-srv  ###
synchronize dir  :  /root/UnixBench

###  euro-srv  ###
synchronize dir  :  /root/UnixBench

###  usa-srv  ###
synchronize dir  :  /root/UnixBench

これでUnixBenchディレクトリとその中のファイルがすべて各コンテナにコピーされます。

次に各コンテナのCPUの割り当てを行います。
USAが昼間でアジアは夜、ヨーロッパは夕方の前提で、asia-srvに10%, euro-srvに30%, usa-srvに60%を割り当てます。

# lxcf set -c 10 asia-srv
# lxcf set -c 30 euro-srv
# lxcf set -c 60 usa-srv

リソースの割り当て状況は、lxcfのサブコマンドshowで確認できます。
コンテナに割り当てられているリソースがjson形式で表示され、cpurateの欄に設定された値があることを確認してみてください。

# lxcf show
{"name" : "asia-srv", 
 "cpun" : "0-3", 
 "cpurate" : "10", 
 "numa" : "0", 
 "memlimit" : "1.0G", 
 "memswlimit" : "-", 
 "blkio_r" : [  ], 
 "blkio_w" : [  ], 
 "blkiops_r" : [  ], 
 "blkiops_w" : [  ], 
 "net_cls" : "00000000" }

{"name" : "euro-srv", 
 "cpun" : "0-3", 
 "cpurate" : "30", 
 "numa" : "0", 
 "memlimit" : "1.0G", 
 "memswlimit" : "-", 
 "blkio_r" : [  ], 
 "blkio_w" : [  ], 
 "blkiops_r" : [  ], 
 "blkiops_w" : [  ], 
 "net_cls" : "00000000" }

{"name" : "usa-srv", 
 "cpun" : "0-3", 
 "cpurate" : "60", 
 "numa" : "0", 
 "memlimit" : "1.0G", 
 "memswlimit" : "-", 
 "blkio_r" : [  ], 
 "blkio_w" : [  ], 
 "blkiops_r" : [  ], 
 "blkiops_w" : [  ], 
 "net_cls" : "00000000" }

さて、次にコンテナにloginしてUnixBenchを起動します。

# ssh asia-srv
[root@asia-srv ~]# cd UnixBench/
[root@asia-srv ~]# ./Run >/dev/null &
[root@asia-srv ~]# ps
  PID TTY          TIME CMD
  778 pts/1    00:00:00 bash
  804 pts/1    00:00:00 Run
  844 pts/1    00:00:00 ps
[root@asia-srv ~]# exit
# ssh euro-srv
[root@euro-srv ~]# cd UnixBench/
[root@euro-srv ~]# ./Run >/dev/null &
[root@euro-srv ~]# exit
# ssh euro-srv
[root@usa-srv ~]# cd UnixBench/
[root@usa-srv ~]# ./Run >/dev/null &
[root@usa-srv ~]# exit
#

virt-managerのperfomanceの表示を並べて確認しましょう。
CPUの使用量が設定値の範囲内で推移するのがわかります。
asia-srvに10%, euro-srvに30%, usa-srvに60%を割り当てられています。

s1.png

次に、アジアが昼間になり、USAとヨーロッパは夜の設定です。
asia-srvに80%, euro-srvに10%, usa-srvに10%を割り当てます。

# lxcf set -c 80 asia-srv
# lxcf set -c 10 euro-srv
# lxcf set -c 10 usa-srv

s2.png

次に、ヨーロッパが昼間になり、アジアは夕方でUSAは夜の設定です。
asia-srvに20%, euro-srvに70%, usa-srvに10%を割り当てます。

# lxcf set -c 20 asia-srv
# lxcf set -c 70 euro-srv
# lxcf set -c 10 usa-srv

s3.png

手動でリソースの変更をしなくても、シェルスクリプトにすれば自動的にリソースの割り当てを変更できます。 たとえば次のような簡単なスクリプトで自動化できます。

  1. #!/bin/sh
  2. trap 'lxcf stop -f asia-srv euro-srv usa-srv ' 0
  3. ASIASTATE=`lxcf list | egrep asia-srv`
  4. if [ -z "${ASIASTATE}" ] ; then
  5. echo 'create asia-srv'
  6. lxcf sysgen asia-srv
  7. fi
  8. lxcf start asia-srv
  9. lxcf set -c 33 -m 512 asia-srv
  10. EUROSTATE=`lxcf list | egrep euro-srv`
  11. if [ -z "${EUROSTATE}" ] ; then
  12. echo 'create euro-srv'
  13. lxcf sysgen euro-srv
  14. fi
  15. lxcf start euro-srv
  16. lxcf set -c 33 -m 512 euro-srv
  17. USASTATE=`lxcf list | egrep usa-srv`
  18. if [ -z "${USASTATE}" ] ; then
  19. echo 'create usa-srv'
  20. lxcf sysgen usa-srv
  21. fi
  22. lxcf start usa-srv
  23. lxcf set -c 33 -m 512 usa-srv
  24. echo "initialize cpurate"
  25. echo " asia-srv : 33%"
  26. echo " euro-srv : 33%"
  27. echo " usa-srv : 33%"
  28. sleep 10
  29. echo
  30. echo "run Bisiness JOBs : asia-srv"
  31. lxcf run asia-srv "while : ; do true ;done" >& /dev/null &
  32. echo "run Bisiness JOBs : euro-srv"
  33. lxcf run euro-srv "while : ; do true ;done" >& /dev/null &
  34. echo "run Bisiness JOBs : usa-srv"
  35. lxcf run usa-srv "while : ; do true ;done" >& /dev/null &
  36. echo
  37. sleep 10
  38. while :
  39. do
  40. echo
  41. echo "change cpurate"
  42. echo " asia-srv : 80%"
  43. lxcf set -c 80 asia-srv
  44. echo " euro-srv : 10%"
  45. lxcf set -c 10 euro-srv
  46. echo " usa-srv : 10%"
  47. lxcf set -c 10 usa-srv
  48. sleep 30
  49. echo
  50. echo "change cpurate"
  51. echo " asia-srv : 20%"
  52. lxcf set -c 20 asia-srv
  53. echo " euro-srv : 70%"
  54. lxcf set -c 70 euro-srv
  55. echo " usa-srv : 10%"
  56. lxcf set -c 10 usa-srv
  57. sleep 30
  58. echo
  59. echo "change cpurate"
  60. echo " asia-srv : 10%"
  61. lxcf set -c 10 asia-srv
  62. echo " euro-srv : 30%"
  63. lxcf set -c 30 euro-srv
  64. echo " usa-srv : 60%"
  65. lxcf set -c 60 usa-srv
  66. sleep 30
  67. done

元のページに戻る