Latest revision |
Your text |
Line 1: |
Line 1: |
− | The following demo scripts (scenarios) can be used to show advantages of OpenVZ.
| + | Demo scripts which can be used to show advantages of OpenVZ: |
| | | |
− | == Full container lifecycle ==
| + | * Full VE lifecycle (create, set ip, start, add user, enter, exec, show ps -axf output inside VE), stop, destroy). It should take two minutes ("compare that to a time you need to deploy a new (non-virtual) server!") |
| | | |
− | Create a container, set an IP, start, add a user, enter, exec, show | + | * Massive VE creation. Create/start 50 or 100 VEs in a shell loop. Shows fast deployment and high density. |
− | <code>ps -axf</code> output inside the container, stop, and destroy.
| |
− | It should take about two minutes (''"compare that to a time you need
| |
− | to deploy a new (non-virtual) server!"''). During the demonstration,
| |
− | describe what's happening and why.
| |
| | | |
− | Here are the example commands needed:
| + | * Use VEs from prev. item -- load those by ab or http_load -- shows that many VE are working quite fine, with low response time etc. |
| | | |
− | # CT=123
| + | * If you have two boxes, do vzmigrate --online from one box to another. You can use, say, xvnc in a VE and vncclient to connect to it, then run xscreensaver-demo and while the picture is moving do a live migration. You'll show xscreensaver stalls for a few seconds but then keeps running -- on another machine! That looks amazing, to say at least. |
− | # IP=10.1.1.123
| |
− | # sed -i "/$IP /d" ~/.ssh/
| |
− | # time vzctl create $CT --ostemplate fedora-core-5-i386-default
| |
− | # vzctl set $CT --ipadd $IP --hostname newCT --save
| |
− | # vzctl start $CT
| |
− | # vzctl exec $CT ps axf
| |
− | # vzctl set $CT --userpasswd guest:secret --save
| |
− | # ssh guest@$IP
| |
− | [newCT]# ps axf
| |
− | [newCT]# logout
| |
− | # vzctl stop $CT
| |
− | # vzctl destroy $CT
| |
− | | |
− | == Massive container creation ==
| |
− | | |
− | Create/start 50 or 100 containers in a shell loop. Shows fast deployment
| |
− | and high density.
| |
− | | |
− | Here are the example commands needed:
| |
− | | |
− | <pre>
| |
− | # time for ((CT=200; CT<250; CT++)); do \
| |
− | > time vzctl create $CT --ostemplate fedora-core-9-i386; \
| |
− | > vzctl start $CT; \
| |
− | > done
| |
− | </pre>
| |
− | | |
− | == Massive container load ==
| |
− | | |
− | Use containers from the previous item — load those by <code>ab</code> or
| |
− | <code>http_load</code>. This demo shows that multiple containers are working
| |
− | just fine, with low response time etc.
| |
− | | |
− | <pre>
| |
− | # for ((CT=200; CT<250; CT++)); do \
| |
− | > vzctl set $CT --ipadd 10.1.1.$CT --save; \
| |
− | > done
| |
− | </pre>
| |
− | | |
− | On another machine:
| |
− | | |
− | <pre>
| |
− | # rpm -ihv http_load
| |
− | #
| |
− | </pre>
| |
− | FIXME: http_load commands
| |
− | | |
− | == Live migration ==
| |
− | | |
− | If you have two boxes, do <code>vzmigrate --online</code> from one box | |
− | to another. You can use, say, <code>xvnc</code> in a container and | |
− | <code>vncclient</code> to connect to it, then run
| |
− | <code>xscreensaver-demo</code>, choose a suitable screensaver (eye-candy but
| |
− | not too CPU aggressive) and while the picture is moving start a live
| |
− | migration. You'll see that <code>xscreensaver</code> stalls for a few | |
− | seconds but then continues to run — on another machine! That looks amazing, | |
− | to say at least. | |
− | | |
− | FIXME: commands, setup, VNC template.
| |
− | | |
− | == Resource management ==
| |
− | Below scenarios aims to show how OpenVZ resource management works.
| |
− | | |
− | === [[UBC]] protection ===
| |
− | | |
− | ==== fork() bomb ====
| |
− | <pre>
| |
− | # while [ true ]; do \
| |
− | > while [ true ]; do \
| |
− | > echo " " > /dev/null;
| |
− | > done &
| |
− | > done
| |
− | </pre>
| |
− | | |
− | We can see that the number of processes inside container will not be growing.
| |
− | We will see only the increase of <code>numproc</code> and/or
| |
− | <code>kmemsize</code> fail counters in <code>/proc/user_beancounters</code>.
| |
− | | |
− | ==== dentry cache eat up ====
| |
− | FIXME
| |
− | | |
− | === CPU scheduler ===
| |
− | | |
− | {{Warning|CPU weights only works in stable kernels.}}
| |
− | | |
− | Create 3 containers:
| |
− | <pre>
| |
− | # vzctl create 101
| |
− | # vzctl create 102
| |
− | # vzctl create 103
| |
− | </pre>
| |
− | | |
− | Set container weights:
| |
− | <pre>
| |
− | # vzctl set 101 --cpuunits 1000 --save
| |
− | # vzctl set 102 --cpuunits 2000 --save
| |
− | # vzctl set 103 --cpuunits 3000 --save
| |
− | </pre>
| |
− | | |
− | We set next CPU sharing <code>CT101 : CT102 : CT103 = 1 : 2 : 3</code>
| |
− | | |
− | Start containers:
| |
− | <pre>
| |
− | # vzctl start 101
| |
− | # vzctl start 102
| |
− | # vzctl start 103
| |
− | </pre>
| |
− | | |
− | Run busy loops in all containers:
| |
− | <pre>
| |
− | # vzctl enter 101
| |
− | [ve101]# while [ true ]; do true; done
| |
− | # vzctl enter 102
| |
− | [ve102]# while [ true ]; do true; done
| |
− | # vzctl enter 103
| |
− | [ve103]# while [ true ]; do true; done
| |
− | </pre>
| |
− | | |
− | Check in top that sharing works:
| |
− | <pre>
| |
− | # top
| |
− | COMMAND %CPU
| |
− | bash 48.0
| |
− | bash 34.0
| |
− | bash 17.5
| |
− | </pre>
| |
− | | |
− | So, we see that CPU time is given to container in proportion ~ 1 : 2 : 3.
| |
− | | |
− | Now start some more busy loops. CPU distribution should remain the same.
| |
− | | |
− | === Disk quota ===
| |
− | <pre>
| |
− | # vzctl set CTID --diskspace 1048576:1153434 --save
| |
− | # vzctl start CTID
| |
− | # vzctl enter CTID
| |
− | [ve]# dd if=/dev/zero of=/tmp/tmp.file bs=1048576 count=1000
| |
− | dd: writing `/tmp/tmp.file': Disk quota exceeded
| |
− | </pre>
| |
− | | |
− | [[Category:Events]]
| |