Foro MetalAficion

CNC => CNC - Software y Controladores => Mensaje iniciado por: Fit0 en 18 Mayo 2015, 17:44

Título: Isolcpus en Debian?
Publicado por: Fit0 en 18 Mayo 2015, 17:44
Buenas compañeros,

En un arrebato de masoquismo, tomé la arrojada decisión de pasar mi BF20L a LinuxCNC. Resuelto, compré un ordenata viejo en eBay (HP dc5100) le instalé el combo Debian-Linuxcnc 2.6 que viene en el Live disc más reciente en Linuxcnc.org, y antes de conectar el ordenador a la máquina, me puse a trastear con el tema de la latencia, para reducirla al máximo.

Sin modificar nada en el sistema, me daban picos de alrededor de 62000 ns. Luego deshabilité el hyperthreading en la BIOS y me quedó una latencia "tranqui" de alrededor de 5000 ns, pero con picos de hasta 37000 ns. Pero como todavía queda espacio para mejorar, lo que quiero hacer ahora es aislar uno de los dos núcleos del ordenata para que se dedique a Linuxcnc exclusivamente.

He estado leyendo hasta quedarme bizco, y parece que eso se hace con una(s) línea(s) de código resumidas en "isolcpu =1", de modo que el cpu 0 se dedica a las tareas del hogar y el cpu 1 se dedica a fresar. Parece que en la época de Ubuntu (o antes del Grub 2 - a que parece que sé de lo que estoy hablando?  ;D) el tema era bastante simple porque se ponía lo de isolcpu al final del código en el boot manager y listo, pero en Grub 2 (que parece que es lo que lleva la versión de Debian que se distribuye con el Linuxcnc 2.6), es bastante enquilombado.

Hasta aquí he llegado, y busco y rebusco pero no parece haber mucho dedicado al isolcpu en Debian, más allá de reportes de que x probó meter un tochazo de líneas de código, luego metió mano un poco más y al final le funiconó.

Juro que me encantaría ser un super nerd informático pero me temo que los conocimientos no me alcanzan para estas cosas, y estoy bastante perdido con el tema. Agradecería mucho  .ereselmejor si alguno de nuestros magníficos compañeros del foro de los que ya se han hecho amigos del Linuxcnc me pudiera echar un cable, a ver si conseguimos aislar el dichoso núcleo!

