提示:这篇文章是本人在2012年12月11日有感而写的一篇电子邮件,因为其中的内容会在即将发表的一篇新博文被引用,故重新贴于此处。由于是近三年前的内容,技术也在不断进步,其中的部分内容已经不再适合于现在,仅作了解技术发展之用。

差不多是去年的时候,我写过关于一篇关于《PVS写缓存容量设计和部署位置的考虑》,谈到如何计算PVS服务所需要的内存。最近遇到一个项目,用户的应用是基于B/S方式,而且都是运行在IE6环境上,也不能迁移到更高的IT版本上,怎么办呢?从表面上看我只能使用Windows2003Server + XenApp5.0的环境去部署,那么我的Windows2003Server是不是只能分配4G内存呢?如果分配4G内存,岂不是主机上就要部署太多Windows2003Server虚拟机,会不会影响每台物理服务器所能承载的用户数量?

在9月17日发给你的《PVS写缓存容量设计和部署位置的考虑》文章中,我们曾经谈到过这个问题,今天把这个问题和PVS的存储/内存设计考虑一起来探讨一下。另外,谈到PVS方式,一般来说不仅仅是涉及到PVS服务器端的内存和存储规划,还有Target Device端的内存该分配的问题,所以我们一起来讨论。

一、Windows 内存分配机制和架构

我们第一步必须先了解清楚Windows的内存分配机制,没有这些底层知识,我们设计时将无从下手。

第一件事情我们应当了解的是OS处理的虚拟内存和安装在系统中的物理RAM的不同。一个32位的Windows操作系统无论插在主板上的物理内存有多大,能直接处理的就只有4G大小虚拟内存。企业版和数据中心版的WindowsServer 2003 32位虽然可以处理高达32G和64G内存,但是由于32位处理器的限制,实际能处理的地址空间即使在使用了Physical Address Extension (PAE)的情况下也只能处理到36位。PAE可以让CPU和操作系统利用4G之外的RAM空间。但是,从Kernel和进程方面来说,32位的Windows的core kernel仍然是在32位或者是4G虚拟内存空间内存工作。

下面的图标就说明了32位的Windows Server2003是如何将4G的可寻址虚拟内存空间划分为两个不同的区域:Kernel 空间和用户空间:

如上图所示,WindowsKernel的内存就只给了2G大小,同时又被划分为四个区域:

关于上述每部分的内存用处不再一一详述,你可以google搜索到。总之,所有的Kernel虚拟内存分配的总数不能超过2GB大小的地址空间。因此,比如System PTE空间小了,但是Paged Pool又有很多闲置内存,那么PagedPool也不能将他的内存分给System PTE,还好这个限制在Windows2008就被取消了。

对于64位的操作系统来说,虽然内存架构还是相似,但是不再有这么小的限制了,下面的图标就是Windows Server 200864位的Kernel内存限制参数:

结论:在Windows Server 2003版本的操作系统上,不建议通过配置PAE参数以获得超过4G内存访问的能力,也就是说,在WindowsServer 2003版本的操作系统上建议只分配4G大小的内存!

二、Provisioning Services的内存该如何分配

我们了解了Windows是如何处理内存分配和文件缓存后,接下来看看Citrix PVS是如何被这些规则所影响的。下面的图显示了一个Windows XP的TargetDevice从一个共享的PVSvDisk的启动过程,我们暂时假设启动过程需要读取200MB大小的数据。

从上图中可以看到,PVS服务器只需要从物理磁盘读一次vDisk即可,然后他就把vDisk的内容缓存到System Cache的内存中,并且向所有其他的Target Device提供数据服务。只要足够的内存空间,我们就不需要考虑硬盘上的IOPS要求,因为I/O全部访问在内存区域。

