This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
dexter gerrit-no-reply at lists.osmocom.orgdexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/24658 )
Change subject: paging: prioritize ps related paging over cs related pagings.
......................................................................
paging: prioritize ps related paging over cs related pagings.
When the paging queue is filled up to a critical level, pagings from the
PCU should be dropped as each immediate assignment paging from the PCU
is worth 4 CS pagings. Also the PCU may still issue pagings if the
paginging queue is already full and CS pagings are dropped. In a
congestion situation it is more important to get the CS rather than PS
pagings through.
Change-Id: I30f97672d7a0c369c4a656e878ab8cbbd83e31ea
Related: SYS#5306
---
M src/common/paging.c
1 file changed, 41 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/58/24658/1
diff --git a/src/common/paging.c b/src/common/paging.c
index 2973141..8924471 100644
--- a/src/common/paging.c
+++ b/src/common/paging.c
@@ -80,8 +80,33 @@
/* total number of currently active paging records in queue */
unsigned int num_paging;
struct llist_head paging_queue[MAX_PAGING_BLOCKS_CCCH*MAX_BS_PA_MFRMS];
+
+ /* prioritization of cs pagings will automatically become
+ * active on congestions (queue almost full) */
+ bool cs_priority_active;
};
+/* Upper queue fill level in %, when execeeed prioritization is turned on */
+#define THRESHOLD_CONGESTED 66
+/* Lower queue fill level in %, when reached prioritization is turned off again */
+#define THRESHOLD_CLEAR 50
+
+/* Check the queue fill status and decide if prioritization of CS pagings
+ * must be turned on to flatten the negative effects of the congestion
+ * situation on the CS domain. */
+static void check_congestion(struct paging_state *ps)
+{
+ int pag_queue_len = paging_queue_length(ps);
+ int pag_queue_max = paging_get_queue_max(ps);
+ unsigned int treshold_upper = pag_queue_max * THRESHOLD_CONGESTED / 100;
+ unsigned int treshold_lower = pag_queue_max * THRESHOLD_CLEAR / 100;
+
+ if (pag_queue_len > treshold_upper)
+ ps->cs_priority_active = true;
+ else if (pag_queue_len < treshold_lower)
+ ps->cs_priority_active = false;
+}
+
unsigned int paging_get_lifetime(struct paging_state *ps)
{
return ps->paging_lifetime;
@@ -181,6 +206,8 @@
int blocks = gsm48_number_of_paging_subchannels(&ps->chan_desc);
struct paging_record *pr;
+ check_congestion(ps);
+
rate_ctr_inc2(ps->bts->ctrs, BTS_CTR_PAGING_RCVD);
if (paging_group >= blocks) {
@@ -244,6 +271,15 @@
struct paging_record *pr;
uint16_t imsi, paging_group;
+ check_congestion(ps);
+
+ if (ps->cs_priority_active) {
+ LOGP(DPAG, LOGL_NOTICE, "Dropping paging for PS, queue congested (%u)\n",
+ ps->num_paging);
+ rate_ctr_inc2(ps->bts->ctrs, BTS_CTR_PAGING_DROP);
+ return -ENOSPC;
+ }
+
if (len != GSM_MACBLOCK_LEN + 3) {
LOGP(DPAG, LOGL_ERROR, "IMM.ASS invalid length %d\n", len);
return -EINVAL;
@@ -530,6 +566,10 @@
int group;
int len;
+ /* This will have no effect on behavior of this function, we just need
+ * need to check the congestion status of the queue from time to time. */
+ check_congestion(ps);
+
*is_empty = 0;
bts->load.ccch.pch_total += 1;
@@ -711,6 +751,7 @@
ps->bts = bts;
ps->paging_lifetime = paging_lifetime;
ps->num_paging_max = num_paging_max;
+ ps->cs_priority_active = false;
for (i = 0; i < ARRAY_SIZE(ps->paging_queue); i++)
INIT_LLIST_HEAD(&ps->paging_queue[i]);
--
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/24658
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I30f97672d7a0c369c4a656e878ab8cbbd83e31ea
Gerrit-Change-Number: 24658
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210614/7049f6ab/attachment.htm>