样本格式
/* A rate sample measures the number of (original/retransmitted) data
1. packets delivered "delivered" over an interval of time "interval_us".
2. The tcp_rate.c code fills in the rate sample, and congestion
3. control modules that define a cong_control function to run at the end
4. of ACK processing can optionally chose to consult this sample when
5. setting cwnd and pacing rate.
6. A sample is invalid if "delivered" or "interval_us" is negative.
*/
struct rate_sample {
u64 prior_mstamp; /* starting timestamp for interval 开始采样的时间点 */
u32 prior_delivered; /* tp->delivered at "prior_mstamp" 开始采样时对端已确认的数据包个数 */
s32 delivered; /* number of packets delivered over interval 采样期间确认的字节数 */
long interval_us; /* time for tp->delivered to incr "delivered" 采样时间 */
u32 snd_interval_us; /* snd interval for delivered packets 发送这么多采样数据所需要的时间 */
u32 rcv_interval_us; /* rcv interval for delivered packets 这么多采样数据被确认需要的时间 */
long rtt_us; /* RTT of last (S)ACKed packet (or -1) 采样期间最后一个包的rtt值 */
int losses; /* number of packets marked lost upon ACK 处理最后一个ack距离上一个ack的时间段内的丢包数 */
u32 acked_sacked; /* number of packets newly (S)ACKed upon ACK 最后一个包确认的数据包个数 */
u32 prior_in_flight; /* in flight before this ACK 仍然在途的报文个数 */
bool is_app_limited; /* is sample from packet with bubble in pipe? app发包是否缓慢 */
bool is_retrans; /* is sample from retransmission? 样本是否采集自重传数据,由sack来区分 */
bool is_ack_delayed; /* is this (likely) a delayed ACK? 是否一个延迟ack,猜测的 */
};
正如