FastNetMon

Thursday, 10 December 2009

CPU scheduler (планировщик процессора) в OpenVZ

Довольно долгое время я скептически относился к тому, что в OpenVZ шедулер процессора работает нормально, но вот практика и вики OpenVZ говорят об обратном.

Так что для полной уверенности, я решил провести тесты.

Платформа следующая:

Linux libvirt.ru 2.6.18-164.2.1.el5.028stab066.7 #1 SMP Thu Nov 26 12:54:50 MSK 2009 x86_64 x86_64 x86_64 GNU/Linux



cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 43
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
stepping : 1
cpu MHz : 2199.834
cache size : 512 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow pni lahf_lm cmp_legacy
bogomips : 4399.66
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp

processor : 1
vendor_id : AuthenticAMD
cpu family : 15
model : 43
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
stepping : 1
cpu MHz : 2199.834
cache size : 512 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3dnow pni lahf_lm cmp_legacy
bogomips : 4398.88
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp



На основе мануала создаем три контейнера:

vzctl create 201 --ostemplate centos-5-x86_64 --config vps.basic --hostname myvps1.ru
vzctl create 202 --ostemplate centos-5-x86_64 --config vps.basic --hostname myvps2.ru
vzctl create 203 --ostemplate centos-5-x86_64 --config vps.basic --hostname myvps3.ru


Изначально приоритеты работы планировщика одинаковы:

grep -HiR 'CPUUNITS' /etc/vz/conf/2*
/etc/vz/conf/201.conf:CPUUNITS="1000"
/etc/vz/conf/202.conf:CPUUNITS="1000"
/etc/vz/conf/203.conf:CPUUNITS="1000"


Указываем приоритет работы планировщика процессора для каждого из контенеров:

vzctl set 201 --cpuunits 1000 --save
vzctl set 202 --cpuunits 2000 --save
vzctl set 203 --cpuunits 3000 --save


Запускаем контейнеры:

for i in 20{1,2,3}; do vzctl start $i ;done


Итого имеем три запущенных контейнера на всю систему (2 процессора):

vzlist
CTID NPROC STATUS IP_ADDR HOSTNAME
201 11 running - myvps1.ru
202 11 running - myvps2.ru
203 11 running - myvps3.ru



Теперь поочередно заходим на все виртуальные машины и запускаем там вечные циклы:

vzctl enter 201
perl -e '$0="myvps1.ru"; while(1){}' &
CTRL+D

vzctl enter 202
perl -e '$0="myvps2.ru"; while(1){}' &
CTRL+D

vzctl enter 203
perl -e '$0="myvps3.ru"; while(1){}' &
CTRL+D



А теперь смотрим показания top на хост-системе:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
29307 root 25 0 23916 1776 1432 R 99.8 0.1 0:19.17 perl
29285 root 25 0 23916 1776 1432 R 66.6 0.1 0:23.00 perl
29260 root 25 0 23916 1776 1432 R 33.6 0.1 0:31.37 perl


Либо тоже самое можем в более удобном виде просмотреть в ps aux:

ps aux | grep 'myvps.\.ru'
root 29260 37.8 0.0 23916 1776 ? R 07:29 2:25 myvps1.ru
root 29285 67.3 0.0 23916 1776 ? R 07:30 4:09 myvps2.ru
root 29307 99.9 0.0 23916 1776 ? R 07:30 5:58 myvps3.ru


Ну вот и убеждаемся, что разработчики OpenVZ рулят и планировщик разделяет нагрузку на процессор от контенеров пропорционально весам cpuunits :)

No comments :

Post a Comment

Note: only a member of this blog may post a comment.