fix:更新客户端功能

This commit is contained in:
nnbcccscdscdsc
2026-03-16 22:28:05 +08:00
parent 7f2f79e672
commit 6c975d9ae3
18 changed files with 8067 additions and 33092 deletions

View File

@@ -1,78 +1,139 @@
/*
* logger.h
* 日志与性能统计接口
*/
#ifndef OMNISOCKET_LOGGER_H
#define OMNISOCKET_LOGGER_H
#include <stddef.h>
#include <stdint.h>
/* 通过该结构体收集全局统计信息 */
typedef struct OmniStats {
uint64_t start_ms; /* 起始时间(毫秒) */
uint64_t last_report_ms; /* 上一次打印日志时间 */
uint64_t bytes_sent; /* 发送总字节数 */
uint64_t bytes_recv; /* 接收总字节数 */
uint64_t send_count; /* 调用 omni_send 次数 */
uint64_t recv_count; /* 调用 omni_recv 次数 */
uint64_t last_rtt_ms; /* 最近一次 RTT */
uint64_t max_rtt_ms; /* 最大 RTT */
uint64_t tcp_retrans; /* 预留TCP 重传统计(如可从内核获取) */
uint64_t udp_retrans; /* UDP 上层重传次数 */
uint64_t kcp_retrans; /* KCP 内部重传次数(可从 ikcp 统计) */
/* 延迟/耗时统计(单位:毫秒) */
double send_call_avg_ms; /* omni_send 平均耗时EWMA */
double recv_call_avg_ms; /* omni_recv 平均耗时EWMA */
double proto_send_avg_ms; /* 协议 send() 平均耗时EWMA */
double proto_recv_avg_ms; /* 协议 recv() 平均耗时EWMA */
uint64_t send_call_min_ms;
uint64_t send_call_max_ms;
uint64_t recv_call_min_ms;
uint64_t recv_call_max_ms;
uint64_t last_send_call_ms;
uint64_t last_recv_call_ms;
} OmniStats;
/* 初始化统计模块,在程序启动时调用一次 */
void logger_init(void);
/* 记录一次发送/接收 */
void logger_on_send(size_t bytes);
void logger_on_recv(size_t bytes);
/* 记录一次 RTT由上层在合适时机调用 */
void logger_on_rtt(uint64_t rtt_ms);
/* 记录 KCP 重传次数变化(可在 KCP 更新循环中调用) */
void logger_on_kcp_retrans(uint64_t delta);
/* 记录一次耗时ms */
void logger_on_send_call_latency(uint64_t ms);
void logger_on_recv_call_latency(uint64_t ms);
void logger_on_proto_send_latency(uint64_t ms);
void logger_on_proto_recv_latency(uint64_t ms);
/* 计算当前吞吐量(返回:字节/秒) */
double logger_calculate_throughput(void);
/* 打印一条结构化性能日志(例如每隔若干秒调用 */
void logger_print_performance_log(const char *tag);
/* 结构化通用日志key=value 形式) */
void logger_log(const char *level, const char *component,
const char *fmt, ...);
/* 获取内部统计快照(线程不安全,仅调试用) */
OmniStats logger_get_snapshot(void);
#endif /* OMNISOCKET_LOGGER_H */
/*
* logger.h
* 日志与性能统计接口
*/
#ifndef OMNISOCKET_LOGGER_H
#define OMNISOCKET_LOGGER_H
#include <stddef.h>
#include <stdint.h>
typedef struct OmniMetricSummary {
uint64_t count;
double last;
double min;
double max;
double sum;
} OmniMetricSummary;
/* 通过该结构体收集全局统计信息 */
typedef struct OmniStats {
uint64_t start_ms; /* 起始时间(毫秒) */
uint64_t last_report_ms; /* 上一次打印日志时间 */
uint64_t window_start_ms; /* 当前吞吐统计窗口起点 */
uint64_t bytes_sent; /* 发送总字节数 */
uint64_t bytes_recv; /* 接收总字节数 */
uint64_t window_bytes_sent; /* 当前 1 秒窗口发送字节数 */
uint64_t window_bytes_recv; /* 当前 1 秒窗口接收字节数 */
uint64_t send_count; /* 调用 omni_send 次数 */
uint64_t recv_count; /* 调用 omni_recv 次数 */
uint64_t last_rtt_ms; /* 最近一次 RTT */
uint64_t min_rtt_ms; /* 最小 RTT更接近链路基线 */
uint64_t max_rtt_ms; /* 最大 RTT */
uint64_t tcp_retrans; /* 预留TCP 重传统计(如可从内核获取) */
uint64_t udp_retrans; /* UDP 上层重传次数 */
uint64_t kcp_retrans; /* KCP 内部重传次数(可从 ikcp 统计) */
uint64_t tcp_data_segs_out; /* TCP 累计发送的数据段数(含重传) */
uint64_t tcp_data_bytes_sent; /* TCP 累计发送的数据字节(含重传) */
uint64_t tcp_retrans_bytes; /* TCP 累计重传的数据字节 */
uint64_t kcp_data_segs_out; /* KCP 累计发送的数据分片数(含重传) */
uint64_t kcp_data_bytes_sent; /* KCP 累计发送的数据字节(含重传) */
uint64_t kcp_retrans_bytes; /* KCP 累计重传的数据字节 */
/* 延迟/耗时统计(单位:毫秒) */
double send_call_avg_ms; /* omni_send 平均耗时EWMA */
double recv_call_avg_ms; /* omni_recv 平均耗时EWMA */
double proto_send_avg_ms; /* 协议 send() 平均耗时EWMA */
double proto_recv_avg_ms; /* 协议 recv() 平均耗时EWMA */
uint64_t send_call_min_ms;
uint64_t send_call_max_ms;
uint64_t recv_call_min_ms;
uint64_t recv_call_max_ms;
uint64_t last_send_call_ms;
uint64_t last_recv_call_ms;
uint64_t total_work_bytes; /* 本次任务总大小(文件总大小等) */
uint64_t progress_bytes; /* 当前进度字节数 */
double tx_current_mbps; /* 最近 1 秒发送速率Mbps */
double rx_current_mbps; /* 最近 1 秒接收速率Mbps */
double tx_avg_mbps; /* 从开始到当前的平均发送速率Mbps */
double rx_avg_mbps; /* 从开始到当前的平均接收速率Mbps */
OmniMetricSummary processing_delay_ms; // 上层处理耗时(如文件读写、加解密等)
OmniMetricSummary queue_delay_ms; // 排队延迟
OmniMetricSummary transmission_delay_ms; // 传输延迟
OmniMetricSummary propagation_delay_ms; // 传播延迟
OmniMetricSummary end_to_end_delay_ms; // 端到端延迟
OmniMetricSummary send_buffer_pct; // 发送缓冲区占用率
OmniMetricSummary recv_buffer_pct; // 接收缓冲区占用率
OmniMetricSummary cwnd; // 拥塞窗口大小
} OmniStats;
/* 初始化统计模块,在程序启动时调用一次 */
void logger_init(void);
/* 记录一次发送/接收 */
void logger_on_send(size_t bytes);
void logger_on_recv(size_t bytes);
/* 记录一次 RTT由上层在合适时机调用 */
void logger_on_rtt(uint64_t rtt_ms);
/* 记录 TCP 传输层累计快照(通常来自 TCP_INFO。 */
void logger_on_tcp_transport(uint64_t total_retrans,
uint64_t data_segs_out,
uint64_t data_bytes_sent,
uint64_t retrans_bytes);
/* 记录 KCP 数据分片首次发送。 */
void logger_on_kcp_tx(uint64_t segs, uint64_t bytes);
/* 记录 KCP 数据分片重传。 */
void logger_on_kcp_retrans(uint64_t segs, uint64_t bytes);
/* 记录一次耗时ms */
void logger_on_send_call_latency(uint64_t ms);
void logger_on_recv_call_latency(uint64_t ms);
void logger_on_proto_send_latency(uint64_t ms);
void logger_on_proto_recv_latency(uint64_t ms);
void logger_on_processing_latency(double ms);
void logger_on_queue_delay_est(double ms);
void logger_on_transmission_delay_est(double ms);
void logger_on_propagation_delay_est(double ms);
void logger_on_end_to_end_latency(double ms);
void logger_on_send_queue_bytes(size_t bytes);
void logger_on_recv_queue_bytes(size_t bytes);
void logger_on_send_transmission_bytes(size_t bytes);
void logger_on_recv_transmission_bytes(size_t bytes);
void logger_on_buffer_status(double send_pct, double recv_pct);
void logger_on_cwnd(double cwnd);
/* 记录任务总量与当前进度。 */
void logger_set_transfer_total(uint64_t total_bytes);
void logger_set_progress(uint64_t progress_bytes);
/* 计算当前吞吐量(返回:字节/秒) */
double logger_calculate_throughput(void);
/* 在 1 秒窗口到期时打印周期性性能日志。 */
void logger_maybe_print_performance_log(const char *tag);
/* 强制打印一条结构化性能日志(例如最终汇总前调用) */
void logger_print_performance_log(const char *tag);
/* 结构化通用日志key=value 形式) */
void logger_log(const char *level, const char *component,
const char *fmt, ...);
/* 获取内部统计快照(线程不安全,仅调试用) */
OmniStats logger_get_snapshot(void);
#endif /* OMNISOCKET_LOGGER_H */