glusterfs之iocache 操作解析

io-cache:

描述:IO缓存中继(performance/io-threads)属于性能调整中继的一种,作用是缓存住已经被读过的数据,以提高IO性能。 IO缓存中继可以缓存住已经被读过的数据。这个对于多个应用对同一个数据多次访问,并且如果读的操作远远大于写的操作的话是很有用的(比如,IO缓存很适合用于提供web服务的环境,大量的客户端只会进行简单的读取文件的操作,只有很少一部分会去写文件)。当IO缓存中继检测到有写操作的时候,它就会把相应的文件从缓存中删除。IO缓存中继会定期的根据文件的修改时间来验证缓存中相应文件的一致性。验证超时时间是可以配置的。


源码分析如下:
读文件(ioc_readv):
1、通过检查到inode没有在ctx中,fd在ctx中,则直接到服务端读取;
2、如果在缓存中,读取每一个chunk在缓存页中是否正常,如果不正常需要从服务端读出正确的数据放到缓存中,并且通知该页可以正常读取;
3、如果在缓存中,检查该文件是否超时,如果超时会到服务端查询该文件的元数据并与缓存中的时间戳比对,看是否需要更新该文件缓存;
4、如果正常读取到则直接返回给fuse;
5、检查总的缓存大小是否超过了设置的缓存大小,如果太大则删除多余的缓存;


查询操作(ioc_lookup)
1、通过该文件的地址向服务端发起查询操作;
2、检查该inode是否在ctx内,如果没有在,会设置该文件的权重,然后将其更新到ctx内;
3、如果该inode以前已经在ctx内,检查该文件是否超时(time out),如果超时,会将该文件从缓存中剔除,并且调整已经缓存的大小;
4、将该文件inode移动到都一样权重列表的尾部;


打开操作(ioc_open):
1、如果该文件的大小不满足设置的文件缓存大小范围,权重,打开标识,则将该fd设置到ctx内;

你可能感兴趣的:(GlusterFS文件系统研究)