Desde ya, muy agradecido  .brinda
Título: Re:Isolcpus en Debian?
Publicado por: alberttoy en 18 Mayo 2015, 18:47
Supongo que tienes localizada la siguiente pagina  The Isolcpus Boot Parameter And GRUB2 (http://wiki.linuxcnc.org/cgi-bin/wiki.pl?The_Isolcpus_Boot_Parameter_And_GRUB2)
Título: Re:Isolcpus en Debian?
Publicado por: alberttoy en 18 Mayo 2015, 18:52
Por lo que veo, tienes que copiar el siguiente archivo 07_rtai (http://wiki.linuxcnc.org/uploads/07_rtai) en la carpeta de conf del grub, le pones permiso de ejecución y haces un update-grub. En la siguiente carga debería manifestarse el cambio.
Título: Re:Isolcpus en Debian?
Publicado por: Fit0 en 18 Mayo 2015, 18:56
Muchas gracias Alberttoy. Sí, tenía ubicada esa página. Me la leí un par de veces (o más) y también le eché un vistazo al archivo 07_rtai, pero no termino de estar seguro de si se trata simplemente de copiar todo, o si hay que copiar solo algunas partes, porque veo que el archivo tiene muchos comentarios que no son script.

Y como no quiero meter la gamba...  :-\
Título: Re:Isolcpus en Debian?
Publicado por: alberttoy en 18 Mayo 2015, 19:06
El script se ejecuta durante la configuración del grub2.
Basicamente lo que hace es rellenar variables que luego afectan al comportamiento del configurador.
las lineas
RTAI_OPTS="isolcpus=1"
#RTAI_OPTS="isolcpus=1,2,3"
#RTAI_OPTS="nohlt ${RTAI_OPTS}"
#RTAI_OPTS="idle=poll ${RTAI_OPTS}"


Son las que importan. Parece que en sucesivas mejoras han añadido las comentadas que se podrian descomentar si conviene

Solo te hablo en teoria. A ver si alguien lo ha probado realmente
Título: Re:Isolcpus en Debian?
Publicado por: jordi3sk97 en 18 Mayo 2015, 19:14
Hay que leerse los comentarios del fichero y comentar o descomentar las lineas que cuadren con tu maquina,
#KAR: define new local strings for convenience
#     if you want to change the rtai-kernel boot parameters, here's an easy
#     place to do it.
#
#MAV: uncomment isolcpus=1 for dual core, isolcpus=1,2,3 for quad
#     these both assume hyperthreading is already disabled in bios
#
#     optionally uncomment nohlt and idle=poll lines to experiment with those
#     note: try idle=poll first as nohlt may cause increased power usage
#

una vez lo tienes adaptado

cp 07_rtai /etc/grub.d
chmod +x /etc/grub.d/07_rtai
update-grub
/////////////////////////////
O quizás se podría experimentar quitando el grub2 y volviendo a grub o al lilo ?
Título: Re:Isolcpus en Debian?
Publicado por: Fit0 en 18 Mayo 2015, 19:31
Cuando llegue a casa me pongo a experimentar (qué remedio!) y reporto. Ya veremos si llego a buen puerto, ya que la mayoría de estas líneas no tengo ni idea de lo que significan, así no que no estoy seguro de qué se puede cambiar y qué no, y en su caso, cómo.  .confuso2
Título: Re:Isolcpus en Debian?
Publicado por: alberttoy en 18 Mayo 2015, 19:39
A ver que mensajes te salen durante update-grub



Título: Re:Isolcpus en Debian?
Publicado por: Fit0 en 18 Mayo 2015, 23:53
Bueno, me bajé el archivo 07_rtai y lo instalé siguiendo las instrucciones en el wiki de linuxcnc. Las buenas noticias es que funciona. La línea "isolcpus=1" está ahora en Grub. No he comprobado si el núcleo tiene actividad alguna o no, ya que esa será otra habilidad que aprender y el día solamente tiene 24 horas...

Con 19 páginas de internet abiertas (una de ellas con Youtube), cuatro instancias de glxgears, moviendo ventanas, etc., en el test de latencia el jitter máximo es de 25500 ns., o sea que ha mejorado algo la cosa. Si no castigo a la máquina, la lectura es de unos 4500 ns.

Ahora me falta averiguar cómo se programa el cpu affinity, de modo que Linuxcnc use el núcleo número 1. ¿Alguien sabe cómo se hace eso?

Y otra cosa: la tarjeta que lleva el pc es una Nvidia, que tienen mala fama con Linux. Alguien sabe cómo hacer para desactivar el driver de la Nvidia y usar en su lugar uno genérico?

Gracias!
Título: Re:Isolcpus en Debian?
Publicado por: jmllosa en 19 Mayo 2015, 07:43
Si estas en modo masoka si, jajajaj pero eso es bieno, se aprende, lo que ya estaria de lujo es un tutorial de que ,como y que has hecho, vamos un paso a paso para tontos, si es posible claro. .bien
Título: Re:Isolcpus en Debian?
Publicado por: borondes2010 en 19 Mayo 2015, 08:21
Fit0..para la proxima vez que tengas menos tiempo libre y quieras que las cosas funcionen a la primera y sin andar modificando nada..

http://www.ebay.es/itm/HP-Compaq-DC7600-Intel-Pentium-D-3-40GHz-1GB-Ram-80GB-HD-Windows-XP-WIFI-/271702906881?pt=LH_DefaultDomain_3&hash=item3f42c15801

http://www.ebay.es/itm/KIT-PC2-6400-RAM-4Gb-2x2Gb-DDR2-800Mhz-240pin-Memoria-per-DESKTOP-DDR800-/231454680907?pt=LH_DefaultDomain_186&hash=item35e3c6274b


pdta..como unica mejora estaria muy bien tener 4gigas de ram y asi todavia funcionara mejor y todo por menos de 100 euros ;)
Título: Re:Isolcpus en Debian?
Publicado por: Fit0 en 19 Mayo 2015, 10:19
Jmllosa, sí, el tutorial lo hago, pero lo mío fueron palos de ciego, y no estoy seguro de haberlo hecho bien. Una vez conecte el ordenador a la BF20 veremos si lo hice bien... En informática y en electrónica, me temo que soy un nulo total :-X, pero a fuerza de masoquismo las cosas van saliendo  .bien

Michel, el ordenador que me pusiste en eBay es prácticamente igual al que compré yo, al menos en aspecto. El mío es un HP dc5100 dual core Pentium de 3.4Ghz y 2Gb de ram. En rendimiento no deberían andar lejos.

Me hiciste reír con lo del tiempo libre, que es precisamente lo que me falta y por eso me desespero!
Título: Re:Isolcpus en Debian?
Publicado por: abu en 19 Mayo 2015, 11:09
En cuanto al driver de la grafica, posiblemente (casi seguro, mas bien) que ya estes usando uno generico.
Los genericos que se usan con las Nvidea son el VESA y el Nouveau.

Para saber que driver usa tu tarjeta, abre una ventana de terminal y escribe:
lspci -v

Esto te dara un monton de informacion sobre tu maquina. En el portatil que tengo para "guarrear", esta es la info que el comando lspci da sobre mi video.

01:00.0 VGA compatible controller: NVIDIA Corporation NV31M [GeForce FX Go5600] (rev a1) (prog-if 00 [VGA controller])
   Subsystem: Hewlett-Packard Company Device 006a
   Flags: bus master, 66MHz, medium devsel, latency 40, IRQ 16
   Memory at d1000000 (32-bit, non-prefetchable) [size=16M]
   Memory at e0000000 (32-bit, prefetchable) [size=256M]
   Expansion ROM at <unassigned> [disabled]
   Capabilities: <access denied>
   Kernel driver in use: nouveau

La ultima linea dice que estoy usando el driver generico nouveau.

Con lo de los nucleos del micro no tengo experiencia..........tengo procesadores de un solo nucleo ::) ;D ;D ;D
Título: Re:Isolcpus en Debian?
Publicado por: Fit0 en 19 Mayo 2015, 11:22
Genial Abu, súper útil la información que me pasaste, muchas gracias  .bien. Cuando llegue a casa me fijo. Ya va quedando menos que afinar  .brinda
Título: Re:Isolcpus en Debian?
Publicado por: jordi3sk97 en 19 Mayo 2015, 15:50
taskset -c x programa

