- 论坛徽章:
- 0
|
本帖最后由 lin_wang 于 2010-03-19 21:32 编辑
回复 4# emmoblin
那请教下, 用 tc change 频繁更改(2秒一次) htb 的子类时 dmesg 里报 htb: too many events! 是怎么回事呢? 有什么影响?
我看了htb的源码, 那段不是很明白- /**
- * htb_do_events - make mode changes to classes at the level
- *
- * Scans event queue for pending events and applies them. Returns time of
- * next pending event (0 for no event in pq, q->now for too many events).
- * Note: Applied are events whose have cl->pq_key <= q->now.
- */
- static psched_time_t htb_do_events(struct htb_sched *q, int level,
- unsigned long start)
- {
- /* don't run for longer than 2 jiffies; 2 is used instead of
- 1 to simplify things when jiffy is going to be incremented
- too soon */
- unsigned long stop_at = start + 2;
- while (time_before(jiffies, stop_at)) {
- struct htb_class *cl;
- long diff;
- struct rb_node *p = rb_first(&q->wait_pq[level]);
- if (!p)
- return 0;
- cl = rb_entry(p, struct htb_class, pq_node);
- if (cl->pq_key > q->now)
- return cl->pq_key;
- htb_safe_rb_erase(p, q->wait_pq + level);
- diff = psched_tdiff_bounded(q->now, cl->t_c, cl->mbuffer);
- htb_change_class_mode(q, cl, &diff);
- if (cl->cmode != HTB_CAN_SEND)
- htb_add_to_wait_tree(q, cl, diff);
- }
- /* too much load - let's continue after a break for scheduling */
- if (!(q->warned & HTB_WARN_TOOMANYEVENTS)) {
- printk(KERN_WARNING "htb: too many events!\n");
- q->warned |= HTB_WARN_TOOMANYEVENTS;
- }
- return q->now;
- }
复制代码 |
|