Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

2 - Les distributions et les noyaux

> Forums de discussion > 2 - Les distributions et les noyaux > [RÉSOLU] Configuration multicœurs «On demand» pour économiser la puissance électrique // «performance» pour éviter les Xruns
Dernier post

[RÉSOLU] Configuration multicœurs «On demand» pour économiser la puissance électrique // «performance» pour éviter les Xruns

l_d_v_c utilisateur non connecté
Bonjour,

Configuration multicœurs «On demand» pour économiser la puissance électrique // «performance» pour éviter les Xruns.

résumé : Finis les Xruns de captures audio à cause du changement de fréquence avec l'économie d'énergie de l'ordinateur à CPU multicœurs !

Je me suis fait une réflexion toute bête : lors de la capture sonore, Jack doit tourner sur un cœur qui ne change pas de fréquence (pas d'économie d'énergie Quiet possible dans le BIOS de la TYAN S2915-E), mais c'est embêtant de bloquer les 2×4 cœurs à 2,3 GHz au niveau consommation électrique.

Merci à Monsieur Christian DELAIR de m'avoir mis sur la piste.

Alors c'est très simple : il suffit de dédier un cœur CPU fixé en mode performance à 2,3 GHz pour l'utilisation de Jack, et de lancer Jack sur cet unique cœur dédié. (on pourrait changer de cœur à chaque démarrage afin de ne pas user tout le temps la même cœur CPU).