x es la cpu que has aislado

ejemplos

http://blog.desdelinux.net/como-asignar-un-programa-un-nucleo-del-cpu-usando-taskset/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+UsemosLinux+%28Usemos+Linux%29 (http://blog.desdelinux.net/como-asignar-un-programa-un-nucleo-del-cpu-usando-taskset/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+UsemosLinux+%28Usemos+Linux%29)
Título: Re:Isolcpus en Debian?
Publicado por: alberttoy en 19 Mayo 2015, 17:10
jordi3sk97, esto  me lo anoto. Es interesante. Pensaba que el linuxcnc ya buscaba los nucleos  reservados.
Título: Re:Isolcpus en Debian?
Publicado por: Fit0 en 19 Mayo 2015, 18:29
Gracias Jordi, eso es exactamente lo que estaba buscando  .palmas.

Entonces, en taskset, para ejecutar Linuxcnc en el núcleo 1 tengo que poner:

"taskset -c 1 linuxcnc"?
Título: Re:Isolcpus en Debian?
Publicado por: jordi3sk97 en 19 Mayo 2015, 19:35
Fit0: si
Albert: Yo he contestado a Fit0, ignoro lo que hace LinuxCNC , aún y así no vería yo con buenos ojos que un programa pudiera apropiarse de un core reservado manualmente durante el boot sin intervención del usuario.
Título: Re:Isolcpus en Debian?
Publicado por: abu en 19 Mayo 2015, 22:41
Cuidado.

El "programa" linuxcnc no es un ejecutable. Es un guion o script que corre en el shell Bash. Esta en el directorio ./usr/bin y comienza asi:

#!/bin/bash
################################################################################
# usage: linuxcnc [options] [<ini-file>]
#
# options:
#     -v = verbose - prints info as it works
#     -d = echos script commands to screen for debugging
#
# this version calls pickconfig.tcl to pick an ini file if one
# is not specified on the command line
#
################################################################################
# Author:
# License: GPL Version 2
# System: Linux
#   
# Copyright (c) 2004-2009 All rights reserved.
################################################################################

################################################################################
# 0. Values that come from configure
################################################################################
prefix=/usr
exec_prefix=${prefix}

