Forum Freedom-IP VPN

Forum d'entraide de la communauté Freedom-IP VPN

Vous n'êtes pas identifié(e).

#1 2015-09-07 03:25:45

hmz
Administrateur
Inscription : 2013-03-21
Messages : 2 139

Optimisation Linux

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

#2 2015-09-07 12:19:21

chico
l'Axe du bien
Inscription : 2014-05-03
Messages : 695

Re : Optimisation Linux

Bonjour,

Une petite recherche sur google fait toujours la diff., même pour quelqu'un qui n'y connaît pas grand chose  wink

Cordialement

Hors ligne

#3 2015-09-08 22:42:41

18
Membre
Inscription : 2012-06-06
Messages : 50

Re : Optimisation Linux

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 tongue .
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). big_smile

(Un non expert en langage de bas niveau  smile .)
Merci
18


"Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions."
Confucius

Hors ligne

#4 2015-09-08 23:19:15

hmz
Administrateur
Inscription : 2013-03-21
Messages : 2 139

Re : Optimisation Linux

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

Pied de page des forums