extrait de http://manpages.ubuntu.com/manpages/jaunty/fr/man1/taskset.1.html
TASKSET(1)                                                                Commandes utilisateur                                                                TASKSET(1)

    NOM
           taskset - Récupérer ou définir l'affinité processeur d'un processus

    SYNOPSIS
           taskset [options] masque commande [paramètres] ...
           taskset [options] -p [masque] PID

    DESCRIPTION
           taskset  est généralement utilisé pour récupérer ou définir l'affinité processeur d'un processus en cours d'exécution en donnant son PID ou de lancer une nouvelle
           commande avec une affinité processeur fournie. L'affinité processeur est une propriété de l'ordonnanceur qui « lie » un processus à  un  ensemble  de  processeurs
           donné sur un système. L'ordonnanceur de Linux respectera l'affinité processeur et le processus ne s'exécutera sur aucun autre processeur. Notez que l'ordonnanceur
           Linux gère également l'affinité processeur dite « naturelle » : l'ordonnanceur essaie de maintenir les processus sur le même processeur tant que ça a du sens pour
           des raisons de performances. Ainsi, forcer une affinité processeur spécifique n'est utile que dans certaines applications.

           L'affinité du processeur est représentée par un masque de bits, avec le bit de poids le plus faible correspondant au premier processeur logique et le bit de poids
           le plus fort au dernier processeur logique. Tous les processeurs peuvent ne pas exister dans un système donné, mais un masque peut indiquer  plus  de  processeurs
           que  ceux  qui  sont présents. Un masque récupéré n'aura que les bits correspondants aux processeurs présents physiquement sur le système. Si un masque erroné est
           fourni (c'est-à-dire, un masque qui correspond à un processeur absent sur le système actuel) une erreur est alors renvoyée. Les masques sont généralement codés en
           hexadécimal. Par exemple :

           0x00000001
                  correspond au processeur nº 0

           0x00000003
                  correspond aux processeurs nº 0 et nº 1

           0xFFFFFFFF
                  correspond à tous les processeurs (nº 0 à nº 31).

           …


0xFFFFFFFF est un masque : 8×4=32 processeurs.


Un exemple avec le moniteur système, à adapter avec Jack :
# ps -ec|grep multiload
 1918 TS   19 ?        00:00:02 multiload-apple
# taskset -p 0x1  1918
pid 1918's current affinity mask: 3
pid 1918's new affinity mask: 1    #le moniteur système s’exécute uniquement sur le processeur de masque 1 : le premier CPU

#mais on peut forcer la tache 1918 de cet exemple, à utiliser le deuxième processeur :
# taskset -p 0x2  1918
pid 1918's current affinity mask: 1
pid 1918's new affinity mask: 2


Il ne reste plus qu'à configurer tous les processeurs en mode gouverneurs «ondemand» pour économiser la puissance à la prise secteur, sauf pour le processeur dédié à Jack qui sera en mode gouverneur «performance» afin de ne pas changer de fréquence et de ne pas générer de Xrun dans Jack.
(ne l'ayant pas effectué, il prévoir d'ajouter d'autres processus que Jack si les Xruns continuent).

J'espère que ça intéresse des gens qui font de la MAO ;)

Si quelqu'un peut finir la configuration, je n'ai exposé que le brouillon, l'idée générale.
Merci :-)
LDVC@

m2v2 utilisateur non connecté France
Bonjour,
l d v c écrit :
J'espère que ça intéresse des gens qui font de la MAO

Oui !

J'utilise une méthode plus simple mais sans doute moins efficace : indicator-cpufreq qui permet de changer de gouverneur à la volée. Je le place sur "performances" pour faire de la MAO un peu intense et surtout pour réaliser un morceau fini. Puis je le remets sur "à la demande" pour une utilisation normale de bureautique ou de MAO plus légère.

En plus de la consommation électrique, jouer sur les gouverneurs permet aussi de réduire l'échauffement donc le bruit du ventilateur !

Merci pour cet article.

l_d_v_c utilisateur non connecté
Bonsoir m2v2,

Quand il y a 2 processeurs Quad dans la machine qui arrive facilement à plus de 200 W en mode performance, l'approche que j'expose devient intéressante, il faut faire le petit script qui va bien, à la limite Jack peut lancer le script de modification des affinités des processeurs pour garder les cœurs des CPU de l'ordinateur en mode «on demand», sauf un cœur qui sera dédié à Jack en mode «performance» … :-) et le script en sortie de Jack qui repasserait la machine en mode «on demand» pour tous les cœurs CPU. smile

Voici la machine visée : TYAN S2915-E (très performante mais une gouffre de consommation si elle reste en mode performance - je n'ai pas trouvé comment augmenter la mémoire tampon du Firewire ce qui est une piste lancée par l'informaticien Linux Monsieur Christian DELAIR - afin de réduire les Xruns lors des changements de fréquences des 2×4 cœurs indépendants).

m2v2 utilisateur non connecté France
l d v c écrit :
Voici la machine visée : TYAN S2915-E


Une belle bête, associée à une interface audio au top... C'est sûr qu'avec ça on n'est pas trop limité par le matériel !
Tu arrives quand même à avoir des xruns en mode "ondemand" ?

Question subsidiaire : c'est pour un établissement d'enseignement ?

olinuxx utilisateur non connecté France
informationinfo
mode admin : J'ai déplacé ce fil du forum "1 - Le matériel et le pilotes ALSA, FFADO, ..." vers ici car les questions de ton message concernant d'avantage l'utilisation d'une fonctionnalité du noyau (le gouverneur) que les pilotes (ALSA et FFADO).


l_d_v_c utilisateur non connecté
Merci olinuxx smile
en fait cela concerne le noyau, et l'utilisation de Jack qui n'aimait pas les changements de fréquences du CPU il y a quelques mois. Je ne sais pas si les derniers noyaux ont résolu ce problèmes de Xruns aux changement de fréquences CPU…

l_d_v_c utilisateur non connecté
Bonjour olinuxx,
tu ne te trompes que sur l'accent du verbe «tromper» à la forme interrogative du présent de l'indicatif : «me trompé-je» ;)

Tous les verbe du premier groupe prennent un accent aigu à la forme interrogative de la première personne du singulier du présent de l'indicatif (plus facile à prononcer), à moins que tu sois en qwerty…

Effectivement, ce script dont on m'a demandé des nouvelles hier encore servira principalement à jack1, le plus utilisé, (voire le seul utilisé) dans mon entourage, Ubuntu, Debian…

