OldGentooWiki:Gestion du microprocesseur et des process
De Gentoo-Quebec.
Cette page est actuellement en construction. SVP, veuillez ne pas toucher à son contenu tant et aussi longtemps que ce message apparaît en début de page.
Sommaire |
Introduction
Cette page vous montrera comment gérer la distribution de tâche, c'est à dire, d'allouer différentes processeurs (ou cores) à différent processus. Aussi, il vous sera expliqué comment gérer votre processeur AMD K10 afin de pouvoir augmenter ou diminué la puissances des différents cores afin d'exécuter les différents processus de la manière la plus efficace possible tout en générant le moins de chaleur possible et en consommant moins d'énergie possible.
Ajustement des pré-requis dans le kernel
Tout d'abors, nous devons faire des petites modification dans le kernel pour l'utilisation des outils de gestion et aussi pour avoir un maximum de performances au niveau de la gestion des cores par le système.
Ajout du ck patchset
Le patchset ck doit être installé afin de pouvoir avoir un CPU scheduler capable de gérer correctement les patites machines multicore/multi-processeur. Le scheduler qui viens de base avec le kernel Linux est fait pour les machine à 8192 processeurs et est mal adapté pour les petites machines SMP.
Il y à deux manière de disposé du ck patchset :
- Installation du ck patchset via les mathieu-sources
- Installation du ck patchset sur vos sources kernel actuelle manuellement
ajout du ck patchset via les mathieu sources
Pour ajouter le ck patchset via les mathieu-sources, vous devez premièrement ajouter gentoo-quebec à vos overlay.
- Layman -a gentoo-quebec
Ensuite vous pouvez emerger les mathieu-sources!
- emerge mathieu-sources
- cd /usr/src
- rm linux
- ln -s mathieu-sources-2.6.34 linux
- cd linux
- cp /proc/config.gz .
- gunzip config.gz
- mv config .config
Les mathieu-sources sont actuellement à la version 2.6.34 du kernel Linux et contiennent les même patch que les gentoo-sources plus le ck patchset ainsi que le support du Reiser4 comme système de fichier.
ajout du ck patchset manuellement
Pour l'installation du ck patchset manuellement, vous devez d'abord aller sur le site kernel.org aller récupérer le bon patchset. Vous pouvez aller à l'adresse suivante : http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/ . Sur cette page, vous clickez sur le version de kernel que vous avez ainsi que sur la révision du ck patchset, par exemple -> 2.6.34 -> 2.6.43-ck1. Ensuite vous downloader le patchset qui porte le nom comme patch-2.6.34-ck1.bz2.
Voici les instructions pour patcher votre kernel:
- cd /usr/src
- ls -l
- cp -Rav votre_kernel votre_kernel.old
- cd linux
- cp /ou/c/que/vous/avez/downloadé/le/patchset/patch-2.6.34-ck1.bz2 .
- bunzip2 patch-2.6.34-ck1.bz2.
- patch -p1 < patch-2.6.34-ck1
Si vous n'avez pas d'erreur (que des patch et des fuzz), vous êtes près à passer à l'étape suivante!
Modification du .config
Nous allons maintenent activer ou changer quelques options dans le kernel.
- make menuconfig
[ ] = Doit être désactivé
[*] ou [M] = Doit être activé en dur ou en module
General setup --->
[*] BFS cpu scheduler (pour une gestion correct du multicore)
[*] Control Group support ---> (Permet de crée des groups de têches)
[ ] Example debug cgroup subsystem
[*] Namespace cgroup subsystem
[*] Freezer cgroup subsystem (permet de geler tout les tâche du group voulu)
[*] Device controller for cgroups
[*] Cpuset support (Permet d'utiliser taskset)
[*] Include legacy /proc/<pid>/cpuset file
[ ] Resource counters
Processor type and features --->
[ ] Tickless System (Dynamic Ticks) (Peut causer des problèmes)
Preemption Model (Preemptible Kernel (Low-Latency Desktop)) ---> (Permet de rendre le système très réactif)
<*> /dev/cpu/*/msr - Model-specific register support (Permet de faire joujou dans les registres MSR du CPU (K10 uniquement))
<*> /dev/cpu/*/cpuid - CPU information support (Permet d'extraire des information sur le CPU)
Timer frequency (1000 HZ) ---> (1000 HZ = meilleur performance, ne pas utiliser 10000 HZ ou 100000 HZ)
Power management and ACPI options --->
CPU Frequency scaling --->
[*] CPU Frequency scaling
Default CPUFreq governor (performance) --->
-*- 'performance' governor
<*> 'powersave' governor
<*> 'userspace' governor for userspace frequency scaling
<*> 'ondemand' cpufreq policy governor
<*> 'conservative' cpufreq governor
<M> ACPI Processor P-States driver (CPU INTEL CORE*/I7)
<M> AMD Opteron/Athlon64 PowerNow! (CPU AMD K8/K10)
Compilation du kernel
Utilisation de la procédure standard de recompilation du kernel
Redémarrage de l'ordinateur
Redémarrez votre système sur votre nouveau kernel
Une fois le redémarrage effectué, il est vivement recommandé de modifier la variable MAKEOPTS dans le fichier /etc/make.conf pour y mettre le nombre exacte de CPU logique au lieu du traditionnel N+1 ou N+2. Donc on obtiens MAKEOPTS="-j4" pour un Phenom II X4 et MAKEOPTS="-j8" pour un Intel I7. Le BFS scheduler est beaucoup plus efficase pour gérer la distribution des processus donc si la valeurs MAKEOPTS contiends un chiffre suppérieur au nombre de CPU, perte de performance à la compilation il y à.
Gestion des processus
Pour la gestion des processur, j'utilise ps pour les affichers et j'utilise la commande taskset pour définir sur quel core les processus vont fonctionner.
Installation de taskset
taskset, qui fesais parti de schedutils, est maintenent inclu dans util-linux-2.13 et plus donc vous l'avez déjà installé sur vontre système!
Utilisation de taskset
taskset s'utilise simplement en ligne de commande, avec 1 ou 2 parametre tout simplement. Il peut s'utiliser de deux manière :
- Pour ajuster l'affinité pour un ou plusieurs core de un processus qui est en cour d'execution.
- Pour ajuster l'affinité pour un ou plusieurs core au lancement d'un nouveau processus.
L'order des core sur un CPU AMD K10 est le suivant:
01
23
Si taskset est utilisé au lancement d'un application, tout les fork et application lancé depuit celui-ci utiliseront les même affinité, ce qui est particulièrement utile pour des applications comme emerge ou gcc.
Exemple d'utilisation :
- Forcer le processus numéro 2237 à utilisé les deux derniers core sur une machine quad core:
- taskset -pc 2,3 2237
- démarrer un application qui utilisera 3 des 4 coeurs :
- taskset -c 0,1,2 emerge -uvaND world
- Utilisé deux application gourmantes de manière à répartire la chaleur le plus uniformément possible:
- taskset -c 1 wine EVE/eve.exe
- taskset -c 2 wine EVE2/eve.exe
Gestion du processeur K10
Le processeur à architecture K10 de AMD comme les Phenom et les Phenom II permettent le controle indépendant des coeurs ainsi que la modification des P-States via un interface serie : Les registres MSR. Il est donc tout à fait possible d'avoir 3 coeurs fonctionnant à 400Mhz et un fonctionnant à 3.6Ghz.
La modification des P-states peut endommager votre processeur AMD, Veuillez être sur que les valeurs que vous allez utiliser sont valide. Gentoo-Quebec ne peut être responsable des bris occasionné par ces manipulations.
Installation de k10ctl et k10ctl_wrapper
Utiliser cpufreqd pour une économie maximal
Utilisation de k10ctl_wrapper afin de gérer les diférents cores manuellement
k10ctl permet de modifier le power state de chaque core (ou de tout les coeurs en même temps). Il permet aussi de modifier les P-States (fréquence et voltage). la commande k10ctl_wrapper permet de modifier les p-states plus facilement qu'avec k10ctl.
Explication du fonctionnement de k10ctl.
Affichage des informations
Vous pouvez voir l'état des power states en utilisant la commande k10ctl [numéro du cpu]. Donc pour afficher les information des p-states du premier coeur, on tape:
On obtiens alors ceci:
VID interface mode: serial
CPU0
Current P-State: 3 Fastest P-State: 0
NbVid NbDid CpuVid CpuDid CpuFid UNb CpuMult UCpu PCore
P-State 0: 28 0 18 0 12 1200.0mV 14.00000 1325.0mV 25175mW
P-State 1: 28 0 20 0 4 1200.0mV 10.00000 1300.0mV 22360mW
P-State 2: 28 0 28 1 12 1200.0mV 7.00000 1200.0mV 19080mW
P-State 3: 28 0 36 1 0 1200.0mV 4.00000 1100.0mV 10010mW
Low Limit: 124 1 124 0.0mV 0.50000 0.0mV
High Limit: 18 1 18 1325.0mV 14.00000 1325.0mV
Target: 28 0 36 1 0 1200.0mV 4.00000 1100.0mV
Current: 28 0 18 1 0 1200.0mV 4.00000 1325.0mV
Actuellement, le coeur 0 de la machine que j'utilise est sur le power state 3 (Current P-State: 3). Les 4 premières ligne P-states indique les 4 P-State du core. Pour chaque P_State, on à les information des Id des différent paramètre ainsi que le coefficient multiplicateur de ceux-ci et la consomation en voltage et en wattage du P-State.
La ligne Low limit, je ne sais pas c'est quoi. La ligne High limit semble être le maximum enregistré dans les p-states.
La ligne target est ce que le P-State actuellement utilisé vise, on y vois que le coeur 0 veut fonctionner à 4X de coefficient multiplicateur et que il désire avoir au moins 1100mV (1.1Volts).
La ligne Current indique les valeurs actuelle. On y vois que le coeur est effectivement à 4.0X mais que le voltage est à 1.325V, ce qui veut dire que un des core fonctionne actuellement en P-State 0. Contrairement au coefficient multiplicateur, il n'est pas possible d'Avoir un voltage indépendant pour chaque coeurs.
k10ctl accept aussi d'affichier des information sur une suite de CPUs
VID interface mode: serial
CPU0
Current P-State: 3 Fastest P-State: 0
NbVid NbDid CpuVid CpuDid CpuFid UNb CpuMult UCpu PCore
P-State 0: 28 0 18 0 12 1200.0mV 14.00000 1325.0mV 25175mW
P-State 1: 28 0 20 0 4 1200.0mV 10.00000 1300.0mV 22360mW
P-State 2: 28 0 28 1 12 1200.0mV 7.00000 1200.0mV 19080mW
P-State 3: 28 0 36 1 0 1200.0mV 4.00000 1100.0mV 10010mW
Low Limit: 124 1 124 0.0mV 0.50000 0.0mV
High Limit: 18 1 18 1325.0mV 14.00000 1325.0mV
Target: 28 0 36 1 0 1200.0mV 4.00000 1100.0mV
Current: 28 0 18 1 0 1200.0mV 4.00000 1325.0mV
VID interface mode: serial
CPU1
Current P-State: 3 Fastest P-State: 0
NbVid NbDid CpuVid CpuDid CpuFid UNb CpuMult UCpu PCore
P-State 0: 28 0 18 0 12 1200.0mV 14.00000 1325.0mV 25175mW
P-State 1: 28 0 20 0 4 1200.0mV 10.00000 1300.0mV 22360mW
P-State 2: 28 0 28 1 12 1200.0mV 7.00000 1200.0mV 19080mW
P-State 3: 28 0 36 1 0 1200.0mV 4.00000 1100.0mV 10010mW
Low Limit: 124 1 124 0.0mV 0.50000 0.0mV
High Limit: 18 1 18 1325.0mV 14.00000 1325.0mV
Target: 28 0 36 1 0 1200.0mV 4.00000 1100.0mV
Current: 28 0 18 1 0 1200.0mV 4.00000 1325.0mV
VID interface mode: serial
CPU2
Current P-State: 0 Fastest P-State: 0
NbVid NbDid CpuVid CpuDid CpuFid UNb CpuMult UCpu PCore
P-State 0: 28 0 18 0 12 1200.0mV 14.00000 1325.0mV 25175mW
P-State 1: 28 0 20 0 4 1200.0mV 10.00000 1300.0mV 22360mW
P-State 2: 28 0 28 1 12 1200.0mV 7.00000 1200.0mV 19080mW
P-State 3: 28 0 36 1 0 1200.0mV 4.00000 1100.0mV 10010mW
Low Limit: 124 1 124 0.0mV 0.50000 0.0mV
High Limit: 18 1 18 1325.0mV 14.00000 1325.0mV
Target: 28 0 18 0 12 1200.0mV 14.00000 1325.0mV
Current: 28 0 18 0 12 1200.0mV 14.00000 1325.0mV
VID interface mode: serial
CPU3
Current P-State: 3 Fastest P-State: 0
NbVid NbDid CpuVid CpuDid CpuFid UNb CpuMult UCpu PCore
P-State 0: 28 0 18 0 12 1200.0mV 14.00000 1325.0mV 25175mW
P-State 1: 28 0 20 0 4 1200.0mV 10.00000 1300.0mV 22360mW
P-State 2: 28 0 28 1 12 1200.0mV 7.00000 1200.0mV 19080mW
P-State 3: 28 0 36 1 0 1200.0mV 4.00000 1100.0mV 10010mW
Low Limit: 124 1 124 0.0mV 0.50000 0.0mV
High Limit: 18 1 18 1325.0mV 14.00000 1325.0mV
Target: 28 0 36 1 0 1200.0mV 4.00000 1100.0mV
Current: 28 0 18 1 0 1200.0mV 4.00000 1325.0mV
Modification du P-State en cour
Il est possible de modifier le P-State en cour, ce qui permet de changer frequences et voltage de chaques coeurs sans passer par un deamon comme cpufred.
Pour changer le power state du deuxième coeur, il suffi de tapper:
Ce qui lui forcera le P-Mode 3. Si on ce fit et exemples si haut, cela indique un Coefficient de 4.0 et un voltage de 1100mV.
Il est aussi possible de changer tout les power mode en même temps, de la même manière qu'on à utiliser pour afficher les informations.
Qui aura pour effet de selectionner le 3e power mode sur tout les coeurs.
Modification des power states
Il est aussi possible de modifier les power states, il s'agit de la fonction la plus utile de k10ctl. Cela permet de créé des preset de performance/économie supplémentaire. Par exemple, nous pouvont utilisé cpufreqd pour controlé les p-states et faire varier la vitesse du processeur sur les 4 p-states de disponible. Avec k10ctl, il est possible de faire des préset de 4 p-states. Par défaut, pour un processeur de 2.8 Ghz, nous pouvont avoir les P-States pour les coef de 4x, 7x, 10x, 14.
Si vous le désirez, vous pouvez tout changer pour avoir 2x, 3x, 4x, 5x.. Ou bien 10x, 11x, 13x, 14x. Et comme les voltages sont tous modifiable, il est possible d'utiliser cpufreqd pour faire des preset d'économie extreme pour la nuit par exemple ou d'overclocker 1 ou 2 cores lorsque certaines application sont chargé.


