文档库

最新最全的文档下载
当前位置:文档库 > varnish重要数据结构

varnish重要数据结构

Varnish 重要数据结构

重要的全局变量:

1:struct vsb *vident:用于varnishd向varnishadm传送相关命令执行后的结果:

2:struct heritage heritage:设置cache和mgt进程之间通信的管道,设置varnishd监听request的ip和port(可以指定多个ip和port?用了一个队列来存储多个ip和port),设置hash 方式

3:static struct parspec const ** parspec:用于设置varnishd的默认参数,分为input_parspec 和WRK_parspec

4:struct params master:与上述的parspec全局变量结合起来设置varnishd的默认参数,用该变量看起来更直观(指针和地址的应用很巧妙)

5:volatile struct params *params:指向上述master全局变量的地址(注意volatile关键字的使用,估计是因为在多线程中要用到params变量而加了该关键字),相当于所有的varnishd的默认参数值都保存在params能访问到的地址上

6:static struct vcc *vcc:varnishd mgt进程将.vcl编译为shared object时用

7:static VTAILQ_HEAD(, vclprog) vclhead = VTAILQ_HEAD_INITIALIZER(vclhead):用于上述shared object形成的队列,有active字段用于判断其是否有效:

8:static const struct choice STV_choice[] = {

{ "file", &smf_stevedore },

{ "malloc", &sma_stevedore },

{ "persistent", &smp_stevedore },

#ifdef HA VE_LIBUMEM

{ "umem", &smu_stevedore },

#endif

{ NULL, NULL }

};该静态全局变量用于指定varishd的cache方式,特别注意smf_stevedore,sma_stevedore 等,非常重要

9:static VTAILQ_HEAD(, stevedore) stevedores = VTAILQ_HEAD_INITIALIZER(stevedores):该队列用于保存varnishd的cache方式,不能有重复的cache方式(重复的

意思是-s.....后接的参数值不能相同),里面对一些函数的定向非常巧妙

10:static struct stevedore *stv_transient:临时性存储方式,采用malloc的方式分配cache(至于用于何用,暂时还不清楚)

11:static const struct choice hsh_choice[] = {

{ "classic", &hcl_slinger },

{ "simple", &hsl_slinger },

{ "simple_list", &hsl_slinger }, /* backwards compat */

{ "critbit", &hcb_slinger },

{ NULL, NULL }

};该静态全局变量用于指定heritage中的const struct hash_slinger *hash字段,其实现方式与上面的STV_choice[]一样,同样非常的巧妙

11:全局变量static int vsl_fd = -1是一个文件描述符,代表share memory对应的_.vsm文件

varnish重要数据结构

(共37页)