用Container实现Solaris10上的动态资源分配分析解析.docx
- 文档编号:30508046
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:17
- 大小:18.91KB
用Container实现Solaris10上的动态资源分配分析解析.docx
《用Container实现Solaris10上的动态资源分配分析解析.docx》由会员分享,可在线阅读,更多相关《用Container实现Solaris10上的动态资源分配分析解析.docx(17页珍藏版)》请在冰豆网上搜索。
用Container实现Solaris10上的动态资源分配分析解析
用Container实现Solaris10上的动态资源分配(2010-01-2010:
38)
分类:
Solaris
本文介绍了在Solaris10中如何运用虚拟化技术来实现动态CPU资源管理。
关键字:
Solaris10,Container,资源管理,resourcemanagement,CMT
Solaris10中提供了一项强大的虚拟化技术:
Container(容器),通过使用Container,我们可以在一个操作系统实例中虚拟出多个运行环境(Zone),每个Zone有自己的文件系统和网络地址,各个Zone中运行的应用互相不影响,从而实现应用级的隔离,并提高了安全性。
如下图所示,在一个Solaris10的操作系统中,划分了3个Container,分别运行AppServer,WebServer和DatabaseServer。
Container的使用非常简单,通常只需要5-10分钟的配置即可,所以Container的虚拟化技术得到了广泛的应用。
资源管理的作用
在缺省的情况下,各个Container都可以看见物理机器上的所有CPU和内存,也就是说物理机上的所有CPU和内存在各个Container中是共享的。
在实际运用中,往往需要对各个Container使用的资源加以指定,以便确保一些关键应用的资源。
另外一种场景是需要动态调节各个Container中的资源,例如,在月末做报表时,希望临时给数据库的Zone多分配一些CPU资源,在月末压力高峰之后,就可以恢复成原来的CPU资源。
动态资源调整(DynamicReconfiguration)的功能在中高端服务器上(如E25K,M4000-M9000等)可由硬件实现,在其他中低端类型的服务器中,我们可以用Container来实现。
Container
Solaris10的Container包括两层功能:
Zone和ResourceManagement(RM)。
Zone是指隔离的虚拟运行环境,RM是以前版本的Solaris就有的功能,可以结合Zone来动态分配资源。
本文以T5220为例子加以说明,在实际中对所有运行Solaris10的多处理器机器都适用,包括X86机器。
T5220有一个UltraSPARCT2处理器,可以拥有8个核心(cores),每个核心有8个硬件线程,因此,T5220可以拥有64个硬件线程,在操作系统中可以看到有64个物理CPU,如
#psrinfo
0on-linesince04/08/200914:
22:
42
1on-linesince04/08/200914:
22:
45
2on-linesince04/08/200914:
22:
45
3on-linesince04/08/200914:
22:
45
4on-linesince04/08/200914:
22:
45
5on-linesince04/08/200914:
22:
45
6on-linesince04/08/200914:
22:
45
(略去部分输出)
61on-linesince04/08/200914:
22:
45
62on-linesince04/08/200914:
22:
45
63on-linesince04/08/200914:
22:
45
创建Zone
1.创建Zone:
#mkdir–p/export/home/zones/zone1
#zonecfg-zzone1
zone1:
Nosuchzoneconfigured
Use'create'tobeginconfiguringanewzone.
zonecfg:
zone1>create
zonecfg:
zone1>setzonepath=/export/home/zones/zone1
zonecfg:
zone1>setautoboot=true
zonecfg:
zone1>addnet
zonecfg:
zone1:
net>setaddress=192.168.0.1
zonecfg:
zone1:
net>setphysical=e1000g0
zonecfg:
zone1:
net>end
zonecfg:
zone1>verify
zonecfg:
zone1>commit
zonecfg:
zone1>exit
2.查看配置的zone:
#ls-l/etc/zones/*xml可以看到zone1.xml的配置文件
#zoneadmlist–cv可以看到刚刚配置好的zone
3.安装zone:
#zoneadm–zzone1install
4.检查zone状态可以看到zone1的状态为installed:
#zoneadmlist–cv
5.启动zone:
#zoneadm–zzone1boot
6.首次启动需要初始化服务和配置,可用命令登陆console监控:
#zlogin-Czone1
7.系统会出现配置界面,如主机名,命名服务等。
完成配置后,zone会重新启动,
即可完成系统的启动。
8.如果在zone1里面运行psrinfo命令,可以看到64个CPU,也就是说,
globalzone和localzone里面的CPU目前是共享的,下一步我们可以
把zone里的资源进一步限定。
CPU资源分配
假定我们需要给这个zone分配8个CPU资源(即一个core),可以用以下资源管理命令:
1.先检查资源管理服务是否启用:
#svcs-a|greppool
disabledJan_03svc:
/system/pools:
default
disabledJan_03svc:
/system/pools/dynamic:
default
如果显示disabled,则需要启用:
#svcadmenablepools
#svcadmenablepools/dynamic
#svcs-a|greppool
onlineJan_03svc:
/system/pools:
default
onlineJan_03svc:
/system/pools/dynamic:
default
2.启动资源管理功能和生成基本配置文件:
#pooladm-e
#pooladm-s
3.创建资源池(pool):
#poolcfg-dc‘createpoolpool1’
4.创建CPU集(pset),包括8个CPU,其中pset.min和pset.max限定了CPU的个数:
#poolcfg-dc‘createpsetpset1(uintpset.min=8;uintpset.max=8)’
5.指定特定的CPU到CPU集中,此步骤可选,如果不指定CPU编号,则系统自动分配CPU。
为了使T5220的分区具有较好的性能,我们把同一个core中的CPU分配到同一个CPU集中:
#poolcfg-dc‘transfertopsetpset1(cpu0;cpu1;cpu2;\
cpu3;cpu4;cpu5;cpu6;cpu7)’
6.把资源池pool1和CPU集pset1作关联:
#poolcfg-dc‘associatepoolpool1(psetpset1)’
7.保存配置到文件(save):
#pooladm-s
8.查看当前CPU资源的配置,可以看到pool1已经关联上pset1,
pset1中有8个CPU(id:
0-7),而缺省的pset_default中只有56个CPU了:
#pooladm
systemdefault
stringment
intsystem.version1
booleansystem.bind-defaulttrue
stringsystem.poold.objectiveswt-load
poolpool_default
intpool.sys_id0
booleanpool.activetrue
booleanpool.defaulttrue
intpool.importance1
stringment
psetpset_default
poolpool1
intpool.sys_id2
booleanpool.activetrue
booleanpool.defaultfalse
intpool.importance1
stringment
psetpset1
psetpset1
intpset.sys_id1
booleanpset.defaultfalse
uintpset.min8
uintpset.max8
stringpset.unitspopulation
uintpset.load0
uintpset.size8
stringment
cpu
intcpu.sys_id5
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id4
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id7
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id6
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id1
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id0
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id3
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id2
stringment
stringcpu.statuson-line
psetpset_default
intpset.sys_id-1
booleanpset.defaulttrue
uintpset.min1
uintpset.max65536
stringpset.unitspopulation
uintpset.load807
uintpset.size56
stringment
cpu
intcpu.sys_id13
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id12
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id15
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id14
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id9
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id8
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id11
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id10
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id21
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id20
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id23
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id22
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id17
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id16
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id19
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id18
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id29
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id28
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id31
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id30
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id25
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id24
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id27
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id26
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id53
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id52
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id55
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id54
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id49
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id48
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id51
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id50
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id61
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id60
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id63
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id62
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id57
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id56
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id59
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id58
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id37
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id36
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id39
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id38
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id33
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id32
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id35
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id34
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id45
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id44
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id47
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id46
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id41
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id40
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id43
stringment
stringcpu.statuson-line
cpu
intcpu.sys_id42
stringment
stringcpu.statuson-line
配置Zone的CPU资源
此时,如果在Zone1中运行psrinfo命令,会发现只有56个CPU了(8-63),原因是zone1缺省情况下使用了pool_default这个资源池。
我们用zonecfg命令,把pool1分配给zone1:
#zonecfg-zzone1
zonecfg:
zone1>setpool=pool1
zonecfg:
zone1>commit
zonecfg:
zone1>exit
#zoneadm–zzone1reboot
在Zone1重新启动后,我们在这个zone里可以看到只有8个CPU了:
Zone1#psrinfo
0on-linesince04/08/200914:
22:
42
1on-linesince04/08/200914:
22:
45
2on-linesince04/08/200914:
22:
45
3on-linesince04/08/200914:
22:
45
4on-linesince04/08/200914:
22:
45
5on-linesince04/08/200914:
22:
45
6on-linesince04/08/200914:
22:
45
7on-linesince04/08/200914:
22:
45
动态分配CPU资源
如果需要改变zone1的CPU资源的分配配置,例如需要增加CPU到16个,可以通过重新配置pset1来实现,注意,这个操作可以在不停止zone的情况下进行:
1)先取消原来pset1的配置:
#poolcfg–dc‘destroypsetpset1’
2)此时zone1中的CPU数恢复到64个,我们再用命令创建一个包含16个CPU的pset1,
命令和前述的过程差不多:
#poolcfg-dc'createpoolpool1'
#poolcfg-dc'createpsetpset1(uintps
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Container 实现 Solaris10 动态 资源 分配 分析 解析