In function 'pcc_decide()'
if (new_rate != pcc->rate) {
printk(KERN_INFO "%d decide: on new rate %d %d (%d)\n",
pcc->id, pcc->rate < new_rate, new_rate,
pcc->decisions_count);
pcc->moving = true;
pcc_setup_intervals_moving(pcc, list);
} else {
printk(KERN_INFO "%d decide: stay %d (%d)\n", pcc->id,
pcc->rate, pcc->decisions_count);
pcc_setup_intervals_probing(pcc, list);
}
pcc->rate = new_rate; // update new rate
When the condition: new_rate != pcc->rate is satisified, PCC will enter moving stage and set the next monitor interval's rate in function:
' pcc_setup_intervals_moving(...)'
/* Reset statistics and set the target rate for just one monitor interval */
static void pcc_setup_intervals_moving(struct pcc_data *pcc)
{
pcc->intervals[0].packets_sent_base = 0;
pcc->intervals[0].rate = pcc->rate;
pcc->send_index = 0;
pcc->recive_index = 0;
pcc->wait = false;
}
However, at this time, the value of pcc->rate has not been updated, and it is still runs the old rate for the next interval.
In function 'pcc_decide()'
When the condition:
new_rate != pcc->rateis satisified, PCC will enter moving stage and set the next monitor interval's rate in function:' pcc_setup_intervals_moving(...)'
However, at this time, the value of pcc->rate has not been updated, and it is still runs the old rate for the next interval.