tagger tag portable picard musicbrainz kid3 editar brainz linux process core affinity

linux - portable - picard tag



Un nĂșcleo exclusivo para mi proceso (2)

Posible duplicado:
¿Cómo establecer la afinidad de la CPU de un pthread particular?

¿Hay una forma en Linux para deshabilitar un núcleo para todos los procesos excepto un proceso? Me gustaría tener un núcleo reservado solo y solo para mi proceso.

El comportamiento esperado es el siguiente:

  1. Los procesos que se generarán después de mi proceso, no deberían ver este núcleo y utilizar los otros.
  2. Cuando se genera mi proceso, todos los procesos que utilizan este núcleo deben cambiarse a otros núcleos.

Puede echar un vistazo a este artículo de lwn para una discusión sobre la solución del kernel para este problema.


Sí hay. Desea crear dos cpusets, uno con su CPU aislada y el otro con el resto de las CPU. Asigne su proceso especial al conjunto de datos aislado y todo el resto de los procesos al otro conjunto de recursos.

Aquí hay un ejemplo simple de script que lo hará:

mkdir /cpuset mount -t cpuset none /cpuset/ cd /cpuset mkdir sys # create sub-cpuset for system processes /bin/echo 0-2 > sys/cpuset.cpus # assign cpus (cores) 0-2 to this set # adjust if you have more/less cores /bin/echo 1 > sys/cpuset.cpu_exclusive /bin/echo 0 > sys/cpuset.mems mkdir rt # create sub-cpuset for my process /bin/echo 3 > rt/cpuset.cpus # assign cpu (core) 3 to this cpuset # adjust this to number of cores-1 /bin/echo 1 > rt/cpuset.cpu_exclusive /bin/echo 0 > rt/cpuset.mems /bin/echo 0 > rt/cpuset.sched_load_balance /bin/echo 1 > rt/cpuset.mem_hardwall # move all processes from the default cpuset to the sys-cpuset for T in `cat tasks`; do echo "Moving " $T; /bin/echo $T > sys/tasks; done

Ahora comienza tu proceso y descubre su PID y ve:

/bin/echo $PID > /cpuset/rt/tasks

Si desea revertir estos cambios, simplemente reinicie su sistema o haga:

# move tasks back from sys-cpuset to root cpuset for T in `cat /cpuset/sys/tasks`; do echo "Moving " $T; /bin/echo $T > /cpuset/tasks; done # remove sys-cpuset rmdir /cpuset/sys # move tasks back from rt-cpuset to root cpuset for T in `cat /cpuset/rt/tasks`; do echo "Moving " $T; /bin/echo $T > /cpuset/tasks; done # remove rt-cpuset rmdir /cpuset/rt # unmount and remove /cpuset umount /cpuset rmdir /cpuset

Aquí está la página del manual: http://www.kernel.org/doc/man-pages/online/pages/man7/cpuset.7.html

También hay envoltorios de shell más complicados que pueden ayudarlo a automatizar esto, como cset. Consulte: http://web.archive.org/web/20120428093126/http://www.suse.com/documentation/slerte_11/slerte_tutorial/data/slerte_tutorial.html