1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Perf: Refine the stat

This commit is contained in:
winlin 2021-02-26 21:35:51 +08:00
parent 919107c674
commit c00d286344
6 changed files with 75 additions and 43 deletions

View file

@ -122,6 +122,13 @@ SrsPps* _srs_pps_thread_yield = new SrsPps();
SrsPps* _srs_pps_thread_yield2 = new SrsPps(); SrsPps* _srs_pps_thread_yield2 = new SrsPps();
#endif #endif
extern SrsPps* _srs_pps_objs_rtps;
extern SrsPps* _srs_pps_objs_rraw;
extern SrsPps* _srs_pps_objs_rfua;
extern SrsPps* _srs_pps_objs_rbuf;
extern SrsPps* _srs_pps_objs_msgs;
extern SrsPps* _srs_pps_objs_rothers;
ISrsHybridServer::ISrsHybridServer() ISrsHybridServer::ISrsHybridServer()
{ {
} }
@ -446,13 +453,25 @@ srs_error_t SrsHybridServer::notify(int event, srs_utime_t interval, srs_utime_t
} }
#endif #endif
srs_trace("Hybrid cpu=%.2f%%,%dMB%s%s%s%s%s%s%s%s%s%s", string objs_desc;
_srs_pps_objs_rtps->update(); _srs_pps_objs_rraw->update(); _srs_pps_objs_rfua->update(); _srs_pps_objs_rbuf->update(); _srs_pps_objs_msgs->update(); _srs_pps_objs_rothers->update();
if (_srs_pps_objs_rtps->r10s() || _srs_pps_objs_rraw->r10s() || _srs_pps_objs_rfua->r10s() || _srs_pps_objs_rbuf->r10s() || _srs_pps_objs_msgs->r10s() || _srs_pps_objs_rothers->r10s()) {
snprintf(buf, sizeof(buf), ", objs=%d,%d,%d,%d,%d,%d", _srs_pps_objs_rtps->r10s(), _srs_pps_objs_rraw->r10s(), _srs_pps_objs_rfua->r10s(), _srs_pps_objs_msgs->r10s(), _srs_pps_objs_rothers->r10s(), _srs_pps_objs_rbuf->r10s());
objs_desc = buf;
}
string cache_desc;
if (true) {
snprintf(buf, sizeof(buf), ", cache=%d,%d,%d,%d", _srs_rtp_cache->size(), _srs_rtp_raw_cache->size(), _srs_rtp_fua_cache->size(), _srs_rtp_msg_cache->size());
cache_desc = buf;
}
srs_trace("Hybrid cpu=%.2f%%,%dMB%s%s%s%s%s%s%s%s%s%s%s%s",
u->percent * 100, memory, u->percent * 100, memory,
cid_desc.c_str(), timer_desc.c_str(), cid_desc.c_str(), timer_desc.c_str(),
recvfrom_desc.c_str(), io_desc.c_str(), msg_desc.c_str(), recvfrom_desc.c_str(), io_desc.c_str(), msg_desc.c_str(),
epoll_desc.c_str(), sched_desc.c_str(), clock_desc.c_str(), epoll_desc.c_str(), sched_desc.c_str(), clock_desc.c_str(),
thread_desc.c_str(), thread_desc.c_str(), free_desc.c_str(), objs_desc.c_str(), cache_desc.c_str()
free_desc.c_str()
); );
return err; return err;

View file

