En la mesura que els processadors multi-nucli es tornen cada vegada més comuns tant en servidors com en latops o PC d'escriptori, i fins i tot fins a dispositius mòbils, cada vegada són més les aplicacions optimitzades per a aquest tipus de sistemes. No obstant això, de vegades pot ser útil vincular un programa o procés a un o diversos nuclis específics. Vegem com aconseguir-ho ...
instal·lar taskset
L'eina taskset forma part de el paquet «util-linux». La major part de les distribucions Linux se amb el paquet pre-instal lat per defecte. En cas que taskset no mostrar, és possible instal·lar-lo de la següent manera:
En Debian / Ubuntu i derivats:
suo apt-get install util-linux
En Fedora i derivats:
sudo yum install util-linux
Veure l'afinitat de CPU (CPU affinity) d'un procés en execució
Per recuperar la informació d'afinitat de CPU d'un procés, cal utilitzar el següent format:
taskset -p PID
Per exemple, per comprovar l'afinitat de la CPU d'un procés amb PID 2915:
taskset -p 2915
Retorna el resultat:
pid 2915 s current affinity mask: ff
taskset retorna l'afinitat de CPU actual en un format de màscara de bits hexadecimal. En l'exemple, l'afinitat (representada en una màscara de bits hexadecimal) correspon a «11111111» en format binari, el que significa que el procés pot executar-se en qualsevol dels vuit nuclis de CPU diferents (de 0 a 7).
El bit més baix en una màscara de bits hexadecimal correspon a l'nucli ID 0, el segon bit més baix des de la dreta a l'nucli ID 1, el tercer bit més baix a l'nucli ID 2, etc. Així, per exemple, una afinitat de CPU «0x11» representa els nuclis ID 0 i 4.
taskset pot mostrar l'afinitat de CPU com una llista de processadors en lloc d'una màscara de bits, la qual cosa és molt més fàcil de llegir. Per utilitzar aquest format, cal executar taskset amb l'opció «-c». Per exemple:
taskset -cp 2915
Retorna el resultat:
pid 2915 s current affinity list: 0-7
Obligar un procés a que s'executi en un nucli específic
Utilitzant taskset, es pot assignar un procés en execució a un nucli específic de la CPU. Per a això, cal utilitzar el següent format:
taskset -p COREMASK PID taskset -cp CORE-LIST PID
Per exemple, per assignar un procés als nuclis 0 i 4, cal executar:
taskset -p 0x11 9030
El que retorna el resultat:
pid 9030 s current affinity mask: ff pid 9030 's new affinity mask: 11
En forma equivalent, es pot executar:
taskset -cp 0,4 9030
Amb l'opció «-c», es pot especificar una llista de IDs de nucli numèrics, separats per comes, o fins i tot es poden incloure rangs (per exemple, 0,2,5,6-10).
Llançar un programa utilitzant un nucli específic
taskset també permet llançar un nou programa utilitzant una sèrie de nuclis específics. Per a això, cal utilitzar-lo amb el següent format:
taskset COREMASK EXECUTABLE
Per exemple, per posar en marxa el programa VLC al nucli ID 0 de la CPU, cal utilitzar la següent comanda:
taskset -c 0 vlc
Dedicar un nucli únicament a un programa en especial
Si bé taskset permet assignar a un programa a un nucli en particular, això no vol dir que no hi hagi altres programes o processos que facin ús d'ell mateix. Per evitar això i dedicar un nucli sencer a un programa en especial, cal utilitzar el paràmetre de l'nucli «isolcpus», que permet reservar un nucli durant l'arrencada.
Per a això, cal afegir el paràmetre «isolcpus =» en la línia de el nucli en GRUB. Per exemple, per reservar els nuclis ID 0 i 1, cal afegir «isolcpus = 0,1».
Un cop fet això, el planificador de Linux no assignarà cap procés regular a l'nucli reservat, llevat que sigui específicament assignat amb taskset.
font: xmodul & taskset man pages.
Bon post :).
Bon post però sense ànims de trollear ...
Quina utilitat té assignar un programa a un nucli específic ???
Vull dir; si tens un equip amb 12 nuclis el més lògic seria que determinat programa s'executés fent ús d'aquests 12 nuclis i no limitar-ja que d'aquesta manera obtenim el major rendiment possible.
Al que sí li veig utilitat és l'opció que ens permet que a cert nucli no se li assigni cap procés deixant al seu ús exclusiu a determinat programa.
Té lògica el que esmentes, a l'deixar que el planificador faci servir tots els cores es balanceja millor els recursos, però de vegades es requereix un nucli de dedicacion exclusiva, com córrer una màquina virtual amb una tasca específica, el rendiment d'aquesta màquina millora substancialment a l' no haver-hi mes processos corrent en el nucli assignat.
atte
jvk85321
Exacte! Gràcies, jvk! 🙂
Però quan aquestes creant la màquina virtual et demana que escullis la quantitat de CPU assignades ... que serveix triar aquest valor si a la fi el sistema operatiu omet això i l'executa en totes les CPU ... Per ahi l'exemple no és el millor ...
Per fer funcionar Flash sobre Windows 8.1 x64, AMD i Firefox es recomanava triar que Flash s'executi només en un CPU, però a mi no em va funcionar. Seria còmode també que el agreguin (si és que no aquesta) als administradors de tasques dels diferents DE, o al menys a l'KDE.
ah no havia entès el final de l'comentari ... Però per això caldria banear a tots els processos sobre el CPU que executa la màquina virtual. O bé assignar-los a altres CPU. Interessant i molt bon comentari.
Serveix per crear superordinadors genis
Entès.
Gràcies per l'aclariment.
A l'reservar un nucli per a un programa específic que passa amb els fils d'execució ?, en el cas que ho faci amb un nucli amb HT reserva 2 fils d'ejecucion per al programa ??.
Potser aquesta comanda no sembli de molta utilitat en ordinadors amb diversos nuclis, però per als que tenim un Dual Core és bastant pràctic. Així per exemple, tinc un joc que quan l'obro em fa servir tots els nuclis de l'processador i si també tinc altres programes que necessiten la CPU (com alguna recerca amb grep en arxius grans) llavors el sistema s'alenteix. La solució és tan simple com limitar el joc a què només usi un dels nuclis.
També estic d'acord amb lf, realment haurien d'integrar això en els administradors de tasques (dels que he provat fins ara en Gentoo, crec que cap ho té), especialment quan en Windows és una cosa que existeix des de XP (botó dret sobre un procés> «Establir afinitat ...») però fa temps vaig trobar el següent script que converteix taskset en alguna cosa una mica més intuïtiu (originalment el van publicar aquí i fins i tot es mostren alguns casos en què resulta necessari gestionar l'ús dels nuclis):
#!/bin/bash
read -p 'Ingrese el ID del proceso en cuestión: ' ID
read -p 'Ingrese la lista de procesadores separados por comas: ' P
echo 'Su ID es '$ID' y los procesadores son '$P
sudo taskset -p -c $P $ID
read -p 'Listo, presione enter para finalizar' P
Amb algunes modificacions se li podria indicar el nom de l'procés en lloc de l'PID (o que accepti tots dos i que decideixi quan aquest paràmetre és una cosa o l'altra).
no hi ha una Interfax gràfica per taskset per als nous usuari els seria de grat