当前位置: 首页 > 科技观察

微软大爱Linux:Linux动态内存配置及时备份

时间:2023-03-18 15:34:27 科技观察

【引自Winclient的博客】Linux动态内存配置  动态内存配置是Hyper-V中可以使用的技术之一,如果你启用了这项技术,Hyper-V会根据GuestOS所需的内存大小自动预留或释放物理内存。当开启动态内存时,可以收集GuestOS实际没有使用的内存空间。这样可以更好地利用内存,增加单个HostOS上运行的虚拟机数量,提高虚拟机的整体密度,实现更高的硬件利用率,并降低每个虚拟机的成本。动态内存配置技术适用于Windows和Linux来宾操作系统,甚至可以在单个Hyper-V主机上使用这两种操作系统的混合配置。  动态内存配置是一种在各种混合环境中最大化内存使用的技术。Hyper-V将减少使用较少内存的来宾操作系统,并将其分配给使用更多内存的来宾操作系统。而Hyper-V会自行进行内存的配置和调整,不需要管理员进行调整。  如果客户端操作系统当前的内存需求已经达到一个稳定的水平,此时动态内存的好处就不会很明显了。如果您的配置稳定,我们建议您关闭此技术。此外,客户端操作系统上的某些程序会绕过操作系统,尝试使用所有分配的内存进行自己的规划和管理。如果有这种自行规划内存配置的程序,建议不要启用动态内存,因为这样的程序可能会与Hyper-V提供的技术发生冲突。最常见的例子是大型可伸缩数据库和一些Java应用程序服务器。  Hyper-V中的动态内存技术支持大多数Linux发行版,但在FreeBSD上尚不支持。这部分大家可以继续关注TechNet上的LIS/BIS技术表,看看哪些发行版已经支持动态内存技术了。  动态内存如何工作?  动态内存是使用两种相互独立的技术实现的:执行“热添加”和“气球”。要理解这两项技术,我们先来看看Hyper-V允许你在虚拟机中设置三个动态内存配置参数:内存大小。  ◆***内存限制-可以从该虚拟机中的动态内存配置的最大内存大小。  ◆最小内存限制-最小内存是动态内存配置,需要给这个虚拟机的最小内存大小就是最大内存。  通常初始内存会在最大内存限制和最小内存限制之间。  前面提到的“Hot-add”技术是当虚拟机对内存使用的需求增加时,会逐渐增加虚拟机的可用内存,直到最大内存限制。并且这种方式只会逐渐增加虚拟机可用的内存限制,但是没有办法实现“Hot-remove”,也就是说这种方式只能增加内存而不能回收未使用的内存。  并且从虚拟机回收配置的内存大小是使用“气球”技术。这是因为LIS中的动态内存驱动向客户端操作系统声明,这些内存必须留给LIS使用,所以在Linux客户端操作系统上是没有办法使用这些内存的。然后LIS内存驱动会将LIS占用的内存返回给Hyper-V,这样Hyper-V就可以配置为其他虚拟机使用。这个操作不会减少原来Linux客户端操作系统的总内存容量,但是Linux客户端操作系统认为内存应该作为一些程序的缓冲区。因此,Ballooning技术不会将其Linux客户端操作系统看到的实际可用内存空间减少到小于最小内存限制设置的值。  气球技术还可以将可用内存分配回虚拟机。当Hyper-V决定归还已用内存时,LIS会将之前申领的内存空间归还给Linux客户端操作系统。当虚拟机内存需求增加,Ballooned内存已经归还时,Hyper-V会使用Hot-add为需要的虚拟机分配更多的内存。  动态内存配置示例  下面来看看动态内存的配置过程。我们用下面的例子来解释这三个步骤:  ◆当一个虚拟机启动时,它的内存大小将配置初始内存设置的内存大小。  ◆虚拟机内存需求增加,Hyper-V通过Hot-add技术增加虚拟机内存。  ◆虚拟机对内存的需求较少,Hyper-V通过Ballooning技术释放空闲内存。  以上三个步骤的过程可以从几个方面来观察:◆从内存配置概要图上显示当前的内存配置状态。 ◆通过Hyper-V管理器中的内存页面查看内存状态。 ◆Linux下使用free-m命令查询内存状态。  前两种方法是从虚拟机观察内存消耗情况,第三种方法是从客户端操作系统内部观察内存使用情况。  第一步,虚拟机开机后,没有明显的程序消耗内存。根据虚拟机设置的初始内存配置相应大小的内存。此时在Hyper-V和Linux客户端操作系统中可以看到相同大小的内存,但需要注意的是Linux中已经为BIOS预留了32MB的内存用于其他用途。  第二步,虚拟机内存需求量很大。这时Hyper-V会开始通过Hot-add技术为虚拟机分配更多的内存。可以看到在AssignedMemory字段中显示的大小增加了,在Linux客户端操作系统中也会相应增加(32MB仍然保留给BIOS使用)。  第三步,之前的耗内存程序完成计算,内存占用减少。这时Hyper-V会开始使用Ballooning技术通过LIS回收内存,此时Hyper-V中的Assignedmemory会开始下降。但是在linux客户端操作系统查看内存状态,并没有什么变化,只是在高内存使用时增加的额外内存大小仍然存在。虽然Linux客户端操作系统可用的内存看起来没有变化,但实际上,在亮绿色块中,它被LIS占用并声称被LIS使用,以至于Linux客户端操作系统认为它被用作缓冲区。如果所有这些亮绿色块都被Linux使用,并且Linux客户端操作系统的内存需求再次开始增加,它将返回到步骤1并使用Hot-add为虚拟机配置更多内存。  Linux及时备份  接下来说说另一个功能,及时备份。即时备份允许您创建Linux虚拟机的完整备份,包括其虚拟磁盘驱动器,而无需停止或关闭虚拟机。该功能主要是为了确保您在生产阶段使用的环境能够保持最佳的正常运行时间。  文件系统的备份一定要保持一致性。当执行备份操作时,Linux客户端操作系统上的文件系统会将内存缓冲区中的数据写回虚拟磁盘。这个动作是为了确保操作系统已经将所有数据写回磁盘,否则从备份文件恢复虚拟机时可能会遇到数据不一致的情况。  通过上面的例子来看看及时备份是如何实现的吧!  ◆要求Hyper-V通过微软或第三方厂商提供的备份软件备份一台或多台虚拟机。  ◆Hyper-V通过LIS内部的VSS驱动,与Linux虚拟机进行通信,启动备份过程。而这个叫做VSS的驱动其实是因为它的一些功能类似于Windows中的“VolumeShadowCopyService”而得名。它们并不相同,所以不要将这两个名称误认为是同一种技术。  ◆VSS驱动与Linux用户空间的VSS服务进行通信,VSS服务会向Linux发送请求挂起文件系统,并将内存写回虚拟磁盘。  ◆Hyper-V会建立一个备份检查点(Checkpoint),告诉LIS系统状态可以unpaused。Linux文件系统只在第三步和第四步暂停操作,足以回写内存中的数据并建立虚拟机检查点,通常这个动作不会超过2秒。  ◆WindowsVSSinHyper-V会为虚拟磁盘创建一个快照卷(VHD/VHDX)。  ◆备份软件会将此VHD/VHDX复制到其他存储空间。  总结  当您在Hyper-V上运行Linux时,动态内存配置和及时备份是非常重要的功能。这两个功能都需要Hyper-V主机和来宾操作系统之间的密切协同处理。而现在微软已经将这两个特性带到了Hyper-V和Linux中。