Je m'intéresserai à jack2 le jour où il fonctionnera aussi bien que jack1 sur nos machines1, c'est-à-dire sans Xrun.

Toutefois, j'ai survolé le con,tenu de ton lien et je lis :
https://github.com/jackaudio/jackaudio.github.com/wiki/Q_difference_jack1_jack2 écrit :
(1) Jack2 can run in 2 different modes : "asynchronous" when the server does not wait for graph end for a given cycle but just write the outputs computed at the previous cycle. In this case an extra period of latency is added. Jack 2 can also be run in "synchronous" mode, when the server waits for the graph activation end in a given cycle, in which case it works like Jack 1.

Je ne sais pas trop si le même script peut servir à jack2.

Et comme personne ne se sert de jack2 dans mon entourage, y compris avec l'ordinateur MAO , je continue ce script, en espérant qu'il soit facile à faire et surtout, élimine tous les Xruns dus aux changement de fréquences des CPU, sur l'ordinateur pré-cité, qui consomme terriblement en mode «performance», et permettra de réduire la consommation en semi-mode «on-demand».

olinuxx utilisateur non connecté France
C'est fou ce qu'on apprend tous les jours ici :-) Encore un coup des grammairiens du 17ème siècle :-)

Perso, j'utilise jack2, et il ne me semble pas avoir de problème spécifique de xruns. Enfin, je vais tester quand même sur un ordi qui Xrun à blinde avec sa puce son HDA Intel, on sait jamais !

Bonne continuation avec ton script ! Tiens nous au jus des avancements.
Olivier

l_d_v_c utilisateur non connecté
Bonsoir,

après plusieurs essais, le plus simple finalement, et le plus efficace surtout, est de configurer l'ordinateur MAO en Powersave, puis au démarrage de Jack par l'interface QJack, il suffit d'exécuter le script performances.sh ; et à l'arrêt de Jack, il faut exécuter powersave.sh ; et c'est parfait.

Au démarrage :
#!/bin/bash
# performance.sh
# script to modify scheduler to cpu performance
# author : LDVC@
# 20151221 #the script performances

nb_cpu=$(cat /proc/cpuinfo | grep processor | wc -l)			#determine how many cpu cores in computer

for i in `seq 0 $(($nb_cpu-1))`;
	do cpufreq-selector -c $i -g ``performance'';			#change cpu scheduler to PERFORMANCE
done

exit 0

et à l'arrêt :
#!/bin/bash
# powersave.sh
# script to modify scheduler to cpu powersave
# author : LDVC@
# 20151221 #the script powersave

nb_cpu=$(cat /proc/cpuinfo | grep processor | wc -l)			#determine how many cpu cores in computer

for i in `seq 0 $(($nb_cpu-1))`;
	do cpufreq-selector -c $i -g ``powersave'';			#change cpu scheduler to POWERSAVE
done

exit 0


L'autre système (brouillon de scripts pour essais) ne changeait l'affinité que d'un processeur, mais c'était ensuite au tour d'Ardour de vouloir de la performance, et ça n'en finissait plus, ingérable.

Par ailleurs, j'ai compris l'explication des Xruns aux changements de fréquences des processeurs en Powersave en exécutant la commande cpufreq-info :

/usr/bin/cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Veuillez rapportez les erreurs et les bogues à cpufreq à vger.kernel.org, s'il vous plait.
analyse du CPU 0 :
pilote : acpi-cpufreq
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 160 us. //incompatible avec la MAO. Le buffer qui gère le pilote de son fait autour de 4µs.
limitation matérielle : 1.60 GHz - 2.40 GHz
plage de fréquence : 2.40 GHz, 1.60 GHz
régulateurs disponibles : conservative, ondemand, userspace, powersave, performance
tactique actuelle : la fréquence doit être comprise entre 1.60 GHz et 2.40 GHz.
Le régulateur "ondemand" est libre de choisir la vitesse
dans cette plage de fréquences.
la fréquence actuelle de ce CPU est 1.60 GHz.
des statistique concernant cpufreq:2.40 GHz:24,41%, 1.60 GHz:75,59% (40283)


