Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added unique send/receive stats #1283

Merged
merged 2 commits into from
May 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 40 additions & 6 deletions srtcore/core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1344,11 +1344,13 @@ void CUDT::clearData()
CGuard stat_lock(m_StatsLock);

m_stats.tsStartTime = steady_clock::now();
m_stats.sentTotal = m_stats.recvTotal = m_stats.sndLossTotal = m_stats.rcvLossTotal = m_stats.retransTotal =
m_stats.sentACKTotal = m_stats.recvACKTotal = m_stats.sentNAKTotal = m_stats.recvNAKTotal = 0;
m_stats.sentTotal = m_stats.sentUniqTotal = m_stats.recvTotal = m_stats.recvUniqTotal
= m_stats.sndLossTotal = m_stats.rcvLossTotal = m_stats.retransTotal
= m_stats.sentACKTotal = m_stats.recvACKTotal = m_stats.sentNAKTotal = m_stats.recvNAKTotal = 0;
m_stats.tsLastSampleTime = steady_clock::now();
m_stats.traceSent = m_stats.traceRecv = m_stats.traceSndLoss = m_stats.traceRcvLoss = m_stats.traceRetrans =
m_stats.sentACK = m_stats.recvACK = m_stats.sentNAK = m_stats.recvNAK = 0;
m_stats.traceSent = m_stats.traceSentUniq = m_stats.traceRecv = m_stats.traceRecvUniq
= m_stats.traceSndLoss = m_stats.traceRcvLoss = m_stats.traceRetrans
= m_stats.sentACK = m_stats.recvACK = m_stats.sentNAK = m_stats.recvNAK = 0;
m_stats.traceRcvRetrans = 0;
m_stats.traceReorderDistance = 0;
m_stats.traceBelatedTime = 0.0;
Expand All @@ -1363,10 +1365,14 @@ void CUDT::clearData()
m_stats.traceRcvUndecrypt = 0;

m_stats.bytesSentTotal = 0;
m_stats.bytesSentUniqTotal = 0;
m_stats.bytesRecvTotal = 0;
m_stats.bytesRecvUniqTotal = 0;
m_stats.bytesRetransTotal = 0;
m_stats.traceBytesSent = 0;
m_stats.traceBytesSentUniq = 0;
m_stats.traceBytesRecv = 0;
m_stats.traceBytesRecvUniq = 0;
m_stats.sndFilterExtra = 0;
m_stats.rcvFilterExtra = 0;
m_stats.rcvFilterSupply = 0;
Expand Down Expand Up @@ -7253,7 +7259,9 @@ void CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)

perf->msTimeStamp = count_milliseconds(currtime - m_stats.tsStartTime);
perf->pktSent = m_stats.traceSent;
perf->pktSentUnique = m_stats.traceSentUniq;
perf->pktRecv = m_stats.traceRecv;
perf->pktRecvUnique = m_stats.traceRecvUniq;
perf->pktSndLoss = m_stats.traceSndLoss;
perf->pktRcvLoss = m_stats.traceRcvLoss;
perf->pktRetrans = m_stats.traceRetrans;
Expand All @@ -7276,7 +7284,9 @@ void CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)
/* perf byte counters include all headers (SRT+UDP+IP) */
const int pktHdrSize = CPacket::HDR_SIZE + CPacket::UDP_HDR_SIZE;
perf->byteSent = m_stats.traceBytesSent + (m_stats.traceSent * pktHdrSize);
perf->byteSentUnique = m_stats.traceBytesSentUniq + (m_stats.traceSentUniq * pktHdrSize);
perf->byteRecv = m_stats.traceBytesRecv + (m_stats.traceRecv * pktHdrSize);
perf->byteRecvUnique = m_stats.traceBytesRecvUniq + (m_stats.traceRecvUniq * pktHdrSize);
perf->byteRetrans = m_stats.traceBytesRetrans + (m_stats.traceRetrans * pktHdrSize);
#ifdef SRT_ENABLE_LOSTBYTESCOUNT
perf->byteRcvLoss = m_stats.traceRcvBytesLoss + (m_stats.traceRcvLoss * pktHdrSize);
Expand All @@ -7291,7 +7301,9 @@ void CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)
perf->byteRcvUndecrypt = m_stats.traceRcvBytesUndecrypt;

perf->pktSentTotal = m_stats.sentTotal;
perf->pktSentUniqueTotal = m_stats.sentUniqTotal;
perf->pktRecvTotal = m_stats.recvTotal;
perf->pktRecvUniqueTotal = m_stats.recvUniqTotal;
perf->pktSndLossTotal = m_stats.sndLossTotal;
perf->pktRcvLossTotal = m_stats.rcvLossTotal;
perf->pktRetransTotal = m_stats.retransTotal;
Expand All @@ -7302,7 +7314,9 @@ void CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)
perf->usSndDurationTotal = m_stats.m_sndDurationTotal;

