Citrix PVS架构和工做原理

 

Citrix PVS架构和工做原理缓存

Citrix PVS产品一直在Citrix的产品体系中存在着重要的位置,在中大型的VDI环境中,绝大部分都是基于PVS架构部署的,足以证实PVS架构的稳定、高效和便捷。安全

本文从底层架构和原理的角度分析了Citrix PVS组件,使得咱们可以得窥PVS架构稳定、高效和便捷的背后,支撑的机制究竟是什么?服务器

 

1、Citrix PVS简介



Citrix Provisioning Services组件简称Citrix PVS,是经过建立一个标准的虚拟机镜像,该镜像就如同一个虚拟磁盘同样,里面包含了虚拟机的配置信息以及操做系统,并将其存储在PVS服务器或网络中的存储空间中。同时PVS对该虚拟磁盘进行管理,将其分发给用户的目标设备所使用。用户在使用的时候,此标准镜像经过流传输到服务器或桌面目标设备中。PVS流技术推送技术将单个共享磁盘镜像实时地置备或从新置备计算机。这样将使管理员彻底不须要管理和修补各个系统。全部镜像管理均在主映像上完成。每一个系统的本地硬盘能够用来实现运行时数据缓存,在某些状况下,还能够彻底从系统中移除,从而下降电力消耗、系统故障率和安全风险。网络

Citrix PVS技术起源于无盘技术,而无盘技术最先是Novell Netware3.11NovellNetware 3.12做服务器的操做平台,工做站以IPX方式登陆。当时咱们称它为IPX无盘网络,主要是用于教学网络,应用程序主要以DOS为主。从1996年至1999年,以RPL方式登陆的无盘网络占绝大多数,服务器端能够选择Novell Netware 4.1Windows NT 4.0 Server,在此期间,因为微软的大力支持,在它的Windows 95产品系列中,推出了网络版的Windows 95即所谓的彻底版,它包含了网络安装命令Netsetup,以后的几年RPL几乎成为了无盘网络的代名词。以后,Intel推出PXE技术,叫作PXE远程无盘引导技术,配合Qualystem公司的LiteNet,最初选用台湾DTK公司的E-Terminal,成功地实现了Windows98的远程启动和运行,并使可靠性和稳定性都大大提升。Windows 98的各类应用软件只需经过简单的几个步骤便可加到无盘工做站上,并可随时升级和扩充,其简便的安装方式和构架,很快获得了业内人士的承认,并普遍流行起来。架构

PXERPL的升级品,RPLPreboot Execution Environment的缩写,意思为预置启动环境。它们的不一样之处在于RPL是静态路由,而PXE是动态路由。其通讯协议采用TCP/IP,与Internet链接高效而可靠。相似RPLPXE以及BOOTP等都是远程启动协议,如今的Windows已经再也不支持RPL这类比较老的协议了,目前在Citrix PVS架构下用到的协议就是PXEBOOTP这两个协议。至于这两个协议有什么区别?工做原理是什么?本文暂且不表,待后续有时间再单独说明或者读者本身去网上查找相关资料了解。ide

 

2、Citrix PVS架构



说道Citrix PVS的架构,其本质上就是存储的架构,里面还包含了Windows的缓存机制、硬盘控制器的机制和远程启动协议等内容集成组合而成的一个构思巧妙的产品。在这里,我想必须从计算机的基本原理开始提及。咱们得理解在传统的笔记本或者台式机上,咱们计算机的基本工做流程,而后展开PVS架构以后,咱们才能更清晰的明白PVS的架构和工做原理。函数


2.1、传统计算机基本读写架构



以下图所示,在一台计算机内部,咱们的操做系统首先是须要安装在计算机上的硬盘上,而后,硬盘由计算机主板上位于南桥(IO桥)上的硬盘控制器管理。处理器不会直接跟硬盘进行通信,而是经过硬盘控制器来进行。性能

0?wx_fmt=png

