mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Fix the perf stat bytes bug
This commit is contained in:
parent
36d06edab3
commit
e4eb501c57
5 changed files with 33 additions and 19 deletions
|
@ -43,7 +43,9 @@ obj = json.loads(s)
|
||||||
|
|
||||||
print ""
|
print ""
|
||||||
p = obj['data']['dropped']
|
p = obj['data']['dropped']
|
||||||
print('RTC Frame Dropped: %s%s'%(10000.0 * p['rtc_dropeed'] / p['rtc_frames'], '%%'))
|
print('RTC Frame Dropped: %.4f%s'%(10000.0 * p['rtc_dropeed'] / p['rtc_frames'], '%%'))
|
||||||
|
p = obj['data']['bytes']
|
||||||
|
print('Padding Overload: %.4f%s %.2fMB'%(10000.0 * p['rtc_padding'] / p['rtc_bytes'], '%%', p['rtc_padding']/1024/1024))
|
||||||
|
|
||||||
# 2, 3, 5, 9, 16, 32, 64, 128, 256
|
# 2, 3, 5, 9, 16, 32, 64, 128, 256
|
||||||
keys = ['lt_2', 'lt_3', 'lt_5', 'lt_9', 'lt_16', 'lt_32', 'lt_64', 'lt_128', 'lt_256', 'gt_256']
|
keys = ['lt_2', 'lt_3', 'lt_5', 'lt_9', 'lt_16', 'lt_32', 'lt_64', 'lt_128', 'lt_256', 'gt_256']
|
||||||
|
|
|
@ -472,6 +472,7 @@ SrsRtcPackets::SrsRtcPackets()
|
||||||
nn_rtp_pkts = 0;
|
nn_rtp_pkts = 0;
|
||||||
nn_audios = nn_extras = 0;
|
nn_audios = nn_extras = 0;
|
||||||
nn_videos = nn_samples = 0;
|
nn_videos = nn_samples = 0;
|
||||||
|
nn_bytes = nn_rtp_bytes = 0;
|
||||||
nn_padding_bytes = nn_paddings = 0;
|
nn_padding_bytes = nn_paddings = 0;
|
||||||
nn_dropped = 0;
|
nn_dropped = 0;
|
||||||
|
|
||||||
|
@ -505,6 +506,7 @@ void SrsRtcPackets::reset(bool gso, bool merge_nalus)
|
||||||
nn_rtp_pkts = 0;
|
nn_rtp_pkts = 0;
|
||||||
nn_audios = nn_extras = 0;
|
nn_audios = nn_extras = 0;
|
||||||
nn_videos = nn_samples = 0;
|
nn_videos = nn_samples = 0;
|
||||||
|
nn_bytes = nn_rtp_bytes = 0;
|
||||||
nn_padding_bytes = nn_paddings = 0;
|
nn_padding_bytes = nn_paddings = 0;
|
||||||
nn_dropped = 0;
|
nn_dropped = 0;
|
||||||
|
|
||||||
|
@ -745,22 +747,23 @@ srs_error_t SrsRtcSenderThread::cycle()
|
||||||
// Stat the RTP packets going into kernel.
|
// Stat the RTP packets going into kernel.
|
||||||
stat->perf_on_gso_packets(pkts.nn_rtp_pkts);
|
stat->perf_on_gso_packets(pkts.nn_rtp_pkts);
|
||||||
// Stat the bytes and paddings.
|
// Stat the bytes and paddings.
|
||||||
stat->perf_on_rtc_bytes(pkts.nn_bytes, pkts.nn_padding_bytes);
|
stat->perf_on_rtc_bytes(pkts.nn_bytes, pkts.nn_rtp_bytes, pkts.nn_padding_bytes);
|
||||||
// Stat the messages and dropped count.
|
// Stat the messages and dropped count.
|
||||||
stat->perf_on_dropped(msg_count, nn_rtc_packets, pkts.nn_dropped);
|
stat->perf_on_dropped(msg_count, nn_rtc_packets, pkts.nn_dropped);
|
||||||
}
|
|
||||||
#if defined(SRS_DEBUG)
|
#if defined(SRS_DEBUG)
|
||||||
srs_trace("RTC PLAY perf, msgs %d/%d, rtp %d, gso %d, %d audios, %d extras, %d videos, %d samples, %d/%d bytes",
|
srs_trace("RTC PLAY perf, msgs %d/%d, rtp %d, gso %d, %d audios, %d extras, %d videos, %d samples, %d/%d/%d bytes",
|
||||||
msg_count, nn_rtc_packets, pkts.size(), pkts.nn_rtp_pkts, pkts.nn_audios, pkts.nn_extras, pkts.nn_videos,
|
msg_count, nn_rtc_packets, pkts.size(), pkts.nn_rtp_pkts, pkts.nn_audios, pkts.nn_extras, pkts.nn_videos,
|
||||||
pkts.nn_samples, pkts.nn_bytes, pkts.nn_padding_bytes);
|
pkts.nn_samples, pkts.nn_bytes, pkts.nn_rtp_bytes, pkts.nn_padding_bytes);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
pprint->elapse();
|
pprint->elapse();
|
||||||
if (pprint->can_print()) {
|
if (pprint->can_print()) {
|
||||||
// TODO: FIXME: Print stat like frame/s, packet/s, loss_packets.
|
// TODO: FIXME: Print stat like frame/s, packet/s, loss_packets.
|
||||||
srs_trace("-> RTC PLAY %d/%d msgs, %d/%d packets, %d audios, %d extras, %d videos, %d samples, %d/%d bytes, %d pad, %d/%d cache",
|
srs_trace("-> RTC PLAY %d/%d msgs, %d/%d packets, %d audios, %d extras, %d videos, %d samples, %d/%d/%d bytes, %d pad, %d/%d cache",
|
||||||
msg_count, pkts.nn_dropped, pkts.size(), pkts.nn_rtp_pkts, pkts.nn_audios, pkts.nn_extras, pkts.nn_videos, pkts.nn_samples, pkts.nn_bytes,
|
msg_count, pkts.nn_dropped, pkts.size(), pkts.nn_rtp_pkts, pkts.nn_audios, pkts.nn_extras, pkts.nn_videos, pkts.nn_samples, pkts.nn_bytes,
|
||||||
pkts.nn_padding_bytes, pkts.nn_paddings, pkts.size(), pkts.capacity());
|
pkts.nn_rtp_bytes, pkts.nn_padding_bytes, pkts.nn_paddings, pkts.size(), pkts.capacity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -926,6 +929,8 @@ srs_error_t SrsRtcSenderThread::send_packets(SrsRtcPackets& packets)
|
||||||
iov->iov_len = (size_t)nn_encrypt;
|
iov->iov_len = (size_t)nn_encrypt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
packets.nn_rtp_bytes += (int)iov->iov_len;
|
||||||
|
|
||||||
// Set the address and control information.
|
// Set the address and control information.
|
||||||
sockaddr_in* addr = (sockaddr_in*)sendonly_ukt->peer_addr();
|
sockaddr_in* addr = (sockaddr_in*)sendonly_ukt->peer_addr();
|
||||||
socklen_t addrlen = (socklen_t)sendonly_ukt->peer_addrlen();
|
socklen_t addrlen = (socklen_t)sendonly_ukt->peer_addrlen();
|
||||||
|
@ -1070,6 +1075,8 @@ srs_error_t SrsRtcSenderThread::send_packets_gso(SrsRtcPackets& packets)
|
||||||
iov->iov_len = (size_t)nn_encrypt;
|
iov->iov_len = (size_t)nn_encrypt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
packets.nn_rtp_bytes += (int)iov->iov_len;
|
||||||
|
|
||||||
// If GSO, they must has same size, except the final one.
|
// If GSO, they must has same size, except the final one.
|
||||||
if (using_gso && !gso_final && gso_encrypt && gso_encrypt != (int)iov->iov_len) {
|
if (using_gso && !gso_final && gso_encrypt && gso_encrypt != (int)iov->iov_len) {
|
||||||
return srs_error_new(ERROR_RTC_RTP_MUXER, "GSO size=%d/%d, encrypt=%d/%d", gso_size, nn_packet, gso_encrypt, iov->iov_len);
|
return srs_error_new(ERROR_RTC_RTP_MUXER, "GSO size=%d/%d, encrypt=%d/%d", gso_size, nn_packet, gso_encrypt, iov->iov_len);
|
||||||
|
@ -1138,9 +1145,9 @@ srs_error_t SrsRtcSenderThread::send_packets_gso(SrsRtcPackets& packets)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SRS_DEBUG)
|
#if defined(SRS_DEBUG)
|
||||||
srs_trace("#%d, RTC PLAY summary, rtp %d/%d, videos %d/%d, audios %d/%d, pad %d/%d", packets.debug_id, packets.size(),
|
srs_trace("#%d, RTC PLAY summary, rtp %d/%d, videos %d/%d, audios %d/%d, pad %d/%d/%d", packets.debug_id, packets.size(),
|
||||||
packets.nn_rtp_pkts, packets.nn_videos, packets.nn_samples, packets.nn_audios, packets.nn_extras, packets.nn_paddings,
|
packets.nn_rtp_pkts, packets.nn_videos, packets.nn_samples, packets.nn_audios, packets.nn_extras, packets.nn_paddings,
|
||||||
packets.nn_padding_bytes);
|
packets.nn_padding_bytes, packets.nn_rtp_bytes);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -130,8 +130,10 @@ public:
|
||||||
uint32_t debug_id;
|
uint32_t debug_id;
|
||||||
#endif
|
#endif
|
||||||
public:
|
public:
|
||||||
// The total bytes of RTP packets.
|
// The total bytes of AVFrame packets.
|
||||||
int nn_bytes;
|
int nn_bytes;
|
||||||
|
// The total bytes of RTP packets.
|
||||||
|
int nn_rtp_bytes;
|
||||||
// The total padded bytes.
|
// The total padded bytes.
|
||||||
int nn_padding_bytes;
|
int nn_padding_bytes;
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -655,20 +655,23 @@ srs_error_t SrsStatistic::dumps_perf_sendmmsg(SrsJsonObject* obj)
|
||||||
return dumps_perf(perf_sendmmsg, obj);
|
return dumps_perf(perf_sendmmsg, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsStatistic::perf_on_rtc_bytes(int nn_bytes, int nn_padding)
|
void SrsStatistic::perf_on_rtc_bytes(int nn_bytes, int nn_rtp_bytes, int nn_padding)
|
||||||
{
|
{
|
||||||
// a: RTC bytes.
|
// a: AVFrame bytes.
|
||||||
// b: RTC paddings.
|
// b: RTC bytes.
|
||||||
|
// c: RTC paddings.
|
||||||
perf_bytes->a += nn_bytes;
|
perf_bytes->a += nn_bytes;
|
||||||
perf_bytes->b += nn_padding;
|
perf_bytes->b += nn_rtp_bytes;
|
||||||
|
perf_bytes->c += nn_padding;
|
||||||
|
|
||||||
perf_bytes->nn += nn_bytes + nn_padding;
|
perf_bytes->nn += nn_rtp_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_error_t SrsStatistic::dumps_perf_bytes(SrsJsonObject* obj)
|
srs_error_t SrsStatistic::dumps_perf_bytes(SrsJsonObject* obj)
|
||||||
{
|
{
|
||||||
obj->set("rtc_bytes", SrsJsonAny::integer(perf_bytes->a));
|
obj->set("avframe_bytes", SrsJsonAny::integer(perf_bytes->a));
|
||||||
obj->set("rtc_padding", SrsJsonAny::integer(perf_bytes->b));
|
obj->set("rtc_bytes", SrsJsonAny::integer(perf_bytes->b));
|
||||||
|
obj->set("rtc_padding", SrsJsonAny::integer(perf_bytes->c));
|
||||||
|
|
||||||
obj->set("nn", SrsJsonAny::integer(perf_bytes->nn));
|
obj->set("nn", SrsJsonAny::integer(perf_bytes->nn));
|
||||||
|
|
||||||
|
|
|
@ -263,7 +263,7 @@ public:
|
||||||
virtual srs_error_t dumps_perf_sendmmsg(SrsJsonObject* obj);
|
virtual srs_error_t dumps_perf_sendmmsg(SrsJsonObject* obj);
|
||||||
public:
|
public:
|
||||||
// Stat for bytes, nn_bytes is the size of bytes, nb_padding is padding bytes.
|
// Stat for bytes, nn_bytes is the size of bytes, nb_padding is padding bytes.
|
||||||
virtual void perf_on_rtc_bytes(int nn_bytes, int nn_padding);
|
virtual void perf_on_rtc_bytes(int nn_bytes, int nn_rtp_bytes, int nn_padding);
|
||||||
virtual srs_error_t dumps_perf_bytes(SrsJsonObject* obj);
|
virtual srs_error_t dumps_perf_bytes(SrsJsonObject* obj);
|
||||||
public:
|
public:
|
||||||
// Stat for rtc messages, nn_rtc is rtc messages, nn_dropped is dropped messages.
|
// Stat for rtc messages, nn_rtc is rtc messages, nn_dropped is dropped messages.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue