资源描述:
《varnish重要数据结构》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Varnish重要数据结构重要的全局变量:1:structvsb*vident:用于varnishd向vamishadm传送相关命令执行后的结果:2:structheritageheritage:设置cache和mgl进程之间通信的管道,设置vamishd监听request的ip和port(可以指定多个ip和port?用了一个队列来存储多个ip和port),设置hash方式3:staticstructparspecconst**parspec:用于设置varnishd的默认参数,分为input_parspec和WRK_par
2、spec4:structparamsmaster:与上述的parspec全局变量结合起来设置vamishd的默认参数,用该变量看起来更直观(指针和地址的应用很巧妙)5:volatilestructparams^params:指向上述master全局变量的地址(注意volatile关键字的使用,估计是因为在多线程中耍用到params变量而加了该关键字),相当于所有的varnishd的默认参数值都保存在params能访问到的地址上6:staticstructvcc*vcc:varnishdmgt进程将.vcl编译为sharedo
3、bject时用7:staticVTAILQ_HEAD(,vclprog)vclhead=VTAILQ_HEAD」NITIALIZER(vclhead):用于上述sharedobject形成的队列,有active字段用于判断其是否有效:8:staticconststructchoiceSTV_choicelJ={{"file",&smf_stevedore},{"malloc",&sma_stevedore},{"persistent",&smp_stevedore},#ifdefHAVE_LIBUMEM{”umem”,&sm
4、u_stevedore},#endif{NULL,NULL}};该静态全局变量用于指定varishd的cache方式,特别注意smf_stevedore,sma_stevedore等,非常重要9:staticVTAILQ_HEAD(,stevedore)stevedores=VTAILQ_HEAD_INITIALIZER(stevedores):该队列用于保存vamishd的cache方式,不能有重复的cache方式(重复的意思是-s.•…后接的参数值不能相同),里面对一些函数的定向非常巧妙10:staticstructst
5、evedore*stv_transient:临时性存储方式,釆用malloc的方式分配cache(至于用于何用,暂时还不清楚)11:staticconststructchoicehsh_choicef]={{"classic",{"simple",{"simple{Hcritbitu,{NULL,&hcl_slinger},&hsl_slinger},&hsl_slinger},/*backwardscompat*/&hcb_slinger},NULL}};该静态全局变量用于指定heritage中的conststructha
6、sh_slinger*hash字段,其实现方式与上面的STV_choice[[—样,同样非常的巧妙11:全局变量staticintvsl_fd=-1是一个文件描述符,代表sharememory对应的_.vsm文件打开时的文件描述符12:/hcl_head;全局变量,classic哈希方式时使用,默认值是一个Thesetwocomefrombeyond(mgt_shmem.cactually)*/structVSM_head*VSM_head;conststructVSM_chunk*vsm_end;这两个变量是用于操作sha
7、rememory内存的,sharememory在内存中是连续的,unsignedlen字段代表一个内存块的长度13:structvev_base*mgt_evb:全局变量,用于mgi进程和cache进程乙'可信号通信使用staticstructvevsig*vev_sigs:改全局变量是依据系统所具有的信号量来生成数组的,即以信号量的值为数组下标,字段structvev_base*vevb;指向mgt_evb全局变量,字段structvev*vev;指向vamishd中我们需要的信号所对应的一个变量,字段structsiga
8、ctionsigact;用于重新定义信号发生时所对应的处理函数14:staticstructVCLS*cls:mgt进程和cache进程各有一个这样的变量,用于实现commandlineinterfaceo其内部有队列,英中VTAILQ_HEAD(,VCLS_func)funcs用于指定相