En Linux, la llamada del sistema para establecer la afinidad de la CPU para un proceso es sched_setaffinity
. Luego está la taskset
herramienta para hacerlo en la línea de comando.
Para que ese único programa se ejecute en una sola CPU, creo que querría algo como
taskset -c 1 ./myprogram
(establezca cualquier número de CPU como argumento para el -c
conmutador).
Eso debería estar lo suficientemente cerca de un sistema de procesador único, siempre y cuando sus otros procesos no se ejecuten demasiado en comparación con el que desea medir, o se programen en otras CPU. Si desea dedicar una CPU solo a ese proceso único y evitar que otros procesos se ejecuten en esa CPU, también necesitará establecer su afinidad.
Eso, no sé cómo hacerlo correctamente. Tendrá que configurar la afinidad del procesador init
desde muy temprano en el proceso de arranque para asegurarse de que se herede a todos los procesos del sistema. Como solución alternativa, puede usar taskset -c -p 0 $PID
para todos los demás procesos para forzarlos a ejecutarse solo en la CPU # 0.
systemd también tieneCPUAffinity=
que controlar la afinidad en los archivos de la unidad y hay un par de preguntas sobre cómo establecer la afinidad predeterminada aquí en unix.SE, pero no encontré ninguna con una buena solución.
Aunque como @Kamil Maciorowski comentó y respondió a otra pregunta en superuser.com , la configuración isolcpus=1
en la línea de comando del núcleo debería "aislar esa CPU de los algoritmos de programación generales", que es algo que puede desear.