@ -75,12 +75,6 @@ extern SrsPps* _srs_pps_rnack2;
extern SrsPps* _srs_pps_rhnack; extern SrsPps* _srs_pps_rhnack;
extern SrsPps* _srs_pps_rmnack; extern SrsPps* _srs_pps_rmnack;
extern SrsPps* _srs_pps_objs_rtps;
extern SrsPps* _srs_pps_objs_rraw;
extern SrsPps* _srs_pps_objs_rfua;
extern SrsPps* _srs_pps_objs_rbuf;
extern SrsPps* _srs_pps_objs_msgs;
SrsRtcBlackhole::SrsRtcBlackhole() SrsRtcBlackhole::SrsRtcBlackhole()
{ {
blackhole = false; blackhole = false;
@ -690,13 +684,6 @@ srs_error_t SrsRtcServer::notify(int type, srs_utime_t interval, srs_utime_t tic
} }
static char buf[128]; static char buf[128];
string objs_desc;
_srs_pps_objs_rtps->update(); _srs_pps_objs_rraw->update(); _srs_pps_objs_rfua->update(); _srs_pps_objs_rbuf->update(); _srs_pps_objs_msgs->update();
if (_srs_pps_objs_rtps->r10s() || _srs_pps_objs_rraw->r10s() || _srs_pps_objs_rfua->r10s() || _srs_pps_objs_rbuf->r10s() || _srs_pps_objs_msgs->r10s()) {
snprintf(buf, sizeof(buf), ", objs=%d,%d,%d,%d,%d", _srs_pps_objs_rtps->r10s(), _srs_pps_objs_rraw->r10s(), _srs_pps_objs_rfua->r10s(), _srs_pps_objs_rbuf->r10s(), _srs_pps_objs_msgs->r10s());
objs_desc = buf;
}
string rpkts_desc; string rpkts_desc;
_srs_pps_rpkts->update(); _srs_pps_rrtps->update(); _srs_pps_rstuns->update(); _srs_pps_rrtcps->update(); _srs_pps_rpkts->update(); _srs_pps_rrtps->update(); _srs_pps_rstuns->update(); _srs_pps_rrtcps->update();
if (_srs_pps_rpkts->r10s() || _srs_pps_rrtps->r10s() || _srs_pps_rstuns->r10s() || _srs_pps_rrtcps->r10s()) { if (_srs_pps_rpkts->r10s() || _srs_pps_rrtps->r10s() || _srs_pps_rstuns->r10s() || _srs_pps_rrtcps->r10s()) {
@ -746,9 +733,9 @@ srs_error_t SrsRtcServer::notify(int type, srs_utime_t interval, srs_utime_t tic
fid_desc = buf; fid_desc = buf;
} }
srs_trace("RTC: Server conns=%u%s%s%s%s%s%s%s%s", srs_trace("RTC: Server conns=%u%s%s%s%s%s%s%s",
nn_rtc_conns, nn_rtc_conns,
rpkts_desc.c_str(), spkts_desc.c_str(), rtcp_desc.c_str(), snk_desc.c_str(), rnk_desc.c_str(), drop_desc.c_str(), fid_desc.c_str(), objs_desc.c_str() rpkts_desc.c_str(), spkts_desc.c_str(), rtcp_desc.c_str(), snk_desc.c_str(), rnk_desc.c_str(), drop_desc.c_str(), fid_desc.c_str()
); );
return err; return err;

View file

@ -39,6 +39,7 @@ using namespace std;
#include <srs_kernel_codec.hpp> #include <srs_kernel_codec.hpp>
#include <srs_kernel_utility.hpp> #include <srs_kernel_utility.hpp>
#include <srs_core_autofree.hpp> #include <srs_core_autofree.hpp>
#include <srs_kernel_rtc_rtp.hpp>
#include <srs_kernel_kbps.hpp> #include <srs_kernel_kbps.hpp>
@ -286,10 +287,24 @@ void SrsSharedPtrMessage::wrap(char* payload, int size)
this->size = ptr->size; this->size = ptr->size;
} }
void SrsSharedPtrMessage::unwrap()
{
if (ptr) {
if (ptr->shared_count == 0) {
srs_freep(ptr);
} else {
ptr->shared_count--;
ptr = NULL;
}
}
payload = NULL;
size = 0;
}
int SrsSharedPtrMessage::count() int SrsSharedPtrMessage::count()
{ {
srs_assert(ptr); return ptr? ptr->shared_count : 0;
return ptr->shared_count;
} }
bool SrsSharedPtrMessage::check(int stream_id) bool SrsSharedPtrMessage::check(int stream_id)
@ -346,7 +361,7 @@ SrsSharedPtrMessage* SrsSharedPtrMessage::copy()
{ {
srs_assert(ptr); srs_assert(ptr);
SrsSharedPtrMessage* copy = new SrsSharedPtrMessage(); SrsSharedPtrMessage* copy = _srs_rtp_msg_cache->allocate();
copy->ptr = ptr; copy->ptr = ptr;
ptr->shared_count++; ptr->shared_count++;

View file

@ -328,6 +328,8 @@ public:
// Create shared ptr message from RAW payload. // Create shared ptr message from RAW payload.
// @remark Note that the header is set to zero. // @remark Note that the header is set to zero.
virtual void wrap(char* payload, int size); virtual void wrap(char* payload, int size);
// Decrease the reference, if the last one, free it.
void unwrap();
// Get current reference count. // Get current reference count.
// when this object created, count set to 0. // when this object created, count set to 0.
// if copy() this object, count increase 1. // if copy() this object, count increase 1.

View file

@ -40,6 +40,7 @@ SrsPps* _srs_pps_objs_rtps = new SrsPps();
SrsPps* _srs_pps_objs_rraw = new SrsPps(); SrsPps* _srs_pps_objs_rraw = new SrsPps();
SrsPps* _srs_pps_objs_rfua = new SrsPps(); SrsPps* _srs_pps_objs_rfua = new SrsPps();
SrsPps* _srs_pps_objs_rbuf = new SrsPps(); SrsPps* _srs_pps_objs_rbuf = new SrsPps();
SrsPps* _srs_pps_objs_rothers = new SrsPps();
/* @see https://tools.ietf.org/html/rfc1889#section-5.1 /* @see https://tools.ietf.org/html/rfc1889#section-5.1
0 1 2 3 0 1 2 3
@ -819,26 +820,11 @@ SrsRtpPacket2::SrsRtpPacket2()
SrsRtpPacket2::~SrsRtpPacket2() SrsRtpPacket2::~SrsRtpPacket2()
{ {
srs_freep(payload); reuse();
// Recyle the real owner of message, no other reference object.
if (shared_msg && shared_msg->count() == 0) {
_srs_rtp_msg_cache->recycle(shared_msg);
shared_msg = NULL;
} else {
srs_freep(shared_msg);
}
} }
bool SrsRtpPacket2::reset() void SrsRtpPacket2::reuse()
{ {
nalu_type = SrsAvcNaluTypeReserved;
frame_type = SrsFrameTypeReserved;
cached_payload_size = 0;
decode_handler = NULL;
header.reset();
// Only recycle some common payloads. // Only recycle some common payloads.
SrsRtpRawPayload* raw_payload; SrsRtpRawPayload* raw_payload;
SrsRtpFUAPayload2* fua_payload; SrsRtpFUAPayload2* fua_payload;
@ -853,13 +839,27 @@ bool SrsRtpPacket2::reset()
srs_freep(payload); srs_freep(payload);
} }
// Recyle the real owner of message, no other reference object. // Recycle the real owner of message, clear the reference.
if (shared_msg && shared_msg->count() == 0) { if (shared_msg) {
if (shared_msg->count() > 0) {
shared_msg->unwrap();
}
_srs_rtp_msg_cache->recycle(shared_msg); _srs_rtp_msg_cache->recycle(shared_msg);
shared_msg = NULL; shared_msg = NULL;
} else {
srs_freep(shared_msg);
} }
}
bool SrsRtpPacket2::reset()
{
nalu_type = SrsAvcNaluTypeReserved;
frame_type = SrsFrameTypeReserved;
cached_payload_size = 0;
decode_handler = NULL;
header.reset();
// Reset and reuse the payload and shared message.
reuse();
return true; return true;
} }
@ -1095,6 +1095,8 @@ SrsRtpRawNALUs::SrsRtpRawNALUs()
{ {
cursor = 0; cursor = 0;
nn_bytes = 0; nn_bytes = 0;
++_srs_pps_objs_rothers->sugar;
} }
SrsRtpRawNALUs::~SrsRtpRawNALUs() SrsRtpRawNALUs::~SrsRtpRawNALUs()
@ -1232,6 +1234,8 @@ ISrsRtpPayloader* SrsRtpRawNALUs::copy()
SrsRtpSTAPPayload::SrsRtpSTAPPayload() SrsRtpSTAPPayload::SrsRtpSTAPPayload()
{ {
nri = (SrsAvcNaluType)0; nri = (SrsAvcNaluType)0;
++_srs_pps_objs_rothers->sugar;
} }
SrsRtpSTAPPayload::~SrsRtpSTAPPayload() SrsRtpSTAPPayload::~SrsRtpSTAPPayload()
@ -1381,7 +1385,7 @@ SrsRtpFUAPayload::SrsRtpFUAPayload()
start = end = false; start = end = false;
nri = nalu_type = (SrsAvcNaluType)0; nri = nalu_type = (SrsAvcNaluType)0;
++_srs_pps_objs_rfua->sugar; ++_srs_pps_objs_rothers->sugar;
} }
SrsRtpFUAPayload::~SrsRtpFUAPayload() SrsRtpFUAPayload::~SrsRtpFUAPayload()

View file

@ -302,6 +302,8 @@ private:
public: public:
SrsRtpPacket2(); SrsRtpPacket2();
virtual ~SrsRtpPacket2(); virtual ~SrsRtpPacket2();
private:
void reuse();
public: public:
// Reset the object to reuse it. // Reset the object to reuse it.
virtual bool reset(); virtual bool reset();
@ -356,6 +358,9 @@ public:
bool enabled() { bool enabled() {
return enabled_; return enabled_;
} }
int size() {
return (int)cache_objs_.size();
}
// Try to allocate from cache, create new object if no cache. // Try to allocate from cache, create new object if no cache.
T* allocate() { T* allocate() {
while (true) { while (true) {