LSMOD=/sbin/lsmod
PIDOF="/bin/pidof -x"
PS=/bin/ps
AWK=/usr/bin/awk
IPCS=/usr/bin/ipcs
KILL=/bin/kill
.
.
.
. etc, etc......

Por pura logica un script no puede correr en el/los procesador/es porque solo entiende binario, no texto puro. Es mas, los interfaces AXIS o gmoccapy son tambien scripts, en este caso en phyton.
Pero ademas, cada modulo de linuxcnc (como paquete completo) es un ejecutable independiente que se comunican entre si mediante un mecanismo que se llama NML (Neutral Message Language). Este mecanismo es manejado por otro ejecutable. Modulos que componen linuxcnc hay un monton; kinematic, iocontrol, interprete de gcode, planificador de trayectorias, HAL........etc,etc.
Y para liarla mas, los modulos son llamados por otros modulos o por script. Con esto quiero decir que generalmente no es posible asignar un core a un proceso en particular porque no tenemos forma de acceder a su llamada.............bueno, a no ser que toquemos las fuentes. Y no me meto con el parche RTAI que da a linux capacidad de tiempo real........................y paro ya de dar la brasa ;D

Mi recomendacion: olvidarse de momento de la asignacion de cores y esperar a que el equipo de desarrollo cumpla con la promesa que hace de que estan desarrollando un nuevo planificador que eliminara la necesidad de juguetear con isolcpus.

3. Latency Testing with 3.14 RTAI

There is a new scheduler in RTAI for 3.10 and 3.14. It no longer requires any isolcpus settings.

3.14 RTAI is in the testing stage at the time of this writing (September 2014). It should be in the official Linuxcnc release in the near future.



Título: Re:Isolcpus en Debian?
Publicado por: alberttoy en 19 Mayo 2015, 22:59
Interesante.  ¿como se esta haciendo entonces ? ¿buscando los pids de los procesos y reasignando?
Pero veo que hay bastantes versiones  posteriores a la 3.4
Título: Re:Isolcpus en Debian?
Publicado por: jordi3sk97 en 19 Mayo 2015, 23:40
No se porque un script y todos su procesos hijos no pueden correr en un core determinado  ???
 
Título: Re:Isolcpus en Debian?
Publicado por: abu en 23 Mayo 2015, 19:46
No se porque un script y todos su procesos hijos no pueden correr en un core determinado  ???

Pues basicamente, ya lo decia mas arriba, porque un script no corre en ningun core. Lo que corre es el shell que lee el script.
Y puesto que un script no puede constituirse en proceso propiamente dicho (solo lo pueden hacer los binarios), dificilmente puede dar lugar a procesos hijo.
Hay mas razones, pero  habria que meterse mas profundamente en la relacion de procesos padre/hijo, llamadas al sistema y otras lindezas, dificiles de discutir en pocas lineas. .brinda



Título: Re:Isolcpus en Debian?
Publicado por: jordi3sk97 en 23 Mayo 2015, 23:26
Bueno ..sin haberlo probado.
 
Si arranco un script de Bash, Python, php, o lo que me de la gana  desde un terminal tendrá un pid, lo puedo arrancar directamente en segundo plano liberando la shell, o lo puedo poner en segundo plano cuando quieral y sabiendo el pid utilizar taskset para mandarlo al core reservado, o incluso desde otro terminal puedo ejecutar el  taskset.
Y según la documentación cualquier fork del proceso que corra en el core reservado se mantendrá en ese  core

Y sigo sin ver la diferencia entre un binario o un programa interpretado ni si se arranca desde una shell o desde un clik del raton desde el entorno gráfico o automáticamente desde un cron, un anacron o al arrancar la maquina desde el init.d o al hacer un login un usuario, de cualquier manera cada proceso que se ejecute tendrá un pid y cada fork un pid nuevo y según la documentación con esto solo taskset ya se aclara. 

O rizando el rizo puedo ejecutar una shell nueva ya directamente en el core reservado antes de arrancar el script.

Siempre hay la opción de tocar el grub y hacer la prueba  o que Fit0 nos cuente si hay avances.

En todo caso no te extraña que haya tanta literatura en linuxcnc sobre el tema de isolcpu  si después resulta que como tu dices no es utilizable?