那么,如果我制作了一个25G大小的Windows 7的vDisk,是不是我就要分配25GB大小的内存给这个vDisk呢?答案是不需要这么多。实际上,一个Windows的运行是不需要将所有文件全部读取到内存中去,他只需要去读一些最常用的文件即可。一个典型的Windows XP会话大概需要从硬盘读取1GB-3GB的文件,1GB-3GB是这么来计算的:

  • WindowsXP从启动到登陆窗口,开启系统服务,大概需要200MB;

  • 用户登录并且加载他的Profile,然后启动他的桌面环境,大概需要50MB;

  • 用户运行Office软件,以及其他应用程序以支撑他一天的工作,大概需要600MB;

  • 用户注销操作系统甚至关闭操作系统,需要150MB;

基于以上的考虑,vDisk中大约有1GB大小的数据需要读取到内存中,由于是多个用户共享一个vDisk磁盘文件,所以有很多文件是共享的。即使是考虑到用户打开的文件是不同的,预计分配给PVS服务大小的System Cache RAM 2GB空间就能保证所有内容均从RAM里面读取,而不用从物理磁盘上读取数据。

在System Cache中除了需要额外的RAM来支持vDisk的缓存外,System Cache还需要一些RAM来缓存Windows操作系统和服务所需要的核心系统文件,还有一些服务的软件,例如Provisioning Services服务。一般来说设计512MB来缓存这些文件是合适的。下面的公式就是说明如何计算需要多少System Cache RAM来支撑PVS服务:

System Cache RAM = 512MB + vDisk的个数×平均每个vDisk需要读取的平均数据

此外,vDisk所需要的System Cache RAM还需要加上CommittedBytes under load,所以最后的公式应该是:

Total RAM = Committed Bytes under load + System Cache RAM

举个例子:

  • 一个运行的PVS服务器Under Load显示了2GB大小的Committed Memory

  • 4个不同的Windows XP vDisk为不同的Target Device提供服务;

  • 平均每个vDisk需要读取2GB大小的数据;

  • SystemCache RAM = 512 MB + (4 * 2 GB) = 8.5 GB

  • Total RAM= 2 GB + 8.5 GB = 10.5 GB

也就是说在上述的场景中,该PVS服务器至少应当配置10.5GB大小的RAM才能能保证所有数据均从内存中读取。

OK,到这里应该看得出来安装PVS最好的选择不是32位的Windows Server操作系统,而是64位的Windows操作系统了。

三、Provisioning Services的IOPS该如何计算

无论是那种部署方式,IOPS的计算都是核心因素所在,对于PVS来说,不仅仅是PVS服务器,还有TargetDevice也需要考虑。在我们下面的上一封邮件已经对Write Cache放在什么地方进行过论述,此处不再详述,总之建议放在共享存储上,而不是PVS服务器本地。如此一来,如果在第二章你对PVS的内存配置正确的话,在PVS服务器上你几乎可以不用考虑这个因素了,因为基本上不会用到PVS服务器本地的资源。

四、PVS中vDisk的存储建议

如上节所述,vDisk建议放在共享存储上,那么问题就来了,又出现了两个选择:Block Level Storage和Network Storage,哪种比较好呢?

Block Level Storage包括了SATA、SCSI、iSCSI以及光纤存储;而NetworkStorage主要包括网络重定向方式来让PVS访问到共享存储,例如CIFS、NFS以及Netware。

正确的做法是将PVS的vDisk放到Block Level Storage设备上。如果你选择了网络方式例如CIFS来让PVS访问到vDisk,那么PVS服务将无法将vDisk的内容缓存到System Cache中。这就会导致双倍的网络流量,甚至引起严重的网络负担,进而降低整个系统的扩展性。

例如,如果一个TargetDevice启动后从vDisk读取了200MB大小的数据,那么就会有200MB的网络传输数据从服务器传到Target Device。如果vDisk是从非Block Level的网络附加存储传到服务器的,那么服务器就会首先从网络存储中读取200MB的内容,然后再传输200MB到Target Device,所以总共会造成400MB的网络流量。由于ProvisioningServices不能缓存网络存储的vDisk内容,服务器会在每次TargetDevice连接它的时候都会向网络存储去下载这200MB的数据,这就造成所有网络操作都会双倍数据处理。

