aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2015-07-16 15:04:07 +0200
committerJacob Erlbeck <jerlbeck@sysmocom.de>2015-07-16 19:24:16 +0200
commit7af53e61f0a9de8c6ebe412d7bb0ffe11f71dbbd (patch)
tree5ef442d57d1c38d901d5ce5f1e512931a07d92f0
parent88fb6136fb8b69f37ded4c868689556f3bde3ac8 (diff)
alloc: Use a separate usage computation for algo A
Currently algorithm A can select an TBF even when there is no free TBF in the reverse direction. While this does not necessarily lead to an allocation failure, the probabily is higher. In addition, the current slot reservations are not taken into account. This commit changes the selection algorithm to prefer slots where TFI are available in both directions and which are less reserved. Sponsored-by: On-Waves ehf
-rw-r--r--src/gprs_rlcmac_ts_alloc.cpp18
-rw-r--r--tests/alloc/AllocTest.ok112
2 files changed, 73 insertions, 57 deletions
diff --git a/src/gprs_rlcmac_ts_alloc.cpp b/src/gprs_rlcmac_ts_alloc.cpp
index ffbbe2b8..e2c2a0f4 100644
--- a/src/gprs_rlcmac_ts_alloc.cpp
+++ b/src/gprs_rlcmac_ts_alloc.cpp
@@ -211,6 +211,22 @@ static int compute_usage_by_reservation(struct gprs_rlcmac_pdch *pdch,
pdch->num_reserved(GPRS_RLCMAC_UL_TBF);
}
+static int compute_usage_for_algo_a(struct gprs_rlcmac_pdch *pdch,
+ enum gprs_rlcmac_tbf_direction dir)
+{
+ int usage =
+ pdch->num_tbfs(GPRS_RLCMAC_DL_TBF) +
+ pdch->num_tbfs(GPRS_RLCMAC_UL_TBF) +
+ compute_usage_by_reservation(pdch, dir);
+
+ if (pdch->assigned_tfi(reverse(dir)) == 0xffffffff)
+ /* No TFI in the opposite direction, avoid it */
+ usage += 32;
+
+ return usage;
+
+}
+
static int find_least_busy_pdch(struct gprs_rlcmac_trx *trx,
enum gprs_rlcmac_tbf_direction dir,
uint8_t mask,
@@ -417,7 +433,7 @@ int alloc_algorithm_a(struct gprs_rlcmac_bts *bts,
return -EINVAL;
ts = find_least_busy_pdch(trx, tbf->direction, mask,
- compute_usage_by_reservation,
+ compute_usage_for_algo_a,
&tfi, &usf);
if (tbf->direction == GPRS_RLCMAC_UL_TBF && usf < 0) {
diff --git a/tests/alloc/AllocTest.ok b/tests/alloc/AllocTest.ok
index 542c74bd..046b51a1 100644
--- a/tests/alloc/AllocTest.ok
+++ b/tests/alloc/AllocTest.ok
@@ -9610,72 +9610,72 @@ Going to test assignment with many TBF, algorithm dynamic class 10 (DL ONLY)
TBF[30] class 10 reserves ...CD...
TBF[31] class 10 reserves ...CD...
TBF[1] class 10 reserves ...C....
- TBF[3] class 10 reserves ...C....
- TBF[5] class 10 reserves ...C....
TBF[0] class 10 reserves .......C
- TBF[7] class 10 reserves ...C....
+ TBF[3] class 10 reserves ...C....
TBF[2] class 10 reserves .......C
- TBF[9] class 10 reserves ...C....
+ TBF[5] class 10 reserves ...C....
TBF[2] class 10 reserves ......C.
TBF[4] class 10 reserves .......C
- TBF[11] class 10 reserves ...C....
+ TBF[7] class 10 reserves ...C....
TBF[4] class 10 reserves ......C.
- TBF[1] class 10 reserves ....C...
TBF[6] class 10 reserves .......C
- TBF[13] class 10 reserves ...C....
+ TBF[9] class 10 reserves ...C....
+ TBF[1] class 10 reserves ....C...
TBF[6] class 10 reserves ......C.
- TBF[3] class 10 reserves ....C...
TBF[8] class 10 reserves .......C
- TBF[15] class 10 reserves ...C....
+ TBF[11] class 10 reserves ...C....
+ TBF[3] class 10 reserves ....C...
TBF[8] class 10 reserves ......C.
- TBF[5] class 10 reserves ....C...
- TBF[22] class 10 reserves .....C..
TBF[10] class 10 reserves .......C
- TBF[17] class 10 reserves ...C....
+ TBF[13] class 10 reserves ...C....
+ TBF[5] class 10 reserves ....C...
TBF[10] class 10 reserves ......C.
- TBF[7] class 10 reserves ....C...
- TBF[24] class 10 reserves .....C..
TBF[12] class 10 reserves .......C
- TBF[19] class 10 reserves ...C....
+ TBF[15] class 10 reserves ...C....
+ TBF[7] class 10 reserves ....C...
TBF[12] class 10 reserves ......C.
- TBF[9] class 10 reserves ....C...
- TBF[25] class 10 reserves .....C..
TBF[14] class 10 reserves .......C
- TBF[21] class 10 reserves ...C....
+ TBF[17] class 10 reserves ...C....
+ TBF[9] class 10 reserves ....C...
+ TBF[22] class 10 reserves .....C..
TBF[14] class 10 reserves ......C.
- TBF[11] class 10 reserves ....C...
- TBF[27] class 10 reserves .....C..
TBF[16] class 10 reserves .......C
- TBF[23] class 10 reserves ...C....
+ TBF[19] class 10 reserves ...C....
+ TBF[11] class 10 reserves ....C...
+ TBF[24] class 10 reserves .....C..
TBF[16] class 10 reserves ......C.
- TBF[13] class 10 reserves ....C...
- TBF[30] class 10 reserves .....C..
TBF[18] class 10 reserves .......C
- TBF[26] class 10 reserves ...C....
+ TBF[21] class 10 reserves ...C....
+ TBF[13] class 10 reserves ....C...
+ TBF[25] class 10 reserves .....C..
TBF[18] class 10 reserves ......C.
- TBF[15] class 10 reserves ....C...
- TBF[31] class 10 reserves .....C..
TBF[20] class 10 reserves .......C
- TBF[28] class 10 reserves ...C....
+ TBF[23] class 10 reserves ...C....
+ TBF[15] class 10 reserves ....C...
+ TBF[27] class 10 reserves .....C..
TBF[20] class 10 reserves ......C.
- TBF[17] class 10 reserves ....C...
TBF[22] class 10 reserves .......C
- TBF[29] class 10 reserves ...C....
+ TBF[26] class 10 reserves ...C....
+ TBF[17] class 10 reserves ....C...
+ TBF[30] class 10 reserves .....C..
TBF[22] class 10 reserves ......C.
- TBF[19] class 10 reserves ....C...
TBF[24] class 10 reserves .......C
+ TBF[28] class 10 reserves ...C....
+ TBF[19] class 10 reserves ....C...
+ TBF[31] class 10 reserves .....C..
TBF[24] class 10 reserves ......C.
- TBF[21] class 10 reserves ....C...
TBF[25] class 10 reserves .......C
+ TBF[29] class 10 reserves ...C....
+ TBF[21] class 10 reserves ....C...
TBF[25] class 10 reserves ......C.
- TBF[23] class 10 reserves ....C...
TBF[27] class 10 reserves .......C
+ TBF[23] class 10 reserves ....C...
TBF[27] class 10 reserves ......C.
- TBF[26] class 10 reserves ....C...
TBF[28] class 10 reserves .......C
+ TBF[26] class 10 reserves ....C...
TBF[30] class 10 reserves ......C.
- TBF[29] class 10 reserves ....C...
TBF[30] class 10 reserves .......C
+ TBF[29] class 10 reserves ....C...
TBF[31] class 10 reserves ......C.
TBF[31] class 10 reserves .......C
Successfully allocated 101 UL TBFs
@@ -10591,38 +10591,38 @@ Going to test assignment with many connections, algorithm dynamic
TBF[25] class 26 reserves ...CD...
TBF[10] class 27 reserves ......C.
TBF[21] class 28 reserves ...C....
- TBF[12] class 29 reserves ....C...
- TBF[11] class 1 reserves ......C.
+ TBF[11] class 29 reserves ......C.
+ TBF[12] class 1 reserves ....C...
TBF[22] class 2 reserves ...C....
- TBF[13] class 3 reserves ....C...
- TBF[12] class 4 reserves ......C.
+ TBF[12] class 3 reserves ......C.
+ TBF[13] class 4 reserves ....C...
TBF[24] class 5 reserves ...C....
- TBF[18] class 6 reserves ....C...
- TBF[13] class 7 reserves ......C.
- TBF[19] class 8 reserves .......C
+ TBF[13] class 6 reserves ......C.
+ TBF[19] class 7 reserves .......C
+ TBF[18] class 8 reserves ....C...
TBF[26] class 9 reserves ...C....
- TBF[19] class 10 reserves ....C...
- TBF[18] class 11 reserves ......C.
- TBF[20] class 12 reserves .......C
+ TBF[18] class 10 reserves ......C.
+ TBF[20] class 11 reserves .......C
+ TBF[19] class 12 reserves ....C...
TBF[27] class 13 reserves ...C....
- TBF[26] class 14 reserves ....C...
- TBF[19] class 15 reserves ......C.
- TBF[21] class 16 reserves .......C
+ TBF[19] class 14 reserves ......C.
+ TBF[21] class 15 reserves .......C
+ TBF[26] class 16 reserves ....C...
TBF[28] class 17 reserves ...C....
TBF[19] class 18 reserves .....C..
- TBF[29] class 19 reserves ....C...
- TBF[20] class 20 reserves ......C.
- TBF[23] class 21 reserves .......C
+ TBF[20] class 19 reserves ......C.
+ TBF[23] class 20 reserves .......C
+ TBF[29] class 21 reserves ....C...
TBF[29] class 22 reserves ...C....
TBF[25] class 23 reserves .....C..
- TBF[30] class 24 reserves ....C...
- TBF[21] class 25 reserves ......C.
- TBF[24] class 26 reserves .......C
+ TBF[21] class 24 reserves ......C.
+ TBF[24] class 25 reserves .......C
+ TBF[30] class 26 reserves ....C...
TBF[30] class 27 reserves ...C....
TBF[31] class 28 reserves .....C..
- TBF[31] class 29 reserves ....C...
- TBF[23] class 1 reserves ......C.
- TBF[25] class 2 reserves .......C
+ TBF[23] class 29 reserves ......C.
+ TBF[25] class 1 reserves .......C
+ TBF[31] class 2 reserves ....C...
TBF[31] class 3 reserves ...C....
TBF[25] class 4 reserves ......C.
TBF[28] class 5 reserves .......C