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

Posted 银灯玉箫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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统计信息

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;


以上是关于multilate源代码解读3 AgentStats.h ConnectionStats.h LogHistorgramSampler.h 三者联合起来统计latency的主要内容,如果未能解决你的问题,请参考以下文章

multilate源代码解读0 mutilate.cc

3.Cadical-代码解读restart.cpp

3. 5种常见卷积论文解读使用方法实现代码整理(conv)

FlinkFlink 1.13 版本 KafkaSource 代码解读

AlexNet论文解读与代码实现

3. 5种常见卷积论文解读使用方法实现代码整理(conv)