延时写入

本篇详细介绍PrimoCache的延时写入功能。延时写入是PrimoCache的其中一个主要功能,又称缓写功能。它可以极大地提升整个系统的写入性能。只有在开启延时写入后,PrimoCache才能起到加速写入的作用,否则写入性能不会得到提升。下图红框所示即为缓存配置对话框中延时写入的功能开关以及相关选项。勾选“启用延时写入”选项后打开缓存任务的延时写入功能。

PrimoCache 延时写入功能

工作原理

PrimoCache在接收到Windows和应用程序发向硬盘的数据后,先把数据存储在缓存中,并向Windows和应用程序报告写入完成,然后在一定的延迟时间后再把这些数据写入到硬盘。对于Windows和应用程序而言,由于整个写入过程是在缓存中完成的,因此写入速度非常高。对于硬盘而言,由于延时作用,在缓存数据写入到硬盘时,1)同一地址上的多次写入可以合并为一次写入,2)相邻地址的随机小数据写入也可以合并为一次顺序写入,3)临时性文件如果已经删除则无需写入。因此可以极大地减少硬盘上的IO请求和写入数据量,并且提升硬盘写入速度,详细说明请参见此文。综上两方面所述,延时写入可以极大提升整个系统的写入性能。

写缓存空间

由于延时写入是通过缓存写数据来实现加速,因此该功能要求一级缓存和二级缓存这两者中至少有一个配置了写缓存空间。写缓存空间可以是共享缓存空间,也可以是独立写缓存空间。如果两者的缓存空间都设置为“100%读”,那么即使勾选了“延时写入”的功能选项,实际也不会有延时写入的效果。利用这个特性,您也可以控制是否在其中的一级缓存或二级缓存上启用延时写入。例如,为了减少SSD缓存盘上的写入磨损,您可能希望仅在内存缓存(一级缓存)上启用延时写入,此时您可以在启用延时写入功能的同时,将一级缓存设置成读写共享或一定比例的独立写缓存空间,而将二级缓存设置成“100%读”,这样设置后,只有一级缓存具有延时写入功能,二级缓存将不具有延时写入功能。关于缓存空间的更多说明,请参见此文

参数调优

当空闲写缓存空间足够时,延时写入的性能主要取决于一级缓存或二级缓存的写入速度。这个速度由硬件设备决定,与延时写入的参数无关。但是当空闲写缓存空间不足时,也即写缓存空间存满了待写数据时,PrimoCache会强制把缓存中的一部分待写数据写入硬盘,从而释放空间缓存新写入的数据。此时写入硬盘的操作叫做“紧急写入”。当有紧急写入发生时,写入性能会比较差,甚至可能低于硬盘本身的写入速度。因此延时写入参数调整的一个重要目标是避免紧急写入的出现,也就是避免写缓存空间用尽。

紧急写入和写缓存空间占用率可以在缓存统计数据中查看。下图红框所示部分都是和延时写入相关的统计项目。您可以查看写入到一级缓存和二级缓存的数据量(“写入L1/L2总计”)和实际写入硬盘的数据量(“写入磁盘总计”)。实际写入硬盘的数据量中又区分了紧急写入的数据量(“紧急”)和正常延时到期后写入的数据量(“常规”)。而项目“缓写数据块”表示当前待写数据块的数量,括号中的百分数表示了待写数据块在全部写缓存数据块中的占比,可理解为写缓存空间占用率。

PrimoCache 延时写入统计数据

写缓存空间占用率和写入负载、硬盘写入速度、写缓存大小以及延时时间有关。打个形象的比方,如果把写缓存空间看成是一个水库,写缓存大小即为水库容量,写入负载相当于入库水流量,硬盘写入速度则相当于出库水速,而延时时间则控制水库什么时候开始排放。在写入负载和硬盘写入速度不能改变的情况下,可以通过增大写缓存空间或者减少延时时间来降低写缓存空间的占用率,避免紧急写入的出现。

在不产生紧急写入的前提下,增大延时时间有助于减少硬盘上的写入,因为可以合并更多的待写数据然后一次性写入。不过考虑到下文提到的数据丢失的风险,延时时间也不宜过大。

风险和建议

开启延时写入后,由于待写的数据是先存储在缓存中,而不是实时写入硬盘,因此在突然断电、系统死机或崩溃等情况下,缓存中的待写数据不能被写入硬盘,就会造成这些待写数据丢失。待写数据中可能包括文件系统元数据,因此极端情况下甚至会导致逻辑盘上的文件系统损坏。由于缓存的索引数据是存储在内存中,因此无论是使用一级缓存还是二级缓存,数据丢失的风险程度是一样的。二级缓存上的待写数据并不能在重新开机后恢复到硬盘。基于上述风险考虑,我们建议仅在存储临时的、不重要的或可再生数据的逻辑盘上启用延时写入,比如下载盘、临时文件盘、有良好备份机制的逻辑盘等。配置了UPS电源并且运行稳定的系统也可以考虑启用延时写入。此外,缩小延时写入的延时时间也可以有效降低数据丢失的风险。

相关阅读