在Windows 2008的SMB2.0对此已经有所改动,不过就Provisioning Services目前的版本来说都不会从CIFS Share中缓存vDisk的数据。

五、Target Device需要多少内存

Target Device需要分配多少内存的重要性和ProvisioningServices Server需要多少内存都是同样重要的,而且Target Device也适用于我们第一部分所讲的Windows内存分配机制的原理。

当Target Device开始发出读数据的请求,此时读的IOPS数据开始从PVS服务器通过网络下载到TargetDevice本地内存中。只要Target Device有足够的空闲RAM来缓存这些数据,那么文件就不会从网络中传输过来一次以后再次传输,一直到Target Device重启,或者是RAM紧缺。

下面的公式是一个计算的基线来帮助你计算一个Target Device需要多少内存。因为用户打开多少文件和应用程序没办法一一重现,我们只能用估算的方法:

Target Device Ram = 最大的Committed Bytes+ System Cache RAM

例如以下场景:

  • Windows7+ Office应用;

  • 典型用户的最大Committed Bytes显示是1.0GB

  • 1.0GB + 512GB= 1.5GB

在上一个例子中,假设512MB对System Cache来说是足够的,那么Target Device就应该分配不少于1.5GB的RAM来保证应用程序的运行以及有足够的RAM来缓存硬盘数据到SystemCache中。

六、总结

对于Provisioning Services来说:

  • 使用64位的Windows操作系统;

  • 按照第二章节的计算方法分配足够的内存,一般来说分配8G – 32G RAM;

  • 使用Block Level的存储存放vDisk,不要使用CIFS

对于Target Device来说

按照第五章的计算公式分配足够的RAM,一个典型的Windows桌面操作系统大概需要Committed Bytes + 256-512MB的System Cache。

备注:CommittedBytes In Use 是 Memory: Committed Bytes 与Memory: Commit Limit之间的比值。(Committedmemory指如果需要写入磁盘时已在分页文件中保留空间的处于使用中的物理内存。Commit Limit是由分页文件的大小而决定的。如果扩大了分页文件,该比例就会减小)。这个计数器只显示当前百分比;而不是一个平均值。

Committed Bytes 是指已被提交的(不是保留的)虚拟内存字节数。此数并不一定代表页面文件的使用量,因为它包含了物理内存中从未被换出过的私有提交页面。当然,如果一个进程完全是非驻留的,则它代表所使用的页面文件数量。

转载于:https://blog.51cto.com/virtualworld/1441391