在传统的计算机硬盘架构中,输入(例如键击或鼠标点击)被传递到服务器并存储在计算机的RAM上。而后处理器须要将这些数据按照指令进行处理,完毕以后写回内存。若是指令有将数据存储到硬盘的要求,处理器则根据指令请求硬盘控制器; 硬盘控制器响应处理器的请求,经过DMA的方式将内存地址的这些数据传递到硬盘中。同时,若是用户还须要产生输出的操做,那么硬盘找到所请求的数据,而后将其传递到硬盘控制器,硬盘控制器传递回RAM RAM将数据和指令发送处处理器,在那里将其处理为以屏幕更新的形式发送给用户的输出。spa

以上就是大致的硬盘输入输出数据的流程。操作系统

接下来咱们详细解释下上述的流程:首先这个键盘的驱动程序会将输入的数据向操做系统申请RAM空间来进行存储,而后将输入的数据存入到给到的内存地址空间当中;而后咱们计算机的外设(键盘或者鼠标)就须要经过一个中断信号给处处理器让其去处理当前这个中断事件。固然外设在发起中断以前,须要有操做系统容许,当知足了中断条件以后,处理器就会响应中断,转入中断程序处理。中断程序里面告诉了处理器须要去内存的那个地址段执行操做。这里中断是指当外设须要与处理器进行信息交换时,由外设向处理器发出请求信号,使处理器暂停正在执行的程序,转去执行数据的输入/输出操做,数据传送结束后,处理器再继续执行被暂停的程序。在计算机基本架构中,传统的外设好比键盘/鼠标输入等外设就须要采用中断方式和处理器进行信息交互。好比电话响了->放下书本->接电话->继续看书这一个过程,就相似于处理器中断的处理过程。

上述咱们说,键盘经过中断的方式让处理器去处理输入到内存中的数据。处理器在响应中断以后,处理器所要作的工做就是将当前内存地址中的这段数据读出来,根据操做指令稍加改动或者根本不动,而后又写入到内存的其余地方去。若是操做指令是须要写入到硬盘上,那么操做系统在写入到其余内存空间以后,处理器会像硬盘控制器发起一个存储的请求,告知硬盘控制器在内存的某个地址段的数据须要存储到硬盘上。硬盘控制器在接受到了这个处理器的请求以后,会这个请求翻译转换为SCSI指令下发到硬盘(硬盘只认识SCSI指令),硬盘接受到SCSI指令以后,经过其自带的硬盘故固件代码解析SCSI指令,获取到内存地址段的信息,而后直接经过DMA和内存进行数据读取请求。DMA方式是在存储器和外设之间、存储器和存储器之间直接进行数据传送(如磁盘与内存间交换数据、高速数据采集、内存和内存间的高速数据块传送等),传送过程无需CPU介入。

这个过程就没有CPU的参与,硬盘将数据读取出来存储到自己的存储空间以后,数据输入的过程就完毕了。可是若是用户的键盘输入是给Word应用程序进行输入或者是经过QQ回复消息,那么以上的过程就又有所不一样了。

若是是在编辑Word应用程序的时候进行的输入操做,那么CPU在执行完毕以后,是不会直接将其联系硬盘控制器保存到硬盘上的,而是经过WindowsAPI保存到缓存文件夹中。

总之一句话,在传统的计算机硬盘架构中,用户的输入首先传递到计算机的RAM,而后再由处理器处理以后经过处理器联系硬盘控制器,由硬盘控制器传递给硬盘存储。读也是相似的,全部的读请求先经过处理器,有处理器请求硬盘控制器,硬盘控制器去发送读取指令给到硬盘,而后由硬盘和内存之间进行数据交换,将数据置换到内存或者缓存中后,再经过处理器调用相应的函数(投影到用户的显示器上仍是输出到网卡)。

 

2.2PVS模式读写架构



PVS体系结构中,输入(例如击键或鼠标点击)会传递到目标设备,并存储在目标设备的RAM中。与传统硬盘架构不一样,来自硬盘驱动器的指令请求发送到目标设备上的NIC。而后PVS将请求发送到硬盘控制器,那么很显然的,在PVS这种架构下,硬盘控制器不在是操做系统中的那个硬盘控制器,而是PVS服务器。而后,PVS服务器从存储设备找到该目标设备的相应硬盘(虚拟磁盘),并转发该数据请求。在硬盘上找到正确的数据后,发送回PVS服务器,而后PVS服务器发送回目标设备上的NIC。该数据被发送回目标设备的RAM,而后以屏幕更新的形式被处理成输出。

