IT老兵,爱好胡思乱想、读书和交流,2015年底重新回到IT战场,期待再一次“贯穿”。
分类: 服务器与存储
2007-05-06 19:01:04
i. 活动头部:
数据结构:
typedef struct live_head_t {
time_t last_up; //最后更新时间(秒)
long last_up_usec; //最后更新毫秒
} live_head_t;
说明:
last_up : RRD文件最后更新的时间(秒级)
last_up_usec:RRD文件最后更新时间(微秒级)
*仅一条数据
ii. PDP数据域:
数据结构:
typedef struct pdp_prep_t{
char last_ds[LAST_DS_LEN]; //目前更新rrd 文件的数据
unival scratch[10];
} pdp_prep_t;
说明:
unival scratch[10]:该变量类型是一个结构体,变量的功能就是存储计算CDP,计算多长时间没有接受到数据,等相关的信息.在实际的rrd文件中PDP的数量为DS的数量.存储的是每个DS的相关数据信息(时间,真实数据).
iii. CDP数据域:
typedef struct cdp_prep_t{
unival scratch[MAX_CDP_PAR_EN];
} cdp_prep_t;
说明:
scratch:该变量存储了与计算CDP相关的数据,如多少个PDP没有数据(与该RRA中PDP的数量有关),目前CDP数据的计算值等信息.
改CDP的数量与RRA的数量相同,同时每一条CDP数据里面包含所有的DS.简单的说就是CDP是RRA的缩小集合,目的是为计算相同RRA中下一条RRA记录做准备.
iv. RRA指针域:
typedef struct rra_ptr_t {
unsigned long cur_row; //目前不同RRA数据已经更新到的
//位置
} rra_ptr_t;
小节:
到目前位置已经清楚的看到了RRD头文件的大体面貌,至于具体的结构体内部请参考相应的代码.
RRD头文件结构图如下(根据上面创建命令绘制)
1.RRD数据区:
数据结构:
typedef double rrd_value_t; //RRD数据类型
rrd_value_t *rrd_value; //RRD在内存中存储形式
说明:RRD文件文件中除了RRD文件头部区域剩下的就是RRD文件数据区域.数据区域可以想象成为n*k*m 的矩阵,n为RRA的数量,k为不同RRA的行数,m为数据源DS的数量.
RRD数据区域的图形请参考上面RRA与DS的小节.
(待续)