From 71cc8e35d97be7c48379e3e18b7c70c4dfc49535 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 11 Feb 2021 13:26:20 +0800 Subject: [PATCH] Core: Refine ST stat for thread switch --- trunk/3rdparty/st-srs/sched.c | 11 +++++++++++ trunk/src/app/srs_app_hybrid.cpp | 17 +++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/trunk/3rdparty/st-srs/sched.c b/trunk/3rdparty/st-srs/sched.c index 71b2ad8e9..e7e8da36c 100644 --- a/trunk/3rdparty/st-srs/sched.c +++ b/trunk/3rdparty/st-srs/sched.c @@ -63,6 +63,9 @@ unsigned long long _st_stat_sched_160ms = 0; unsigned long long _st_stat_sched_320ms = 0; unsigned long long _st_stat_sched_1000ms = 0; unsigned long long _st_stat_sched_s = 0; + +unsigned long long _st_stat_thread_run = 0; +unsigned long long _st_stat_thread_idle = 0; #endif @@ -131,10 +134,18 @@ void _st_vp_schedule(void) _st_thread_t *thread; if (_ST_RUNQ.next != &_ST_RUNQ) { + #ifdef DEBUG + ++_st_stat_thread_run; + #endif + /* Pull thread off of the run queue */ thread = _ST_THREAD_PTR(_ST_RUNQ.next); _ST_DEL_RUNQ(thread); } else { + #ifdef DEBUG + ++_st_stat_thread_idle; + #endif + /* If there are no threads to run, switch to the idle thread */ thread = _st_this_vp.idle_thread; } diff --git a/trunk/src/app/srs_app_hybrid.cpp b/trunk/src/app/srs_app_hybrid.cpp index f56b99eeb..06fdc6464 100644 --- a/trunk/src/app/srs_app_hybrid.cpp +++ b/trunk/src/app/srs_app_hybrid.cpp @@ -112,6 +112,11 @@ SrsPps* _srs_pps_clock_80ms = new SrsPps(_srs_clock); SrsPps* _srs_pps_clock_160ms = new SrsPps(_srs_clock); SrsPps* _srs_pps_timer_s = new SrsPps(_srs_clock); +extern unsigned long long _st_stat_thread_run; +extern unsigned long long _st_stat_thread_idle; +SrsPps* _srs_pps_thread_run = new SrsPps(_srs_clock); +SrsPps* _srs_pps_thread_idle = new SrsPps(_srs_clock); + ISrsHybridServer::ISrsHybridServer() { } @@ -248,7 +253,7 @@ srs_error_t SrsHybridServer::run() } // Wait for all server to quit. - srs_thread_exit(NULL); + srs_usleep(SRS_UTIME_NO_TIMEOUT); return err; } @@ -417,11 +422,19 @@ srs_error_t SrsHybridServer::notify(int event, srs_utime_t interval, srs_utime_t clock_desc = buf; } - srs_trace("Hybrid cpu=%.2f%%,%dMB%s%s%s%s%s%s%s%s%s", + string thread_desc; + _srs_pps_thread_run->update(_st_stat_thread_run); _srs_pps_thread_idle->update(_st_stat_thread_idle); + if (_srs_pps_thread_run->r10s() || _srs_pps_thread_idle->r10s()) { + snprintf(buf, sizeof(buf), ", co=%d,%d", _srs_pps_thread_run->r10s(), _srs_pps_thread_idle->r10s()); + thread_desc = buf; + } + + srs_trace("Hybrid cpu=%.2f%%,%dMB%s%s%s%s%s%s%s%s%s%s", u->percent * 100, memory, cid_desc.c_str(), timer_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(), + thread_desc.c_str(), free_desc.c_str() );