Hello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/osmo-bsc/+/28062
to look at the new patch set (#2).
Change subject: paging: Avoid queueing more than 60 second estimated requests
......................................................................
paging: Avoid queueing more than 60 second estimated requests
Reaching this point will only make system load (CPU, mem) grow, making
it hard for the process to keep up with work to do, with no benefit
since the requests will anyway be scheduled too late.
Related: SYS#5922
Change-Id: I6523c6816a4d16b71084d004e979be40cf0aeeb0
---
M include/osmocom/bsc/bts.h
M include/osmocom/bsc/paging.h
M src/osmo-bsc/bts.c
M src/osmo-bsc/paging.c
M tests/paging/paging_test.ok
5 files changed, 1,517 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/62/28062/2
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/28062
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I6523c6816a4d16b71084d004e979be40cf0aeeb0
Gerrit-Change-Number: 28062
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newpatchset
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/28062 )
Change subject: paging: Avoid queueing more than 60 second estimated requests
......................................................................
paging: Avoid queueing more than 60 second estimated requests
Related: SYS#5922
Change-Id: I6523c6816a4d16b71084d004e979be40cf0aeeb0
---
M include/osmocom/bsc/bts.h
M include/osmocom/bsc/paging.h
M src/osmo-bsc/bts.c
M src/osmo-bsc/paging.c
M tests/paging/paging_test.ok
5 files changed, 1,515 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/62/28062/1
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/28062
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I6523c6816a4d16b71084d004e979be40cf0aeeb0
Gerrit-Change-Number: 28062
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/28052 )
Change subject: paging: Fix recalculate work timer if waiting for retrans
......................................................................
paging: Fix recalculate work timer if waiting for retrans
We want to recalculate the timer based on last time the work_timer was
triggered (that is, the time when the worker re-armed the pag req to
retransmit). We don't want to recalculate based on the last time the pag
ret tro retransmit was scheduled.
In loaded paging queue, there's lots of retrans (let's say 200) and it
may take more than 500ms to actually retransmit them. That means in most
cases we could end up in a situation where only pag req to retrans where
in the queue, hitting this recalculate path. Since the 500ms were for
sure elapsed, that would most probably schedule the work_timer at {0,0}
for each new paging request that arrived. As a result, the worker would
be scheduled lots of times per second (once for each new req arriving)
and only submitting 1 pag req (the new one) plus potentially 1 or
serveral pag req to retransmit.
In summary, there was not throthling applied in the scenario where only
pag req to retransmit where in the queue and new pag reqs kept arriving.
This incurrs into augmented paging throughput and also augmented
frequency of polls().
Related: OS#5922
Fixes: 4821c9f4dff3cb9d06ee8392de18fd7c63399bf0
Change-Id: I7ce6f436286b50dc31331d218ff256cf7be3f619
---
M include/osmocom/bsc/paging.h
M src/osmo-bsc/paging.c
2 files changed, 5 insertions(+), 4 deletions(-)
Approvals:
laforge: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/include/osmocom/bsc/paging.h b/include/osmocom/bsc/paging.h
index 9b63225..9eddda0 100644
--- a/include/osmocom/bsc/paging.h
+++ b/include/osmocom/bsc/paging.h
@@ -106,6 +106,9 @@
struct osmo_timer_list work_timer;
struct osmo_timer_list credit_timer;
+ /* Last time paging worker was triggered */
+ struct timespec last_sched_ts;
+
/* free chans needed */
int free_chans_need;
diff --git a/src/osmo-bsc/paging.c b/src/osmo-bsc/paging.c
index 1e2171c..fe403d2 100644
--- a/src/osmo-bsc/paging.c
+++ b/src/osmo-bsc/paging.c
@@ -225,6 +225,7 @@
goto sched_next_iter;
osmo_clock_gettime(CLOCK_MONOTONIC, &now);
+ paging_bts->last_sched_ts = now;
/* do while loop: Try send at most first MAX_PAGE_REQ_PER_ITER paging
* requests (or before if there are no more available slots). Since
@@ -458,11 +459,8 @@
* which is a longer period.
* Let's recaculate the time to adapt it to initial_period: */
struct timespec now, elapsed, tdiff;
- struct gsm_paging_request *first_retrans_req;
osmo_clock_gettime(CLOCK_MONOTONIC, &now);
- /* This is what used to be the first req (retrans state) in the queue: */
- first_retrans_req = llist_entry(req->entry.next, struct gsm_paging_request, entry);
- timespecsub(&now, &first_retrans_req->last_attempt_ts, &elapsed);
+ timespecsub(&now, &bts_entry->last_sched_ts, &elapsed);
if (timespeccmp(&elapsed, &initial_period, <)) {
timespecsub(&initial_period, &elapsed, &tdiff);
} else {
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/28052
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I7ce6f436286b50dc31331d218ff256cf7be3f619
Gerrit-Change-Number: 28052
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/28053 )
Change subject: paging: Avoid unnecessary immediate polling in mainloop
......................................................................
paging: Avoid unnecessary immediate polling in mainloop
We have seen an increased CPU load in osmo-bsc recently since the paging
improvements where merged, centered round poll() calls.
It is expected most of them will be fixed with previous patch. In any
case, let's avoid unnecessary poll() calls being called for no reason.
Related: OS#5922
Change-Id: Ie767bdc8d4353aafe375a424e02d698ef7fd3dea
---
M src/osmo-bsc/paging.c
1 file changed, 5 insertions(+), 1 deletion(-)
Approvals:
pespin: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/src/osmo-bsc/paging.c b/src/osmo-bsc/paging.c
index fe403d2..4cac64c 100644
--- a/src/osmo-bsc/paging.c
+++ b/src/osmo-bsc/paging.c
@@ -469,7 +469,11 @@
LOG_PAGING_BTS(req, req->bts, DPAG, LOGL_DEBUG,
"New req arrived: re-scheduling next batch in %lld.%06lds\n",
(long long)tdiff.tv_sec, tdiff.tv_nsec / 1000);
- osmo_timer_schedule(&bts_entry->work_timer, tdiff.tv_sec, tdiff.tv_nsec / 1000);
+ /* Avoid scheduling timer for short periods, run cb directly: */
+ if (tdiff.tv_sec == 0 && tdiff.tv_nsec < 5000)
+ paging_worker(bts_entry);
+ else
+ osmo_timer_schedule(&bts_entry->work_timer, tdiff.tv_sec, tdiff.tv_nsec / 1000);
} /* else: worker is already ongoing submitting initial requests, nothing do be done */
return 0;
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/28053
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: Ie767bdc8d4353aafe375a424e02d698ef7fd3dea
Gerrit-Change-Number: 28053
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged