全部博文(230)
分类: LINUX
2015-04-09 12:17:49
原文地址:TCP SNMP counters (一) 作者:raise_sail
类别 | 名称 | 描述 |
---|---|---|
Tcp | ActiveOpens | tcp_connect(),发送SYN时,加1 |
Tcp | PassiveOpens | tcp_create_openreq_child(), 被动三路握手完成,加1 |
Tcp | AttemptFails |
|
Tcp | CurrEstab | tcp_set_state(),根据ESTABLISHED是新/旧状态,分别加减一。 |
Tcp | EstabResets | tcp_set_state(),新状态为TCP_CLOSE,如果旧状态是ESTABLISHED/TCP_CLOSE_WAIT就加1 |
Tcp | ListenOverflows | tcp_v4_syn_recv_sock():三路握手最后一步完全之后,Accept queue队列超过上限时加1 |
Tcp | ListenDrops | tcp_v4_syn_recv_sock():任何原因,包括Accept queue超限,创建新连接,继承端口失败等,加1 |
Tcp | MaxConn | 0 |
Tcp | InSegs | tcp_v4_rcv(),收到一个skb,加1 |
Tcp | InErrs |
|
Tcp | OutSegs |
|
Tcp | OutRsts | tcp_v4_send_reset(), tcp_send_active_reset()加1 |
类别 | 名称 | 描述 |
---|---|---|
Tcp | TCPTimeouts |
|
Tcp | RtoAlgorithm | 1,tcp_mib_init()初始化 |
Tcp | RtoMax | 120000,tcp_mib_init()初始化:TCP_RTO_MAX*1000/HZ,TCP_RTO_MAX=120*HZ |
Tcp | RtoMin | 200,tcp_mib_init()初始化:TCP_RTO_MIN*1000/HZ,TCP_RTO_MIN=HZ/5 |
以下计数器,统计的是调用tcp_retransmit_skb()的次数,由于sysctl_tcp_retrans_collapse/TSO的原因,一次tcp_transmit_skb()调用可能发送多个segs
类别 | 名称 | 描述 |
---|---|---|
Tcp | RetransSegs | 重传次数,包括RTO timer和常规重传,即tcp_retransmit_skb()中调用tcp_transmit_skb(),成功返回即+1。 |
TcpExt | TCPForwardRetrans | (非RTO timer)发送新数据的次数,即在tcp_fastretrans_alert()/tcp_simple_retransmit()->tcp_xmit_retransmit_queue()中, 如果发现skb->seq > tp->retransmit_high(一般为snd_una),如果当前状态为Recovery,启用了SACK,并且发送条件允许就在这个函数中发送新数据。 |
TcpExt | TCPFastRetrans | (非RTO timer)快速重传次数,即tcp_fastretrans_alert()/tcp_simple_retransmit()->tcp_xmit_retransmit_queue()中,如果不是LOSS状态,就加1 |
TcpExt | TCPSlowStartRetrans | (非RTO timer)重传次数:即tcp_fastretrans_alert()/tcp_simple_retransmit()->tcp_xmit_retransmit_queue()中,如果是LOSS状态,就加1 |
TcpExt | TCPLostRetransmit | 根据SACK数据推测出的重段包丢失计数器:在tcp_sacktag_write_queue()->tcp_mark_lost_retrans(), 如果发现tcp_highest_sack_seq(tp)超过某skb在重传时的snd_nxt(TCB->ack_seq),就认为这个重传包 已经丢失了,加1(加的不是段数)。tcp_highest_sack_seq(tp)是被SACK过的具有最高SEQ号的skb的seq。 |
TcpExt | TCPSpuriousRTOs | tcp_process_frto(),如果frto_counter !=0 && frto_counter != 1加1 |
类别 | 名称 | 描述 |
---|---|---|
TcpExt | DelayedACKLocked | tcp_delack_timer(): delay ACK定时器因为user已经锁住而无法发送ACK的次数。 |
TcpExt | DelayedACKLost |
|
TcpExt | DelayedACKs | tcp_delack_timer():调用tcp_send_ack()的次数,无论是否是成功。 |
TcpExt | TCPHPAcks | tcp_ack():接收到包,进入quick path时加1 |
TcpExt | TCPPureAcks | tcp_ack():接收慢速路径中的pure ACK数量 |
TcpExt | TCPDSACKIgnoredNoUndo | tcp_sacktag_write_queue(): undo_marker为0并且接收到非法D-SACK块时,加1,即SACK中的序号太旧。 |
TcpExt | TCPDSACKIgnoredOld | tcp_sacktag_write_queue(): undo_marker不为0,并且接收到非法D-SACK块时,加1,即SACK中的序号太旧。 |
TcpExt | TCPSACKDiscard | tcp_sacktag_write_queue(): 非法SACK块(不包括D-SACK)计数,即SACK中的序号太旧。 |
TcpExt | TCPDSACKOldSent | tcp_dsack_set():如果SACK块开始序号小于RCV.NXT,加1 |
TcpExt | TCPDSACKOfoSent | tcp_dsack_set():如果SACK块开始序号大于等于RCV.NXT,加1 |
TcpExt | TCPSACKReneging | tcp_clean_rtx_queue(): 如果snd_una(输入skb->ack)之后的具有最小开始序号skb(即sk_write_queue中的第一个skb)中有TCPCB_SACKED_ACKED标志,此时加1,这说明接收者已经丢掉了之前它已经SACK过的数据。 |
TcpExt | TCPSackFailures | tcp_retransmit_timer(): 在Reorder状态下,或者sacked_out不为0时,发生RTO,并且启用了SACK,加1 |
TcpExt | TCPSackRecoveryFail | tcp_retransmit_timer(): 在Reovery状态下发生RTO,并且启用了SACK,加1 |
TcpExt | TCPDSACKRecv | tcp_check_dsack(): 收到D-SACK,并且SACK0开始序号 < ACK号,加1 |
TcpExt | TCPDSACKOfoRecv | tcp_check_dsack(): 收到D-SACK,并且SACK0开始序号 >= ACK号,但SACK1包括SACK0。 |
TcpExt | TCPSackRecovery | tcp_fastretrans_alert(): SACK TCP进入Reovery状态的次数 |
TcpExt | TCPSackShifted | tcp_ack()->tcp_sacktag_write_queue()->tcp_sacktag_walk()->tcp_shift_skb_data()->tcp_shifted_data() 在tcp_sacktag_walk()时,一个SACK可能会导致切割某skb,新切出来的skb放到被切的skb之后。 |
TcpExt | TCPSackShiftFallback | tcp_ack()->tcp_sacktag_write_queue()->tcp_sacktag_walk()->tcp_shift_skb_data() 与上相反,如果不能shift,本计数器加1。原因可能如下:
|
TcpExt | TCPSackMerged | tcp_ack()->tcp_sacktag_write_queue()->tcp_sacktag_walk()->tcp_shift_skb_data()->tcp_shifted_data() 在上面介绍的shift过程中,如果发现分割之后的skb被它之前的skb完全“吃掉”,本计数器加1 |
类别 | 名称 | 描述 |
---|---|---|
TcpExt | TW | inet_twdr_do_twkill_work(): TIME_WAIT超时的socket数量(timeout >= 4s) 之所以按超时分别对待timewait socket,可能是考虑到长超时的socket的timeout时间分布比较分散,需要使用不同的查找方法。 |
TcpExt | TWKilled | inet_twdr_twcal_tick(): TIME_WAIT超时的socket数量.(timeout < 4s), 仅在启用sysctl_tw_recycle,并且使用TCP timestamp option时才会有这种情况,这时使用3.5x RTO时作为timewait timeout,而默认timeout为60s |
TcpExt | TWRecycled | tcp_v4_connect() -> __inet_check_established(): 在建立时,如果port是从TIME_WAIT socket中复用的,加1 |
TcpExt | TCPTimeWaitOverflow | tcp_time_wait(): 当系统无法分配新的tcp_timewait_socket,或者tw_count(scheduled timewait sockets)超过sysctl_max_tw_buckets时,加1 |
类别 | 名称 | 描述 |
---|---|---|
TcpExt | TCPRenoRecoveryFail | tcp_retransmit_timer(): 在Reovery状态下发生RTO,并且没有启用SACK,加1 |
TcpExt | TCPRenoFailures | tcp_retransmit_timer(): 在Reorder状态下,或者sacked_out不为0时,发生RTO,并且没有启用SACK,加1 |
TcpExt | TCPRenoRecovery | tcp_fastretrans_alert(): 不使用SACK的TCP进入Reovery状态的次数 |