PVS的内存和存储规划设计相关推荐

  1. 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一3.2.2 建立实验室...

    本节书摘来华章计算机<vSphere性能设计:性能密集场景下CPU.内存.存储及网络的最佳设计实践>一书中的第3章 ,第3.2.2节,[美] 克里斯托弗·库塞克(Christopher K ...

  2. 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一3.3.3 供应实验室...

    本节书摘来华章计算机<vSphere性能设计:性能密集场景下CPU.内存.存储及网络的最佳设计实践>一书中的第3章 ,第3.3.3节,[美] 克里斯托弗·库塞克(Christopher K ...

  3. 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.2.2 内存...

    本节书摘来华章计算机<vSphere性能设计:性能密集场景下CPU.内存.存储及网络的最佳设计实践>一书中的第1章 ,第1.2.2节,[美] 克里斯托弗·库塞克(Christopher K ...

  4. 《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.1.1 确定参数...

    本节书摘来华章计算机<vSphere性能设计:性能密集场景下CPU.内存.存储及网络的最佳设计实践>一书中的第1章 ,第1.1节,[美] 克里斯托弗·库塞克(Christopher Kus ...

  5. Spark 内存管理存储内存管理_尚硅谷大数据培训

    RDD的持久化机制 弹性分布式数据集(RDD)作为 Spark 最根本的数据抽象,是只读的分区记录(Partition)的集合,只能基于在稳定物理存储中的数据集上创建,或者在其他已有的 RDD 上执行 ...

  6. 巨杉Tech | SequoiaDB数据域及存储规划

    1 背景 近年来,企业的各项业务发展迅猛,客户数目不断增加,后台服务系统压力也越来越大,系统的各项硬件资源也变得非常紧张.因此,在技术风险可控的基础上,希望引入大数据技术,利用大数据技术优化现有IT系 ...

  7. 基于VMware_vSphere的银行虚拟化平台设计 ——网络存储课程设计

    一.引言 随着银行业务量的不断提升以及客户数量的持续增长,银行数据库和应用的数量也随之扩大,因而服务器的使用数量也相应增长.过多的物理服务器导致巨大的性能浪费,银行的运维成本不断攀升,如何使服务器性能 ...

  8. 基于VMware_vSphere的银行虚拟化平台设计 ——网络存储课程设计

    一.引言 随着银行业务量的不断提升以及客户数量的持续增长,银行数据库和应用的数量也随之扩大,因而服务器的使用数量也相应增长.过多的物理服务器导致巨大的性能浪费,银行的运维成本不断攀升,如何使服务器性能 ...

  9. 华为云计算IE面试笔记-谈谈对华为私有云Fusion Cloud规划设计的理解(私有云交付)

    1. 客户调研:分析客户现网中的拓扑,了解客户的生产环境.虚拟化平台.硬件设备.软件.网络 分析客户需求:了解客户具体想要实现的功能.能力,根据客户的需求去进行部署 2. 选择合适的网络类型:type ...

最新文章

  1. 敏捷爽畅模型及其演变——Diana Larsen专访
  2. TensorFlow练习18: 根据姓名判断性别
  3. spring集成mongodb通过aop记录业务日志
  4. html5--6-59 其他常用CSS属性
  5. 一文读懂汇编程序的多个分段的程序--详解
  6. day 31 进程的其他方法 进程锁 进程队列
  7. c语言自增自减5运算符详解,巧用C语言中的自增自减运算符
  8. 网络杂谈, Docker, MongoDB
  9. c语言经典算法——查找一个整数数组中第二大数
  10. Deppin系统 Liunx显示器分辨率异常解决方法
  11. 11.C 语言连接 MySQL
  12. 在网页上获取当前日期,数字时钟
  13. 从零开始的FPGA学习4-比较器、全加器
  14. Istio:Mixer功能架构与实践
  15. 1000瓶药水和10只老鼠的问题及其扩展
  16. 怎么将抖音上的多个视频合成一个视频
  17. 身份证实名认证API接口介绍
  18. 人工智能(机器学习)学习路线
  19. hdu-1052 Tian Ji -- The Horse Racing
  20. asterisk拨号规则(包含匹配规则说明)转

热门文章

  1. linux java ssl_linux系统下安装ssl证书(tomcat)
  2. 常用的数据结构_动态图展示 6 个常用的数据结构,一目了然
  3. mysql 创建表格time类型_记一次关于 Mysql 中 text 类型和索引问题引起的慢查询的定位及优化...
  4. html动态生成按钮事件,javascript 动态生成按钮并添加事件时为什么不响应?
  5. 最小的JAVA WEB SERVER源程序 可正常運行
  6. 解决一个输入框可输入多个条件进行查询时,后端该怎么接收参数以及SQL语句如何写
  7. 在CentOS7上安装vim编辑器报错无法解析阿里云主机
  8. 无心剑随感《译诗但求达意传神》
  9. 大数据学习笔记07:分布式文件系统HDFS
  10. 【BZOJ1057】【codevs1428】棋盘制作,悬线法