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#

 

posted @ 2022-08-07 12:03  凡事预则立,不预则废  阅读(177)  评论(0)    收藏  举报