资源描述:
《ceph-common包分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Ceph中common包分析概述具体分析Arch给出系统架构,i386或x86-64Staticconstchar*get_arch()Armor对字符进行简单的编解码intceph_armor(char*dst,constchar*dst_end,constchar*src,constchar*end);intceph_unarmor(char*dst,constchar*dst_end,constchar*src,constchar*end);Assert定义了__ceph_assert_fail和__ceph_assert_warn两个函数,被assert和as
2、sert_warn调用。BackTrace封装函数调用栈,backtrace和backtrace_symbols。Buffer一个基类buffer::raw,主要成员char*data;unsignedlen;atomic_tnref;没有copying函数。子类包括raw_malloc:data=(char*)malloc(len);raw_mmap_pages=(char*)::mmap(NULL,len,PROT_READ
3、PROT_WRITE,MAP_PRIVATE
4、MAP_ANON,-1,0)raw_posix_aligned:data=(char*)val
5、loc(len);posix_memalign()raw_hack_aligned:data=newchar[len+PAGE_SIZE-1];raw_char:data=newchar[len];raw_static:评:定义了buffer的基本类型。ceph_argparse解析参数CephContextceph上下文,主要是配置相关成员:配置文件_conf;函数:start_service_thread()reopen_logs()join_service_thread()CephContextServiceThread类继承Thread类,使用sem_t作为锁
6、。Start_service_thread和reopen_logs等对CephContextService的实例进行封装。评:v0.28引入,便于ceph配置,可响应服务结束。Ceph_crypto证书和摘要类基类Digest,子类MD5,SHA1,SHA256,HMACSHA1Clock封装clock类,提供now,recent_now等函数Code_environment获取进程名字、环境等Common_init完成初始化、关闭等工作Cond封装pthread_cond_t,函数wait,signal等Config所有的配置选项及其解析confUtils定义配置文
7、件类ConfFileDebug定义调试输出流,注意使用了锁pthread_mutex_t_dout_lockDecayCounter定义DecayCounter类DoutStreambuf定义输出流缓冲Entity_name定义实体名称,包括auth,mon,osd,mds,clientFiemap定义了read_fiemap函数,do_import函数调用了,属于rbd范畴Finisher定义了一个线程类成员:Mutexfinisher_lock;Condfinisher_cond,finisher_empty_cond,Vectorfinish
8、er_queue;FinisherThreadfinisher_thread;函数:queue,start,stop,wait_for_empty,Finisher_thread_entry会遍历执行finisher_queue中元素的finish()函数。评:多线程学习典范Lockdep定义实现了依赖锁机制,包含5个函数lockdep_register/will_lock/locked/will_unlock/没有定义类,主要的全局变量有:thread_mutex_tlockdep_mutex;hash_maplock_ids;map
9、lock_names;hash_map>held;BackTrace*follows[MAX_LOCKS][MAX_LOCKS];Lockdep_register填充lock_ids和lock_names。does_follow(a,b)判断follows[a][b]的有无,或者存在a->c->blockdep_will_lock(name,id)检查依赖图,是否有回路等lockdep_locked设置held[p][id]=newBackTrace(),其中