Isilon - OneFS Caching
OneFS Caching
Cache 等级:

L1 和L2 cache都是在 RAM中的;(也就是内存条中,如DDR4)
1、client-side level 1, or L1, cache and write coalescer
2、level 2, or L2 storage and node-side cache.
3、OneFS可以将SSD作为 L3 cache;
1、L1 cahce (优化读写)
也是 client-side cache,它是client连接node的buffer(缓冲区)
1)、在L1 cache上的所有blocks都可以立刻被 read,优化读取;
2)、L1 cache也是write coalescer(写入合并器),它会收集 write block,然后统一写入disk,优化写入;
2、L2 cache ()
L2 cache是 node-side buffer,存储着预先读取的block和写入事务;
L2 cache也包含在节点RAM中,L2 cache就是从各个节点从获取数据,来快速服务L1 cache的读取和写入;node上的drive subsystem, HDDs, SSDs与L2 cache进行交互,处理读写事务;
读取时,如果数据不在L2 cache,就会将data从backend network copy到L2;如果数据在L2,就会发给L1,然后发给client;
L2 cache是和journaling process 一起使用,当L2 cache满时,会根据data的时间 进行flush;(应该是到L3 cache)
3、L3 cache (优化读取,是read cache;只是L2 cache的read-only buffer,L3 没有预读取,如果是全闪系列,也就没有L3 cache了)
是L2 cache的扩展,SSD的访问速度比RAM慢,但是比HDD快;但是SSD比RAM容量大;
L3 cahce提供额外的storage node-side cache作为读缓存;L3 cache has no prefetch.
数据的读写过程
缓存大数据

1、Client连接的到 L1 cache和write coalescer; L1 cache是连接各个node的L2 cache;当要读取或写入其他node时,是通过 internal network传输数据;(图片上5就是internal network)
2、每个node的L2 cache是连接到自己node的disk storage, node上的L3 cache也是连接自己的L2 cache,但只是作为L2 cache的 read-only buffer;
3、L1 cache是和 Cluster上所有 node的L2 互相通信; (图片上的步骤4)
读数据

当client请求读取一个文件时:
1: 加载第一个文件indoe(索引节点),并从所有其他节点上的 disk 读取 file block。如果数据已经存在于L2 cache中,则不会从disk 加载数据。如果数据不在L2 cache中,数据块将copy到 L2 cache。数据块通过后端网络从其他节点发送到inode的L1 cache (L1 cache可以访问每个node 的L2 cache,所以数据最后都是由L2 cache 发送给L1 cache进行整合)。
2: OneFS等待来自其他节点的数据块到达。否则,节点从本地硬盘加载数据(个人理解,应该是说除了其他节点的数据,还需要读取自己节点的数据),然后在L1 cache 中重建文件并发送给客户端。
3: 然后在L1中重构 data block。
总之,client是只访问其中一个inode, 其他PowerScale node把数据从hard disk传给自己的L2 cache,然后L2 cache通过后端网络传给inode的L1 cache进行整合,再发给client;
写数据

当client请求写入一个file:
1: 写入L1 cache,直到 满足 write coalescer 写满、达到时间限制或协议请求确认传递。
2: 客户端连接的node 为文件创建写入计划,包括计算前向纠错(FEC)。分配给该节点的数据块将写入该节点的 journal 。分配给其他节点的数据块通过内部网络传输到L2 cache,然后传输到 journal。
3: 一旦所有节点都有记录的所有 “Data Block” 和 “FEC block” ,commit 将返回给客户端。Data Block 会先保留在client-connected node 的L2 cache,以备将来读取,然后data 将先写入HDD。
4: 发起写入操作的节点上的块分配管理器(Block Allocation Manager ,BAM)做出布局决策。BAM决定在何处写入数据块以确保文件得到适当保护。Data 被复制到Journal。为了做出决定,BAM安全写入或BSW会生成一个写入计划,其中包括跨保护组安全写入新数据块所需的所有步骤。
5: 一旦节点将 Data和FEC 记录到了 Journal,节点的 确认信息 将发送到连接到client-connected node,并将提交发送给客户端。
6: 一旦完成,BSW将运行此写入计划并保证其成功完成。OneFS不会在低于所需保护级别的情况下写入文件。数据被写入磁盘。
总之就是,写入时,L1 cache整合Client的写入,然后通过后端网络分配给其他node的L2 cache; L2 cache写完了 “Data Block” 和 “FEC block” ,commit 将返回给客户端。 L2 cache数据后面将会刷入到Hard Disk;
L3 cache注意事项:
1、在同一个node pool上,L3 cache不可以和其他SSD策略共存;
2、用于L3 cache的SSD,不会计算在 storage pool中的GNA中;
3、在全闪的node中,不能enable L3 cache
4、在archive-type node中,不能disable L3 cache;
5、如果修改L3 cache behavior,SSD中的data和metadata会迁移到HDDS,需要花费几个小时;
命令:
isilon01-1# isi_cache_stats Totals l1_data: a 2.8G 100% r 2.9G 99% p 488K 45%, l1_encoded: a 0.0B 0% r 0.0B 0% p 0.0B 0%, l1_meta: r 1.2G 35% p 0.0B 0%, l2_data: r 36M 91% p 72K 26%, l2_meta: r 3.0G 99% p 2.0M 87%, l3_data: r 0.0B 0% p 0.0B 0%, l3_meta: r 0.0B 0% p 0.0B 0% isilon01-1# isilon01-1# isi_cache_stats -v ------------------------- Totals ------------------------- l1_data: async read (8K blocks): aread.start: 365905 / 100.0% aread.hit: 364519 / 99.6% aread.miss: 1361 / 0.4% aread.wait: 25 / 0.0%
isilon01-1# isi storagepool list Name Nodes Requested Protection Usage HDD Total % SSD Total % ------------------------------------------------------------- ------------------------------------------------------------- Total: 0 isilon01-1#

浙公网安备 33010602011771号