Forum d'entraide de la communauté Freedom-IP VPN
Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Le code suivant n'est pas bien optimisé, et est exécuté trop lentement.
Source: linux-3.16.0/net/sched/sch_htb.c
/**
* 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 s64 htb_do_events(struct htb_sched *q, const 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;
struct rb_root *wait_pq = &q->hlevel[level].wait_pq;
while (time_before(jiffies, stop_at)) {
struct htb_class *cl;
s64 diff;
struct rb_node *p = rb_first(wait_pq);
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, wait_pq);
diff = min_t(s64, 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)) {
pr_warn("htb: too many events!\n");
q->warned |= HTB_WARN_TOOMANYEVENTS;
}
return q->now;
}
A vous de trouver la solution, bonne chance.
Cordialement,
hmz
If privacy is outlawed, only outlaws will have privacy.
Hors ligne
Bonjour,
Une petite recherche sur google fait toujours la diff., même pour quelqu'un qui n'y connaît pas grand chose
Cordialement
Hors ligne
Bonsoir,
Pas facile ! En tout cas, merci pour la découverte de "htb" et ce qui va avec. C'est vraiment énorme le potentiel de configuration (d'après mes recherches)! Mais, je ne suis peut-être pas sur le bonne route... .
Pour l'optimiser, je dirais qu'il faut mettre en place des classes. Grâce à ça, rendre utilisable ce qui n'est pas utilisé. Ce n'est pas clair ! Pour moi non plus .
Par contre, je ne comprends pas la partie du code à changer. Rien ne me dirige la dessus, j'en revient toujours à la création d'un arbre avec des classes... . Est-il possible d'avoir une piste ? Pour le trop lentement je sèche complet (le reste aussi d'ailleurs).
(Un non expert en langage de bas niveau .)
Merci
18
"Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions."
Confucius
Hors ligne
Salut 18,
Ce code permet au kernel Linux de prioriser les paquets IP qui sorte/entre/transite par lui. Ce code a été écrie pour de vieux processeurs, et la solution reside dans le fait d'augmenter de le nombre de tours effectués par le système.
unsigned long stop_at = start + 2;
peut devenir
unsigned long stop_at = start + 4;
Cheers
If privacy is outlawed, only outlaws will have privacy.
Hors ligne
Pages : 1