小文件写:

来源:互联网 发布:淘宝装修比较好的店铺 编辑:程序博客网 时间:2024/05/21 10:17
小文件写:HttpSM::set_next_stateHttpSM::do_cache_prepare_writeHttpSM::do_cache_prepare_actionHttpCacheSM::open_write1.  CacheProcessor::open_write 2.  Cache::open_write  //new_CacheVC3.  CacheVC::callcont4.  CacheVC::openWriteMain5.  CacheVC::calluser6.  CacheVC::die7.  CacheVC::openWriteClose8.  CacheVC::openWriteCloseHead9.  CacheVC::updateVector10. CacheVC::do_write_call11. CacheVC::handleWrite  //Vol::aggWrite12. CacheVC::openWriteCloseHeadDone  //dir_insert, use first_key for object13. CacheVC::openWriteCloseDir  14. free_CacheVC  ts源代码中各个模块的设计都是Processor+Continuation+EventSystem机制。cache层提供给其他模块的外部接口为CacheProcessor,而内部接口,则为类CacheVC。Cache::open_write通过Cache::key_to_vol方法确定使用哪一个Vol存储要写入的object,同时生成一个负责写操作流程的CacheVC对象,并通过回调函数callcont提示上层Continuation写操作已经准备好了,这时上层Continuation调用CacheVC的openWriteMain函数,由此写操作开始。这里要解释一下Vol这个数据结构。在第一章说过,用户通过storage.config文件配置存储空间,ts对每一个存储空间根据disk layout进行格式化操作,并最终以一个Vol表示这个空间。举例来说,用户在storage.config中配置了三个裸设备,同时没有配置volume.config文件的情况下,则一个裸设备对应一个Vol。总之,一个Vol对应一个实际划分好的存储空间。Vol维护一个写队列,它是一个CacheVC的list,当Vol调用aggWrite时,则从该list中取出CacheVC并通过函数agg_copy将要写的内容拷入一个buffer中,最后将该buffer一次性写入cache。这个buffer称为agg buffer。openWriteMain读取上层Continuation要写入cache的object的body内容。对于小文件,openWriteMain会通过回调函数calluser提示上层Continuation直到整个内容读取完毕为止。这时,上层Continuation对CacheVC调用do_io_close操作,进入die函数,并进一步进入openWriteClose函数体。openWriteClose函数通过CacheVC提供的很多位状态信息,判断这是一个小文件,从而进一步调用openWriteCloseHead函数。openWriteCloseHead函数调用updateVector函数确定是否需要更新head内容,并最终调用do_write_call进入handleWrite,执行最后的写cache操作。handleWrite将CacheVC自己加入到Vol的写cache队列中,并判断Vol当前是否正在进行写cache,如果没有,则立即命令Vol进行cache写,并进入openWriteCloseHeadDone,通过宏dir_insert,使用first_key找到索引区中对应的未使用的索引,并将相关元信息如object在磁盘上的offset等保存到该索引中。最后,CacheVC进入openWriteCloseDir函数,对于正常流程来说,这时候执行free_CacheVC释放CacheVC的内存空间,整个写操作完成。而在CacheVC命令Vol进行cache写后,Vol进入aggWrite流程,它通过将写cache任务分派给一个aio线程(aio模块),执行异步写。
62K小文件写:CacheProcessor::open_writeCache::open_writeCacheVC::callcontCacheVC::openWriteMainCacheVC::calluserCacheVC::openWriteMainCacheVC::calluserCacheVC::openWriteMainCacheVC::calluserCacheVC::dieCacheVC::openWriteCloseCacheVC::openWriteCloseHeadCacheVC::updateVectorCacheVC::do_write_callCacheVC::handleWriteCacheVC::openWriteCloseHeadDoneCacheVC::openWriteCloseDir




原创粉丝点击