游戏业务的压力模型

游戏业务主要分为两类模型:

GS(Game Server)类:主要是CPU密集型,CPU、内存、网络消耗高,磁盘IO消耗低。

DB(数据库)类:主要是IO密集型,CPU、内存消耗低,网络、磁盘IO消耗高。

游戏业务的IO还有两个特点:

网络IO是小包,我们更关注发包率pps

磁盘IO更多是随机小块写,我们更关注IOPS

游戏虚拟化中CPU技术要点

在游戏虚拟化中,我最喜欢的是CPU技术是CPU绑定,CPU绑定是一个非常神奇的技术,最神奇的地方就是可以在线去做,在实战中解决多次解决了性能问题。

一个CPU绑定的案例

当时有一款游戏,已经虚拟化了好几个月了,一直很稳定,有一个周末,游戏搞活动,玩家激增,有玩家有反馈游戏有玩游戏卡的情况。我登录宿主机一看,发现宿主机部分CPU利用率非常高,宿主机是32核,前面几个核CPU利用率已经90%以上,但是后面几个核压力比较低,只有30-40%,我立即做了一个在线的CPU绑定,人工将CPU利用率拉平,解决了这个问题。

CPUhost-passthrough技术

CPU host-passthrough技术主要是将物理CPU的特性全部传给虚拟CPU,根据应用的不同,对CPU的性能提升也不同。另外还有一个好处,就是在虚拟机中可以看到和物理机一模一样品牌型号的CPU,对于一些公有云来说,用户体验比较好。但是使用CPUhost-passthrough技术也要注意,这个技术不支持在不同型号CPU的宿主机之间在线迁移虚拟机。

游戏虚拟化中内存技术要点

KSM相同内存页合并,或者叫内存压缩技术,游戏虚拟化的时候一般建议关掉。为什么呢?因为游戏业务是高压力应用,对CPU、内存的压力非常高,一方面KSM不停在扫描内存,会消耗CPU资源,另外一方面,分给游戏虚拟机的内存,我们希望是分给多少,能利用多少,打开KSM就是为了内存超用,如果真的超用了,当游戏压力大的时候,就会出现内存不够用的情况,这个使用就会有大量的SWAP交互,严重影响虚拟机的性能,影响玩家的游戏体验。

关于虚拟机时间漂移

所以的虚拟机,不光是KVM,包括VMWare,XEN,HyperV,都有一个问题,就是因为虚拟机的时钟是模拟出来的,一般虚拟机的走时要比物理机快一些。当然,因为虚拟化的流行,这个问题在最新的操作系统上优化的越来越好。一般在生成环境,所有的虚拟机建议都配置精确时钟和NTP,以保证走时准确。有些游戏,对时间精度要求非常高,更要注意虚拟机时间的配置。

关于磁盘

一般虚拟机磁盘镜像格式建议是qcow2或者lvm,因为这两种格式有个共同的特定,就是可以动态的扩容,快照,并且支持精简模式,使用管理起来非常方便。

磁盘的驱动VirtIO是标配,VirtIO是一种半虚拟化的驱动,可以跳过用户空间的虚拟化层,大大提高通讯效率。

磁盘缓存方式,常见的有四种,writeback,writethrough,none,unsafe,实际上是在虚拟化层和宿主机的文件系统这一层,开不开cache的各种组合,现在CentOS系列上默认是writeback模式,这种模式启用了宿主机文件系统的缓存,性能会好很多。我们在生产环境比较保守,一般在单机虚拟化的时候,使用writethrough方式,以数据安全为第一位,在集群虚拟化,就是需要虚拟机迁移的场景,使用none方式,因为虚拟机要迁移,必须使用none方式。

关于网络

见前段时间发布的《KVM虚拟化网络优化技术总结》已经非常详细的介绍了。

虚拟化的存储方式

单机虚拟化

虚拟化专家肖力:五年游戏虚拟化运维实践  

单机虚拟化的形式是一台宿主机虚拟几台虚拟机,虚拟机的计算、存储、网络都在这台宿主机内,是一种非常灵活的虚拟化方式,他不对原有的环境做任何改变,一台宿主机,放到机房,虚拟化就搞起来了。

商业存储集群

虚拟化专家肖力:五年游戏虚拟化运维实践

这种虚拟化方式由商业存储和若干计算节点组成,虚拟机镜像在商业存储上,虚拟机使用计算节点的计算、内存、网络资源。因为有了共享存储,就可以做虚拟机的在线迁移,配置虚拟机搞可用,配置计算资源的动态平衡。

关于商业存储的选择

目前常见的存储分为文件存储和块存储,快存储又分为ISCSI,FC。不管是那种存储,一般建议生产环境都是双控制器,一般支持双控制的存储,从软件到硬件都是双冗余的,没有单点故障。

另外,NFS和ISCSI一直有争论,这个看自己对那种技术更熟悉,更喜欢。

FC的存储成本比较高,但是性能也最好,我个人喜欢ISCSI存储,性价比高,性能基本也能满足自己的要求。

总的来说,存储的选择需要考虑以下三点:

业务性能要求

预算

自己对技术的熟悉程度




相关内容