On Mon, Nov 25, 2013 at 09:21:08AM +0100, Holger Hans Peter Freyther wrote:
As I have already pointed out. Some control blocks can
starve. I don't
know if it does but it is where I will continue to have a look.
Here is the starvation theory for the ping:
We have a LLC frame (or many queued up)... we schedule the polls and
at the final_ack indicate we decide to re-use the TBF. This means that
we will schedule another PACKET DOWNLINK ASSIGNMENT. But at the same
time we either want to honor the "rh->si" or want to schedule the ACK
due SEND_ACK_AFTER_FRAMES.
So we more or less want to send "PACKET DOWNLINK ASSIGNMENT" and the
"PACKET UPLINK ACK" at the same time (with more DL tbfs/traffic this
is getting more likely) but currently we will always prefer the PACKET
DOWNLINK ASSIGNMENT. This means that the uplink will starve (e.g. the
window stalled, rh->si means that the uplink will starve (the window
will stall, rh->si being set, etc).
Fairness improvements:
* put ul_ass_tbf, dl_ass_tbf, ul_ack_tbf in an array and store the
last index in the PDCH and iterate over it.
* move the TBF to the front of the ul_tbfs and dl_tbfs list so that
it is not selected again.
--
- Holger Freyther <hfreyther(a)sysmocom.de>
http://www.sysmocom.de/
=======================================================================
* sysmocom - systems for mobile communications GmbH
* Schivelbeiner Str. 5
* 10439 Berlin, Germany
* Sitz / Registered office: Berlin, HRB 134158 B
* Geschaeftsfuehrer / Managing Directors: Holger Freyther, Harald Welte