其流程以下图所示:

0?wx_fmt=png

通过上述的比较,咱们大致能够知道,PVS就是放大版的硬盘控制器,而咱们的vDisk就是传统计算机的硬盘。CitrixPVS架构就是将传统计算机的硬盘和硬盘控制器独立出来,而后硬盘你们共享,全部的读写操做都由PVS这台硬盘控制器来进行控制。

在目标设备和PVS服务器之间创建通信链路,经过远程的协议将CPU内存和远端的硬盘以及硬盘控制器链接起来,而后目标设备运行的时候,经过该链路去读取远端的操做系统,PVS会将包含系统内核loader及压缩过的内核传递到目标设备,这个系统内核文件在目标设备内存模拟成磁盘,从这个模拟磁盘启动。当咱们由读写IO时,首先读写IO都会存储在目标设备的RAM中,通常地,操做系统都会有缓存机制,将这些IO数据置换出来存放于缓存文件中。那么这就涉及到了Windows系统的缓存机制。

 

3、缓存机制



在这一块,咱们要完全地明白PVS的目标设备数据从RAMPVSvDisk之间以及目标设备本地的缓存磁盘之间是如何进行相互协做的?咱们就不得不去了解Windows的内存管理和缓存管理。针对Windows的内存管理和缓存管理,国外的《Windows Internals》是最权威的资料,目前该版本的最新翻译本国内名称为《深刻解析Windows操做系统》,不过较为遗憾的是,目前中文版只出版了第6版上册,下册没有出版,该版本翻译太困难了,必需要要具有深厚的操做系统功底,并且英文不错才行。而且是基于Windows 7 WindowsServer 2008 R2系统为蓝本进行解释的。国外最新的版本是基于Windows 8.1 and Windows Server 2012 R2的《Windows Internals 7》,国内还没有见到翻译版本。这是一本经典的书,是通向Windows高手之路的必备宝典之一。

接下来简要介绍一下Windows的缓存机制:

现代操做系统都在各个级别应用了高速缓存的策略,从而能够平滑化物理硬件的访问差别。通常的高速缓存分为两级,处理器和内存之间通常会设置高速缓存,可是这通常是硬件CPU或内存实现的,还有一个高速缓存存在于内存和磁盘之间,这个通常由操做系统实现,固然为了给应用程序提供灵活的策略自定义机制,在某些状况下也能够由应用程序实现高速缓存,好比Oracle,固然,这必需要求操做系统有直接IO的机制。

Windows的缓存机制由Windows中的缓存管理器来实现。其设计理念在于设计一个单独完整的高速缓存,因此它不能和文件系统相关,由于系统层次越往下分支越多,因而乎,Windows的高速缓存只能在文件系统之上实现。缓存管理器是Windows执行体中一个清晰的组件,并且他和系统虚拟内存管理器密切合做。缓存管理器为数据提供一致的全系统范围的数据缓存,这些缓存被适当关联的文件系统驱动管理,并与虚拟内存管理器和I/O管理器协同做业。他为文件数据执行预读。缓存管理器尝试根据每一个文件数据的应用程序访问模式来调整它的缓存策略。由于全部到被缓存文件的I/O请求都要通过缓存管理器,因此缓存管理器能够跟踪文件数据的访问模式。所以,若是一个应用程序读一个文件的前10K字节,缓存管理器将把接下来的64K字节文件数据预读进内存。随后,若是应用程序尝试获取这些数据,这些数据能够简单的从系统缓存中拷贝,得以免应用程序等待直到数据被从存储(好比硬盘)中读出。对于连续读文件操做,缓存管理器的预读功能能够带来明显的性能提高,由于在应用程访问哪些数据以前,数据已经被读入到系统内存里面。

