我有一台Windows Server 2008 x64标准虚拟机,它运行在带有硬件RAID控制器的Perc 6 / i机器上,机器上有一块电池。
尽我所能提供额外的performance,我想我应该禁用这个。 这很危险吗?
我的理解是,电池备份写caching提高了主机操作系统的性能,告诉它写入完成时,他们仍然坐在闪存等待写入。
但是,我不明白这对绩效会有什么不利影响,但是,是否有一个获得(甚至是微乎其微的)使其失效的能力?
有机器有备用电源。
以下是一个屏幕截图:

无论何时Windows应用程序正在将数据写入磁盘,都会先将这些数据写入主机内存。
数据在内存之后立即返回“正常”写入请求,并创build一个表明该数据需要刷新到持久性存储的队列条目。 一个称为Lazy Writer的机制可以确保这个队列正在被周期性地处理(默认情况下,每秒钟有1/8的队列被懒惰的写入器刷新)。 这是通过取消选中“在磁盘上启用写caching”而禁用的机制 – 每个写请求都需要等到存储设备“确认”写入请求后才返回。
具有数据完整性(数据库,文件系统驱动程序)特定要求的应用程序确实可以select更加智能的caching方法。 对于需要立即持久化的写入(NTFS日志,数据库事务日志),可以通过写入指定FILE_FLAG_WRITE_THROUGH 。 在这种情况下,在数据实际提交到持久性存储之前,写入调用将不会返回。 除非您激活导致cachingpipe理器忽略FILE_FLAG_WRITE_THROUGH的“启用高级性能”checkbox,否则立即返callback用并将其作为每隔一个“正常”写入传递给惰性写入器。
由于还有两层caching1 (第一层是运行KVMpipe理程序的主机操作系统,第二层是具有BBWC / FBWC的存储控制器),事情变得越来越复杂。 这些层中的每一层都会为您提供类似的select,并且每个写入请求必须通过所有这些层,链中最薄弱的环节将有效地保护您的数据的完整性。
广大应用程序开发人员通过调用了解并理解caching和写入的效果。 所以真正关键的数据部分是用FILE_FLAG_WRITE_THROUGH写的,而没有用这个标志写的东西都可以被认为是安全的,可以被caching在易失性存储器中。 当FILE_FLAG_WRITE_THROUGH在任何层被忽略,并且在停电或软件故障的情况下数据实际上丢失时,故障开始。 这种情况通常会导致文件系统和事务日志损坏,从而导致不可预知的结果,甚至可能需要从备份中恢复,所以显然应该避免这种情况。 如果您的存储控制器的caching是“电池备份”或“闪存备份”,则在一定程度上可以认为是“非易失性”,所以通常认为使用其写回caching即使是直写也是安全的请求2 。
底线:除非您正在处理不使用FILE_FLAG_WRITE_THROUGH的破坏应用程序,而是需要每次写入都是持久性的,否则通常“安全地在磁盘上启用写入caching”是安全的。 因为大多数调用应该由存储控制器的写入caching来处理,并且几乎立即返回(但是可能会有额外的开销,而caching大小将受到控制器的DRAM的限制),禁用此操作对于您的情况不会造成太大的影响。 您绝对不应该在需要正常运行时间或需要数据完整性的系统上 “启用高级性能”或“closures设备上的Windows写入caching缓冲区刷新” 。
MSDN Libary – Windows文件caching
Smallvoid博客 – 描述硬盘caching
实际上,在硬盘本身还有另外一层caching,但是在大多数情况下,无论驱动器的caching设置如何,写入请求都会得到遵守。 一些闪存驱动器对于这个规则是值得注意的(读取中断),但是对于闪存SSD,写入操作通常被caching并报告为立即写入,但只是提交给易失性caching – 这不仅仅是出于性能方面的原因,而且也是为了合并写入并延长寿命闪存单元的时间。 闪存固态硬盘的“企业”版本通常有电容器,这将确保驱动器有足够的电力来caching闪存单元,“消费者”的版本往往不提防这些。
2在任何情况下显然都不安全 – 如果电池有缺陷并且未被发现,如果控制器的逻辑处理电源故障情况存在错误,如果停电时间超过电池能够提供电力的时间,如果FBWC的超级电容或闪存单元崩溃,数据将会丢失。 但是这些事件通常很less会冒险。
您可以安全地禁用缓冲区刷新(提前写入caching) – 这是写回caching..如果..只有如果你有三件事情:
计算机/服务器本身有一个UPS备份。 这样可以防止突然断电而导致未写入或部分写入数据。 当然,这种情况可能发生在没有写入caching的情况下,只要数据正在写入即可,但机会很less。 UPS保持电脑
但是,这并不能保护您免受硬锁,无法将caching完全转储到磁盘的BSOD(只有大约50%的BSOD可以转储caching),突然重启(操作系统或硬件出现问题,系统立刻重新启动)..最后是即时关机…这是罕见的,但通常是由CPU或CPU或芯片组过热,而BIOS会closures电源,以防止损坏
如果硬盘驱动器THEMSELVES有自己的备用电源,可以帮助解决这个问题。 Windows中的任何caching数据都将丢失,但是驱动器ITSELF上的caching将被写入。
随着现代版本的Windows Vista中,7,8.x等您可以select只读,写通过,写回(先进)。 如果你有一个RAID控制器,你可以控制控制器和HD本身的caching,通常是OFF,READ ONLY,WRITE BACK,WRITE THROUGH …但是,除非WINDOWS具有相同的控制器/高速caching写回caching设置启用。
备份你的电脑。 只要使用NIGHTLY增量执行每周或每月完整备份,然后每隔4小时增加一次特殊的快速增量备份关键数据(此备份运行时间不应超过10分钟,以免影响性能)。 如果你做1,2和3,我会说ENABLE WRITE BACK ….特别是在家用电脑上…
作为一个企业….我会坚持WRITE THROUGH ..它不会给几乎回写的好处(写回速度快写入5倍的速度,因为它不仅告诉操作系统/程序,数据有已经被写入,caching以最OPTIMAL / FAST的方式将数据写入磁盘以防止读/写磁头抖动等)。 所以回写可以做惊人的快速的事情…但对于一个企业,你最好的是一个RAIDarrays。无论是简单或复杂(嵌套)
你可以去RAID 0绝对速度,但如果有问题,你有宕机时间,必须从备份恢复…你可以去RAID 5 …即使1驱动器OUTRIGHT FAILS,一切将继续正常运行(但较慢),直到你更换驱动器(大多数服务器是可热插拔的 ..和许多家庭RAID系统,让你有一个备用驱动器 – 如果你select的选项,可以立即添加在失败的情况下)
Raid 5的读取速度非常快,但是由于它必须写入CRC位(条纹),所以在写入时性能会受到影响。
其他选项是NESTED袭击..
例如..你可以采取3个驱动器,使他们的RAID 0 …然后采取2更多3驱动器,并使他们突袭0 …然后你采取3个RAID 0卷,并将其组合成1个RAID 5卷。 这将允许一个RAID 0arrays失败,这一切都继续工作..你可以在一个R0arrays中的所有3个驱动器失败,你也可以…但是,如果arraysA中的1个驱动器同时失败一个驱动器arraysB ….它已经完全没有了,它是从备份时间恢复…
你也可以把MIRRORING和raid 0结合起来,例如你在raid 0 2-6的驱动器上,然后使另一个raid 0驱动器匹配。然后镜像它们。 这对于镜像仍然需要小的写入命中,但镜像实际上加快了读取速度,因为它从驱动器/arraysA中抓取一块,并在同一时间从驱动器/arraysB抓取下一块。
我对ANYTIME @ HOME的最佳build议是这样的:
MIRROR你的C:(Windows驱动器)..假设Windows是在C …即使它是一个SSD ..镜子它! 这不会帮助腐败..备份是为了..但它会为您节省很多硬件故障宕机
然后让自己成为一个D驱动器…使你的巨大,快速的强大arrays…并做到这一点你想要它…我的D:驱动器是一个RAID 5arrays的5个4TB的HD …是的,如果任何失败..所有数据丢失了…但我每个月一次完整备份和增量备份每天和一个特殊的每4小时一个USB 3.0的RAID盒,可以容纳多达6个4TB驱动器(这就是我的这是RAID 5)..我不build议D SSDS! 混合HDDSD是好的..但1)你不会find4TB的SSD ..如果你这样做,他们花了一个“财富”。 使用RAIDING @ SATA 3级MINIMAL ..你可以得到比SSD更快的硬盘。
然后让自己的E:驱动器…使它成为一个非常小的SSD …不超过100-200GB ..或任何最小的是你可以find
现在,为什么所有这些驱动器的信…我会解释:
C:是镜像的,写的很慢,快速阅读..用于WINDOWS只…不要安装任何东西在这个驱动器,除非程序需要IT ..即使你安装一个程序,游戏到D,它往往把C的东西,即使你不想要它。 重点是你不想C:重载加载窗口,然后加载所有的服务PLUS预加载你的程序需要的所有东西PLUS预caching所有从C:/你可以EASILY结束了一个系统,让你等待5 -20分钟后停止抖动,然后才能使用。 C:应该是一个300GB大小的SSD ..这将有助于启动速度更快。 随着D:上安装的所有东西,随着窗口的启动,程序需要加载的东西将来自D:vs C:并承担C的负载:…在login屏幕出现后大约15秒钟内进行超级提取。 。而且你不想要所有这些C即使它是一个SSd …你想它只加载Windows的东西,让它捶D,因为D:应该在RAID 0或5configuration至less3个或更多的驱动器。 这样你就可以立刻login窗口,窗口就会变得活泼起来
如果你有很多内存(16-32GB),并且你在registry中有largediskcache ,那么windows可以很容易地花费一个小时来预先caching一些东西,但是如果你开始使用PC
D:驱动器…把所有东西放在这里..这是你的主要存储库..有Windows重新安置文件,图片,音乐,联系人等文件夹到D上的文件夹:所有的东西D:你的程序将加载快速和阅读并写入FAST
E:基本上只是一个页面文件..但你也可以configuration它,如果你有文件历史备份的驱动器的Windows 8 …这种方式,你有你的常规备份和Windows文件的历史,可以立即恢复损坏,意外删除的文件等
交换文件…你想每个驱动器上的一个..为什么? Windows使用多个交换驱动器有点像RAIDarrays。 它将使用它们并行读/写,如果一个驱动器处于BUSY状态,它将EXCLUDE从驱动器驱动器进行分页活动,直到使用率下降。
对于C:驱动器,我只推荐最低..这取决于内存(我假设一个64位操作系统,因为每个人都应该在64位Windows现在一天)….对于8GB的系统,最小是400MB,16GB = 800MB,32G = 1.6GB ..原因是最小尺寸是需要一个小的/迷你转储的蓝屏事件,让Windows写一个文件,可以帮助解释出了什么问题。 您可以select不使用C:上的ALL文件来提高系统驱动器的性能。 只要你不关心BSOD报告,这是完全没问题的 – 尤其是如果你从来没有或很难BSOD
D:将是一个大的驱动器和FAST ..它可以处理分页活动,即使你使用它。 但是,一旦驱动器活动达到100%,它将缩小使用分页文件…但这个页面文件应该更像8GB
E:把它变成8GB
这将给你16GB的页面文件空间,它可以并行使用D&E。 如果D是繁忙的,那么它只会使用E:和E:因为它是一个SSD,所以FAST即使E是一个HDD或HDDSD,我仍然build议这个设置。
最后一件事情要考虑..因为你的大部分活动将使用D:..你可能会把一个好的大小的页面文件放在C:因为如果你在D上使用一个INTENSE程序,
无论你有4.8.12.16.32.64GB的内存大小,8,8,8在矫正尺寸上都有一点点小问题。 我会去4,4,4或5.5.5 12或15GB的页面文件。
很多人会说,如果你有16 + GB的RAM不使用页面文件 – 错误!
你可以用这种方式设置窗口,但它会忽略你,并在所有的HD上设置临时页面文件,而你不知道它。 许多程序是硬编码交换空闲代码到页面文件…没有页面文件打破这个代码。 Windowsdevise为将空闲代码放入分页系统,为HDDcaching留出更多空间。 所以真的没有办法通过closures分页文件强制所有的代码ram。
通过实际使用页面文件…你正在加快你的系统
另一种select是准备提高..许多人反对它..但是我是一个巨大的支持者…它只能在HDD或HDDSDs上工作…它不会在SSD驱动器上工作…没有一点SSD作为它彻底比拇指驱动器快得多….
但一个好的/高品质的USB 3.0的驱动器,32-64 GB可以读/写在150-200MBytes /秒….通常需要许多SATA 3 HDDSD在RAID 0达到这个速度水平。
我使用它…它只用于我的D驱动器..它是64GB,你必须NTFS格式化,否则,它被限制为4GB ..和64GB是最大的RB驱动器可以…一旦我激活这个,我的系统花了2-3小时加载它…与较慢的设备,Windows只放小,快速阅读文件…与FAST RB驱动器,Windows 8.x将在那里存储整个文件..作为在1,2,3,5等GB文件中。 我的RAIDarrays可以读取175MB /秒,写入150MB秒..我的RB驱动器是200/200 …所以Windows加载64GB的数据。
我有32 GB的ram ..所以Windows把要求最高的文件放在RAMcaching中…然后是不是那么高优先级的文件(或者如果某些文件不断被踢出RAMcaching)…..在情况下像这样,windows可能会在这两个位置放置一个高优先级的文件。
人们说RB在我的系统上是一个废物…错误..当我改变Dragon Age Inqusition中的区域而没有RB驱动器时,大约需要60秒来加载新区域(当数据没有被caching到RAM时)。但是如果它已经在RB驱动器上,而不是在RAM中,它将在30秒内加载。 与以前版本的Windows不同,Windows 8.x在RB驱动器上创build数据,并且caching将在关机,重新启动,hibernate和hibernate之后保持不变。 但是,如果Windows认为它是由于任何原因被删除,它擦拭它,并重新开始….
一般来说,这是完全正确的。 本质上,要写入的数据存储在物理磁盘附近的某个存储器中,可能位于磁盘控制器,RAID控制器或存储设备控制器上。 在写入实际的物理磁盘之前,甚至可能在高速caching卡上。
默认情况下通常是一个可接受的解决scheme,因为除非服务器是数据库服务器或其他高磁盘stream量服务,否则电源故障不太可能影响太大。
通常有两件事情需要考虑:
我只使用了iSCSI设置中的第二个checkbox,其中包含两个板载控制器的专用SAN控制器以及冗余电源,一直到断路器。 我们在SAN上写数据库和虚拟机数据,所以任何功耗都不是好事。