multilate源代码解读3 AgentStats.h ConnectionStats.h LogHistorgramSampler.h 三者联合起来统计latency

在每个agent里面有一个 AgentStats 变量as.

AgentStats as;

AgentStats.h*

1`在这里插入图片描述

multilate.cc 203行 Agent的as变量从ConnetionStats 变量stats里面获取agent上所有connetions的latency统计信息

![在这里插入图片描述](https://img-blog.csdnimg.cn/5a48caa2cad946ed99905fdfac5dd30a.png

multilate.cc 724行,使用一个Connection stats 去汇总不同线程的Connection stats.

在这里插入图片描述

每个Connection 有一个ConnectionStats变量,该变量又包含LogHistorgramSampler。LogHistorgramSampler才是真正统计latency的类。但在ConnectionStats层面负责计算不同百分位的latency.

ConnectionStats.h 保存每个connection的latency 统计数据

在这里插入图片描述

public members:

在这里插入图片描述

获取某个百分位的latency 以及合并另一个Connectionstats的latency统计数据

在这里插入图片描述

print_stats

在这里插入图片描述

在每个Connection 里面保存一个 ConnectionStats 私有变量。

ConnectionStats stats;

Connection.cc 中,(1)发送完一个set请求后,stats.tx_bytes+=1 (2)将请求封装为一个Operation op,并记录该请求的start_time和将该op添加到op_queue队列末尾

在这里插入图片描述

在Connection的beffer_event_read_cb 函数里面调用 conn->read_callback()

在这里插入图片描述

Furthermore, at line 379 从op_queue中取出队首的元素,作为返回结果对应的op。

at line 387 调用protocol类的handle_response处理返回response 的内容,实际上为bufferevent 的input buffer 中的内容。 其中done为bool变量,表示handle_response函数对返回内容的处理结果。

如果done=True, 391行则调用finsh_op()函数。

在这里插入图片描述

在Protocol.cc 中有个handle_response 函数。

在这里插入图片描述

Conection.cc 中finish_op 函数中,首先获取当前时间作为op的end_time。

232-234行,根据op的类型(get或者set请求),用不同的stats统计它们的latency.

在这里插入图片描述

ConnectionStats.h

line 61, 可以看到,实际的QPS = 发送出去的get和set请求之和 除以 运行时长

在这里插入图片描述

LogHistorgramSampler.h

LogHistorgramSampler 为实际统计一个connection get或者set 请求latency百分比的工具类

在这里插入图片描述

在 33 行, 调用op的方法计算该op的latency 为

double time() const { return (end_time - start_time) * 1000000; }

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值