在当一个文件以非缓存的形式打开的时候,对文件的读写都是非缓存的形式进行的,在操做系统中,将这种文件I/O的方式称为NonCachedIO,采用非缓存的形式进行文件的读写是不会涉及到文件缓存问题,处理相对简单,文件I/O的请求会直接经过文件系统驱动下发到相关的设备。当文件以缓存的方式进行文件的I/O操做时,状况就要复杂得多,不只要考虑到缓存的问题,还要充分考虑到操做系统中内存管理的页错误,为了更好地分析带缓存文件I/O的具体状况,下面将针对读、写文件两种操做进行详细的分析。

当对带缓存的文件进行读操做时,当请求达到文件系统驱动时,若是是首次进行读操做,文件系统驱动将会调用缓存管理器的接口为文件进行缓存环境的建立,若是缓存已经建立完成则向缓存管理器发起读请求,若是文件读写的位置对应的段视图不存在,缓存管理器为建立相关的段视图。当段视图存在后,文件缓存管理器将会从段视图中复制数据到用户缓冲区。这时若是段视图对应的文件内容并未读入,缓存管理器将向内存管理器发起页错误,内存管理器向文件系统驱动发起分页I/O读请求,文件系统驱动在接到分页I/O的请求时,将会直接下发请求给下层驱动设备并等待请求返回,文件系统驱动将分页I/O的结果返回给内存管理器,内存管理器完成页面错误的处理,将文件内容加载到缓存系统中。实际上缓存管理器并不知道数据是否在缓存,而由缺页来协助完成数据引进,因此,每次数据都是从高速缓存被复制进用户空间的(1.原本就在缓存;2.由缺页处理复制进缓存)。缓存管理器从缓存中获得文件内容,复制到用户缓冲区中,将请求结果返回给文件系统驱动,文件系统驱动返回给I/O管理器,I/O管理器将结果返回给应用程序便完成了整个读请求。

0?wx_fmt=png

当进行带缓存的文件写操做时,其它的流程基本相同,只有部分区别。好比在文件写操做时,对段视图的操做与读请求时相反,是将用户缓冲区中的内容复制到段视图中。在处理页面错误时,内存管理器并不发起写请求,而是释放部分的物理页面,为指定的段视图对应的虚拟地址分配物理页面,缓冲管理器完成数据的复制后直接返回。整个写操做中并未直接将数据写到磁盘外存中,而是操做系统闲暇或者须要时,在段视图中的内容写入外设存储中。

0?wx_fmt=png

除此以外还有许多关系Windows缓存管理器的东西,好比:缓存里面包含了 Page CacheBuffer Cache,每个 Page Cache 包含若干 Buffer Cache。内存管理系统和文件系统驱动只与Page Cache 交互,内存管理系统负责维护每项 Page Cache 的分配和回收,同时在使用内存映射方式访问时负责创建映射,并且映射也有不少讲究,这里不在作介绍。重点在强调一点的是,在Windows下,Page 的大小是通常都是4K。好了,关于Windows的缓存机制就介绍到这里,你们感兴趣其实能够去翻看我上述提到的书籍,我也是从该书里面拾取出来。

所以,Citrix利用Windows缓存管理器所提供的接口,经过在文件系统驱动之上开发Citrix相应的驱动,而后将本来发送到Windows环境下多是本地硬盘的数据根据策略或者规则发往Citrix PVS、目标设备的RAM以及目标设挂载的本地硬盘中。同时调用缓存管理的机制实现PVS的目标设备RAMPVSvDisk之间以及与目标设备本地的缓存磁盘之间经过IO重定向、缓存重定向等等实现相互间的交互和协做。

实际上从这个角度来讲,我认为Citrix PVS其实就是一个缓存,PVS是一个超级便宜的缓存,位于昂贵的存储系统和目标设备之间,目标设备想从存储系统读取数据就必须通过这个中间缓存的设备。从这个角度来看,PVS并不像咱们所指望的那么神奇!Citrix PVS就是利用了Windows的缓存机制。

相关文章
相关标签/搜索