【IT168 技术】在上一篇Symmetrix缓存技术解读中,介绍了Symmetrix缓存中存放的数据类型以及DMX和VMAX的缓存机制。本篇将介绍前端主机I/O请求在Symmetrix缓存中数据的访问模式。
I/O访问模式
主机端发起了I/O操作以后,I/O读取或者写入请求传送到Symmetrix前端口。根据数据存在于缓存与否,以及读写类型,Symmetrix会将I/O操作分为以下几种情况:
1. 读命中(Read Hit):在这种情况下,如下图所示。当主机端发送I/O请求到Symmetrix以后。如果所请求的数据,已经存在与缓存中(可能是之前的I/O已经被数据加载到缓存中),Director会直接将缓存中的数据传送回主机。虽然数据在缓存中已镜像的方式存储,但是任何读取操作都只会读取其中的一份镜像。
2. 读取未命中(Read Miss): 在这种情况下,如下图所示,主机端I/O请求的数据没有在缓存中。相关的Director会从后端的磁盘上获取所需要的数据。一旦磁盘返回数据,Director中的后端Disk Adaptor会将相应的数据存放到缓存中,如果是缓存镜像,则后端Disk Adaptor会在缓存中写入两份数据。最后Director会将数据再发送给主机。读取未命中比读取命中消耗更多的时间,因为主机端必须等待Symmetrix从后端磁盘中获取数据。
因为从DMX-3开始的版本中,使用的缓存镜像机制。Enginuity也对于这种镜像缓存进行了优化算法。镜像缓存选择优化主要的改进是,Enginuity允许Director对于读取请求同时定位两个缓存Slot,但是只读取其中的一个。从而减少后端的传输开销。一旦缓存出现错误,也可以简单的再从磁盘中重读。这种优化对于大I/O的读取未命中会有30%的性能提升,
3. 顺序读和预读:预读机制用来产生额外的读取命中。当Symmetrix检测到两个数据读请求是从连续的位置获取的,则相应的后端Director会启动预读任务。后端Director会尝试先于前端主机的请求,从额外的Track中读取数据到缓存中,随着被存放在缓存中的数量增加,如果前端主机连续的读取顺序的数据,就会发现数据已经存在与缓存中了。当然,后端Director不会知道到底主机的顺序读会在哪里停止,一些预读工作可能会被浪费,不过鉴于读取命中的速度会比读取未命中来的高出血多,所以通过预读进性能提升还是非常显著的。
4. 写入命中(Write Hit):也叫快速写入,写入命中的情况发生在缓存中有足够空间用来存储需要写入的数据。对于主机端的写入请求,后端Director找到可用的缓存Slot,然后将数据传输到缓存中,然后立刻给主机写入完成信号。主机端即认为写入已经完成。对应的缓存Slot会被标记为写入等待状态(Write Pending),直到数据写入到物理磁盘以后才能够再被使用。如果缓存是镜像的,Director需要在镜像中分别写入数据。写入到后端磁盘(de-stage)是批量进行的,通常会处于比较低的优先级下进行,但是如果当写入等待状态的缓存使用率达到比较高的值的话(DMX默认是50%,VMAX是75%),则Symmetrix会进入优先de-stage模式,加快写入磁盘的速度。
5. 写入未命中(Deplayed Fast Write):也叫延迟快速写入,写入未命中的情况发生在当Symmetrix的缓存已经达到了写入等待上限的时候(VMAX是80%), 新的写入请求无法进行快速写入,会触发将现有的写入等待数据立刻写入到磁盘的操作,当Director观察到缓存中有空闲空间的时候,完成写入命中操作,将数据写入到缓存中。也就是说延迟快速写入也就是有等待时间的快速写入。