Lines Matching full:aggregate
41 classes. Each aggregate is timestamped with a virtual start time S
44 time function V. The classes within each aggregate are instead
97 * Shifts used for aggregate<->group mapping. We allow class weights that are
98 * in the range [1, 2^MAX_WSHIFT], and we try to map each aggregate i to the
100 * for the classes in the aggregate.
118 #define QFQ_MAX_AGG_CLASSES 8 /* max num classes per aggregate allowed */
140 struct qfq_aggregate *agg; /* Parent aggregate. */
155 u32 class_weight; /* Weight of each class in this aggregate. */
156 /* Max pkt size for the classes in this aggregate, DRR quantum. */
160 u32 budgetmax; /* Max budget for this aggregate. */
186 struct qfq_aggregate *in_serv_agg; /* Aggregate being served. */
199 * Possible reasons why the timestamps of an aggregate are updated
200 * enqueue: the aggregate switches from idle to active and must scheduled
202 * requeue: the aggregate finishes its budget, so it stops being served and
282 /* Update aggregate as a function of the new number of classes. */
316 /* Add class to aggregate. */
346 /* Deschedule class from within its parent aggregate. */
352 list_del(&cl->alist); /* remove from RR queue of the aggregate */ in qfq_deactivate_class()
357 /* Remove class from its parent aggregate. */
370 /* Deschedule class and remove it from its parent aggregate. */
379 /* Move class to a new aggregate, matching the new class weight and/or lmax */
391 if (new_agg == NULL) { /* create new aggregate */ in qfq_change_agg()
502 if (new_agg == NULL) { /* create new aggregate */ in qfq_change_class()
830 * The index of the slot in which the input aggregate agg is to be
833 * backward by one slot after the aggregate has been inserted, and
840 * happens that the aggregate becomes backlogged and eligible, or just
841 * eligible, while an aggregate with a higher approximated finish time
869 * class is decreased, then a new aggregate with smaller slot size
870 * than the original parent aggregate of the class may happen to be
871 * activated. The activation of this aggregate should be properly
873 * system tracked by QFQ+. If the activation of the aggregate is not
874 * delayed to this reference time instant, then this aggregate may be
879 * Instead of delaying the activation of the new aggregate, which is
925 * Returns the first aggregate in the first non-empty bucket of the
981 /* Dequeue head packet of the head class in the DRR queue of the aggregate. */
1018 /* Update F according to the actual service received by the aggregate. */
1021 /* Compute the service received by the aggregate, taking into in charge_actual_service()
1032 /* Assign a reasonable start time for a new aggregate in group i.
1073 * value, i.e., the virtual finish time with which the aggregate
1106 * If there are no active classes in the in-service aggregate, in qfq_dequeue()
1107 * or if the aggregate has not enough budget to serve its next in qfq_dequeue()
1108 * class, then choose the next aggregate to serve. in qfq_dequeue()
1113 /* recharge the budget of the aggregate */ in qfq_dequeue()
1121 * aggregate is active, then there is no point in qfq_dequeue()
1122 * in rescheduling this aggregate, and we can in qfq_dequeue()
1130 } else if (sch->q.qlen == 0) { /* no aggregate to serve */ in qfq_dequeue()
1137 * choose the new aggregate to serve. in qfq_dequeue()
1274 /* schedule class for service within the aggregate */ in qfq_enqueue()
1288 * Schedule aggregate according to its timestamps.
1344 q->in_serv_agg = agg; /* start serving this aggregate */ in qfq_activate_agg()
1368 * Called to forcibly deschedule an aggregate. If the aggregate is
1370 * the front bucket, we can simply remove the aggregate with no other