perf->byteSentTotal = m_stats.bytesSentTotal + (m_stats.sentTotal * pktHdrSize);
perf->byteSentUniqueTotal = m_stats.bytesSentUniqTotal + (m_stats.sentUniqTotal * pktHdrSize);
perf->byteRecvTotal = m_stats.bytesRecvTotal + (m_stats.recvTotal * pktHdrSize);
perf->byteRecvUniqueTotal = m_stats.bytesRecvUniqTotal + (m_stats.recvUniqTotal * pktHdrSize);
perf->byteRetransTotal = m_stats.bytesRetransTotal + (m_stats.retransTotal * pktHdrSize);
perf->pktSndFilterExtraTotal = m_stats.sndFilterExtraTotal;
perf->pktRcvFilterExtraTotal = m_stats.rcvFilterExtraTotal;
Expand Down Expand Up @@ -7431,9 +7445,12 @@ void CUDT::bstats(CBytePerfMon *perf, bool clear, bool instantaneous)
m_stats.traceRcvBytesUndecrypt = 0;
// new>
m_stats.traceBytesSent = m_stats.traceBytesRecv = m_stats.traceBytesRetrans = 0;
m_stats.traceBytesSentUniq = m_stats.traceBytesRecvUniq = 0;
//<
m_stats.traceSent = m_stats.traceRecv = m_stats.traceSndLoss = m_stats.traceRcvLoss = m_stats.traceRetrans =
m_stats.sentACK = m_stats.recvACK = m_stats.sentNAK = m_stats.recvNAK = 0;
m_stats.traceSent = m_stats.traceRecv
= m_stats.traceSentUniq = m_stats.traceRecvUniq
= m_stats.traceSndLoss = m_stats.traceRcvLoss = m_stats.traceRetrans
= m_stats.sentACK = m_stats.recvACK = m_stats.sentNAK = m_stats.recvNAK = 0;
m_stats.sndDuration = 0;
m_stats.traceRcvRetrans = 0;
m_stats.traceRcvBelated = 0;
Expand Down Expand Up @@ -9122,6 +9139,13 @@ std::pair<int, steady_clock::time_point> CUDT::packData(CPacket& w_packet)
m_stats.bytesSentTotal += payload;
++m_stats.traceSent;
++m_stats.sentTotal;
if (new_packet_packed)
{
++m_stats.traceSentUniq;
++m_stats.sentUniqTotal;
m_stats.traceBytesSentUniq += payload;
m_stats.bytesSentUniqTotal += payload;
}
leaveCS(m_StatsLock);

if (probe)
Expand Down Expand Up @@ -9571,6 +9595,16 @@ int CUDT::processData(CUnit* in_unit)
}
}
}

if (adding_successful)
{
CGuard statslock(m_StatsLock);
++m_stats.traceRecvUniq;
++m_stats.recvUniqTotal;
m_stats.traceBytesRecvUniq += u->m_Packet.getLength();
m_stats.bytesRecvUniqTotal += u->m_Packet.getLength();
}

#if ENABLE_HEAVY_LOGGING
std::ostringstream timebufspec;
if (m_bTsbPd)
Expand Down
8 changes: 8 additions & 0 deletions srtcore/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -1541,7 +1541,9 @@ class CUDT
{
time_point tsStartTime; // timestamp when the UDT entity is started
int64_t sentTotal; // total number of sent data packets, including retransmissions
int64_t sentUniqTotal; // total number of sent data packets, excluding rexmit and filter control
int64_t recvTotal; // total number of received packets
int64_t recvUniqTotal; // total number of received and delivered packets
int sndLossTotal; // total number of lost packets (sender side)
int rcvLossTotal; // total number of lost packets (receiver side)
int retransTotal; // total number of retransmitted packets
Expand All @@ -1552,7 +1554,9 @@ class CUDT
int sndDropTotal;
int rcvDropTotal;
uint64_t bytesSentTotal; // total number of bytes sent, including retransmissions
uint64_t bytesSentUniqTotal; // total number of bytes sent, including retransmissions
uint64_t bytesRecvTotal; // total number of received bytes
uint64_t bytesRecvUniqTotal; // total number of received bytes
uint64_t rcvBytesLossTotal; // total number of loss bytes (estimate)
uint64_t bytesRetransTotal; // total number of retransmitted bytes
uint64_t sndBytesDropTotal;
Expand All @@ -1569,7 +1573,9 @@ class CUDT

time_point tsLastSampleTime; // last performance sample time
int64_t traceSent; // number of packets sent in the last trace interval
int64_t traceSentUniq; // number of original packets sent in the last trace interval
int64_t traceRecv; // number of packets received in the last trace interval
int64_t traceRecvUniq; // number of packets received AND DELIVERED in the last trace interval
int traceSndLoss; // number of lost packets in the last trace interval (sender side)
int traceRcvLoss; // number of lost packets in the last trace interval (receiver side)
int traceRetrans; // number of retransmitted packets in the last trace interval
Expand All @@ -1584,7 +1590,9 @@ class CUDT
double traceBelatedTime;
int64_t traceRcvBelated;
uint64_t traceBytesSent; // number of bytes sent in the last trace interval
uint64_t traceBytesSentUniq; // number of bytes sent in the last trace interval
uint64_t traceBytesRecv; // number of bytes sent in the last trace interval
uint64_t traceBytesRecvUniq; // number of bytes sent in the last trace interval
uint64_t traceRcvBytesLoss; // number of bytes bytes lost in the last trace interval (estimate)
uint64_t traceBytesRetrans; // number of bytes retransmitted in the last trace interval
uint64_t traceSndBytesDrop;
Expand Down
14 changes: 14 additions & 0 deletions srtcore/srt.h
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,20 @@ struct CBytePerfMon
int pktRcvFilterLoss; // number of packet loss not coverable by filter
int pktReorderTolerance; // packet reorder tolerance value
//<

// New stats in 1.5.0

// Total
int64_t pktSentUniqueTotal; // total number of sent data packets, including retransmissions
int64_t pktRecvUniqueTotal; // total number of received packets
uint64_t byteSentUniqueTotal; // total number of sent data bytes, including retransmissions
uint64_t byteRecvUniqueTotal; // total number of received bytes

// Local
int64_t pktSentUnique; // number of sent data packets, including retransmissions
int64_t pktRecvUnique; // number of received packets
uint64_t byteSentUnique; // number of sent data bytes, including retransmissions
maxsharabayko marked this conversation as resolved.
Show resolved Hide resolved
uint64_t byteRecvUnique; // number of received bytes
};

////////////////////////////////////////////////////////////////////////////////
Expand Down