Voilà, finalement ces scripts ne servent pas à grand-chose sur des ordinateurs récents qui ne consomment pas forcément 400 watts, mais feront quand même diminuer la consommation électrique, diminuer la chaleur et augmenter la longévité du processeur si l'ordinateur sert à autre chose que la M.A.O.

Bonne année !

LDVC@

l_d_v_c utilisateur non connecté
Résolu par ces deux scripts à appeler depuis qjackctl :

à l'exécution de Jack (mode performance, pas de changement de fréquences des processeurs)
#!/bin/bash
# performance.sh
# script to modify scheduler to cpu performance
# author : LDVC@
# 20151221 #the script performances

nb_cpu=$(cat /proc/cpuinfo | grep processor | wc -l)			#determine how many cpu cores in computer

for i in `seq 0 $(($nb_cpu-1))`;
	do cpufreq-selector -c $i -g ``performance'';			#change cpu scheduler to PERFORMANCE
done

exit 0


à l'extinction de Jack (mode économie, adaptation des fréquences des processeurs)
#!/bin/bash
# powersave.sh
# script to modify scheduler to cpu powersave
# author : LDVC@
# 20151221 #the script powersave

nb_cpu=$(cat /proc/cpuinfo | grep processor | wc -l)			#determine how many cpu cores in computer

for i in `seq 0 $(($nb_cpu-1))`;
	do cpufreq-selector -c $i -g ``powersave'';			#change cpu scheduler to POWERSAVE
done

exit 0

J'espère que mon post ne fait pas doublon. Je ne m'en sortais pas avec taskset et jack2, ensuite Ardour, ensuite les pluggins… alors on bascule entre powersave et performance, et le script s'adapte au nombre de processeurs. (vérifié pour 2 et 12 cœurs).

olinuxx utilisateur non connecté France
Super, merci pour le retour et le [résolu] l_d_v_c !

allany utilisateur non connecté
Très intéressant et... assez simple, merci l_d_v_c !

l_d_v_c utilisateur non connecté
De rien olinuxx et allany.

Réponse pour m2v2 : c'était un ordinateur personnel que j'ai donné à un ami musicien / professeur de musique et batteur de jazz.

Et effectivement j'obtenais des Xruns avec Jack2, moins de Xruns avec Jack1.

Afficher les articles :
Aller au forum :

Documentation [Afficher / Cacher]

Connexion
[Afficher / Cacher]


qube
r1

Mégaphone [Afficher / Cacher]

sub26nico, 15:43, lun. 23 Sep 2019: Salut et bienvenue à kidcore :-)
olinuxx, 14:12, dim. 22 Sep 2019: Bonjour et bienvenue à yrag cool
sub26nico, 11:36, ven. 20 Sep 2019: Salut et bienvenue à Dave, samplingunit, thinkcentre et Stratos :-)
sub26nico, 09:47, jeu. 19 Sep 2019: Salut et bienvenue à Luigi83 :-)
olinuxx, 14:33, mer. 18 Sep 2019: Bonjour et bienvenu à Knard cool
olinuxx, 13:17, dim. 15 Sep 2019: Bonjour et bienvenue à wwp et à Kraod cool
sub26nico, 22:18, sam. 14 Sep 2019: Salut et bienvenue à Gretsh56 :-)
olinuxx, 13:44, sam. 14 Sep 2019: Bonjour et bienvenue à T-Yo cool
PenZyh, 16:09, mar. 10 Sep 2019: Merci ^^
olinuxx, 16:08, mar. 10 Sep 2019: Bienvenue e bonjour également à PenZyh cool
olinuxx, 14:47, mar. 10 Sep 2019: Bonjour et bienvenue à SKUNKLOAD cool
sub26nico, 10:29, lun. 09 Sep 2019: Salut et bienvenue à aldepr :-)