Re: Kernel Linux y renice/ionice
El Mon, 31 Jan 2011 23:28:42 -0300 Aldrin Martoq amar...@dcc.uchile.cl escribió: Mejor cuéntanos qué pretendes hacer... Respecto de renice y nice; lo único que hacen es otorgar o quitar tiempo de CPU, dándole mas o menos tiempo a los procesos según su prioridad. Precisamente eso reasignar más tiempo de CPU a algunos procesos críticos para evitar la perdida de datos en capturas de hasta 50KBPS a través de una USB, hay un buffer que se llena y hay datos que se pierden. La recoleción de datos llega a varios millones imagina esa taza en 5 a 10 minutos. Ahora, la convención es que esto NO lo maneje el propio programa, sino que lo hace el administrador del sistema. Por ejemplo, está corriendo un proceso de cálculos diarios (PID 1044) y se come toda la CPU, lo que baja el rendimiento de los procesos que están atendiendo peticiones en línea. Entonces, el administrador tiene 2 opciones : - al iniciar el proceso de cálculos diarios, indicarle al sistema que no ocupe mucha cpu: $ nice 20 /ruta/al/proceso/calculos_diarios - bajar la prioridad mientras se ejecuta $ renice 20 1044 El caso mío es distinto al que planteas, ya que uso un sistema de captura de datos de alto rendimiento y una opción es ir a un sistema operativo de tiempo real, pero antes es agotar todos los recursos antes de llegar a ese extremo, el problema lo resuelvo con máquinas más potentes pero no es la idea, el tema es con máquinas por ejemplo como las Atom. Por convención, estas son decisiones en el momento de operación del sistema, NO son decisiones que toma el mismo programa. Misma historia para el ionice (el cual desconocía). Si vas a mover esta lógica dentro de tu programa, tendrá que ser algo varias veces MEJOR y tal vez muy INTELIGENTE a lo que se estila. Bueno, si no nos cuentas en qué andas, no lo sabremos. Lo que indique... Si miras el man, en SEE_ALSO está la referencia a getpriority(2) y setpriority(2). Si lees esos man, veras que basta con añadir la capability CAP_SYS_NICE a tu programa (lo cual hasta donde sé también se estila dejarlo fuera de tu código, al momento de operación). Bueno, gracias veré esos detalles. Aldrin Martoq http://aldrin.martoq.cl/ -- Atentamente. +---+-+ | Ricardo Albarracin B. | email: ral...@gmail.com | +---+-+
Re: Kernel Linux y renice/ionice
El 1 de febrero de 2011 09:15, Ricardo Albarracin B. ral...@gmail.comescribió: El Mon, 31 Jan 2011 23:28:42 -0300 Aldrin Martoq amar...@dcc.uchile.cl escribió: Mejor cuéntanos qué pretendes hacer... Respecto de renice y nice; lo único que hacen es otorgar o quitar tiempo de CPU, dándole mas o menos tiempo a los procesos según su prioridad. Precisamente eso reasignar más tiempo de CPU a algunos procesos críticos para evitar la perdida de datos en capturas de hasta 50KBPS a través de una USB, hay un buffer que se llena y hay datos que se pierden. La recoleción de datos llega a varios millones imagina esa taza en 5 a 10 minutos. Ahora, la convención es que esto NO lo maneje el propio programa, sino que lo hace el administrador del sistema. Por ejemplo, está corriendo un proceso de cálculos diarios (PID 1044) y se come toda la CPU, lo que baja el rendimiento de los procesos que están atendiendo peticiones en línea. Entonces, el administrador tiene 2 opciones : - al iniciar el proceso de cálculos diarios, indicarle al sistema que no ocupe mucha cpu: $ nice 20 /ruta/al/proceso/calculos_diarios - bajar la prioridad mientras se ejecuta $ renice 20 1044 El caso mío es distinto al que planteas, ya que uso un sistema de captura de datos de alto rendimiento y una opción es ir a un sistema operativo de tiempo real, pero antes es agotar todos los recursos antes de llegar a ese extremo, el problema lo resuelvo con máquinas más potentes pero no es la idea, el tema es con máquinas por ejemplo como las Atom. Hola Tocayo, pq es un extremo usar un sistema operativo de tiempo real? -- Ricardo Mun~oz A. http://www.tux.clhttp://www.tux.cl http://twitter.com/ricardo406
Re: Kernel Linux y renice/ionice
On Tue, 2011-02-01 at 09:21 -0300, Ricardo Munoz wrote: El 1 de febrero de 2011 09:15, Ricardo Albarracin B. ral...@gmail.comescribió: El Mon, 31 Jan 2011 23:28:42 -0300 Aldrin Martoq amar...@dcc.uchile.cl escribió: Mejor cuéntanos qué pretendes hacer... Respecto de renice y nice; lo único que hacen es otorgar o quitar tiempo de CPU, dándole mas o menos tiempo a los procesos según su prioridad. Precisamente eso reasignar más tiempo de CPU a algunos procesos críticos para evitar la perdida de datos en capturas de hasta 50KBPS a través de una USB, hay un buffer que se llena y hay datos que se pierden. La recoleción de datos llega a varios millones imagina esa taza en 5 a 10 minutos. Ahora, la convención es que esto NO lo maneje el propio programa, sino que lo hace el administrador del sistema. Por ejemplo, está corriendo un proceso de cálculos diarios (PID 1044) y se come toda la CPU, lo que baja el rendimiento de los procesos que están atendiendo peticiones en línea. Entonces, el administrador tiene 2 opciones : - al iniciar el proceso de cálculos diarios, indicarle al sistema que no ocupe mucha cpu: $ nice 20 /ruta/al/proceso/calculos_diarios - bajar la prioridad mientras se ejecuta $ renice 20 1044 El caso mío es distinto al que planteas, ya que uso un sistema de captura de datos de alto rendimiento y una opción es ir a un sistema operativo de tiempo real, pero antes es agotar todos los recursos antes de llegar a ese extremo, el problema lo resuelvo con máquinas más potentes pero no es la idea, el tema es con máquinas por ejemplo como las Atom. Hola Tocayo, pq es un extremo usar un sistema operativo de tiempo real? Este problema no se soluciona necesariamente con linux-rt (o cualquier SO rt). Deberias asegurarte que tengas un preemptive kernel (CONFIG_PREEMPT).
Re: Kernel Linux y renice/ionice
El Tue, 1 Feb 2011 09:21:26 -0300 Ricardo Munoz rmu...@tux.cl escribió: Hola Tocayo, pq es un extremo usar un sistema operativo de tiempo real? Hola tocayo básicamente los que hay para la arquitectura que pretendo usar (ARM), son de pago... eso para mi es extremo :-) -- Atentamente. +---+-+ | Ricardo Albarracin B. | email: ral...@gmail.com | +---+-+
Re: Kernel Linux y renice/ionice
El Tue, 01 Feb 2011 09:30:16 -0300 Davidlohr Bueso d...@gnu.org escribió: Este problema no se soluciona necesariamente con linux-rt (o cualquier SO rt). Deberias asegurarte que tengas un preemptive kernel (CONFIG_PREEMPT). Tienes un link a este tema para leer lo que se podría lograr con esta característica? Buscaré en todo caso... gracias -- Atentamente. +---+-+ | Ricardo Albarracin B. | email: ral...@gmail.com | +---+-+
Re: Kernel Linux y renice/ionice
On 01/02/11 09:51, Ricardo Albarracin B. wrote: kernel (CONFIG_PREEMPT). veamos si te sirve esto http://kerneltrap.org/node/2702 http://kerneltrap.org/node/3440 http://kernel.xc.net/html/linux-2.6.4/arm/PREEMPT P-) -- Mis Certificaciones: Red Hat Certified System Administrato RHCSA Nº100223072 Red Hat Certified Technician (RHCT) Nº605010753835478 Novell Certified Linux Professional CLP 10
Re: Kernel Linux y renice/ionice
On Feb 1, 2011, at 9:15 AM, Ricardo Albarracin B. wrote: [...] El caso mío es distinto al que planteas, ya que uso un sistema de captura de datos de alto rendimiento y una opción es ir a un sistema operativo de tiempo real, pero antes es agotar todos los recursos antes de llegar a ese extremo, el problema lo resuelvo con máquinas más potentes pero no es la idea, el tema es con máquinas por ejemplo como las Atom. ¿ Has visto sched_setscheduler(2) ? Puedes programar en un sistema real soft en linux, es lo que hace pulseaudio por ejemplo (en top, cuando dice RT). Nunca lo he usado, y no sé si está para ARM, pero lo mas probable es que sí. Nos cuentas cómo te va ;) Aldrin Martoq http://aldrin.martoq.cl/
Re: Kernel Linux y renice/ionice
¡Hola! El Tue, Feb 01, 2011 at 09:15:22AM -0300, Ricardo Albarracin B. escribio: El Mon, 31 Jan 2011 23:28:42 -0300 Aldrin Martoq amar...@dcc.uchile.cl escribió: Mejor cuéntanos qué pretendes hacer... Precisamente eso reasignar más tiempo de CPU a algunos procesos críticos para evitar la perdida de datos en capturas de hasta 50KBPS a través de una USB, hay un buffer que se llena y hay datos que se pierden. La recoleción de datos llega a varios millones imagina esa taza en 5 a 10 minutos. [...] El caso mío es distinto al que planteas, ya que uso un sistema de captura de datos de alto rendimiento y una opción es ir a un sistema operativo de tiempo real, pero antes es agotar todos los recursos antes de llegar a ese extremo, el problema lo resuelvo con máquinas más potentes pero no es la idea, el tema es con máquinas por ejemplo como las Atom. Lo que más te conviene aquí es cambiar la clase de schedulling del programa, pasar de la clase estándar a la clase round-robin. Esto garantiza que tu aplicación va a recibir CPU cada cierto tiempo por lo menos. Para hacerlo, basta con utilizar la llamada sched_setscheduler(), ve en su página de manual. En nuestro caso, agregamos esto: void set_priority() { struct sched_param sp; sp.sched_priority = 10; sched_setscheduler(0, SCHED_RR, sp); } Todas las tareas en round-robin tienen más prioridad que las tareas estándares, esto significa que si usas el 100% de CPU, nada más se ejecutará en tu computador. Esto no es un problema si la aplicación sólo recibe datos, ya que debería realizar la recepción y luego volver a esperar más datos. El problema ahora es que no quieres que la aplicación tenga permisos de super-usuario. Si usas Linux mayor a 2.6.12, la solución es cambiar el límite de prioridad permitida de los procesos por medio de la capacidad RLIMIT_RTPRIO usando setrlimit. Esto se hace con el siguiente pseudocódigo: // Programa ejecutado con UID=0, cambia los límites setrlimit(...); if(!fork()) { // Cambia a usuario 1000 (por ejemplo) setuid(1000); // Ejecuta el programa execve(); } // Termina. exit(0); Obviamente, con manejo de errores, etc. Lamentablemente el programa padre debe todavía ser root, esto es difícil de evitar, ya que de alguna manera se tiene que dar el permiso. Nota que en versiones de Linux mayores a 2.6.25 puedes también fijar el límite RLIMIT_RTTIME, el cual limita el total de tiempo que un proceso de prioridad RT puede utilizar de una sola vez. Esto sirve para impedir que un proceso RT use el 100% de CPU y haga que el resto del sistema no responda. Ve en el manual de setrlimit. Por último, si insistes en que el proceso inicial (que fija los límites) no sea ejecutado como root, puedes utilizar el sistema de capacidades de Linux, ve capabilities(7), con énfasis en la sección llamada File Capabilities. La gracia es que, si usas un sistema de archivos que lo soporte, puedes asignar a un ejecutable la capacidad CAP_SYS_NICE, usando setcap cap_sys_nice+p programa. Lee bien, eso si, lo que esto permite al proceso. Lamentablemente, en UBIFS que usamos aquí no hay soporte para capabilities. Daniel.
Re: Kernel Linux y renice/ionice
El Tue, 1 Feb 2011 17:16:19 -0300 Daniel Serpell dserp...@gmail.com escribió: ¡Hola! Estimado amigo... un gusto como siempre.. Lo que más te conviene aquí es cambiar la clase de schedulling del programa, pasar de la clase estándar a la clase round-robin. Esto garantiza que tu aplicación va a recibir CPU cada cierto tiempo por lo menos. Perfecto... es la idea. Para hacerlo, basta con utilizar la llamada sched_setscheduler(), ve en su página de manual. En nuestro caso, agregamos esto: void set_priority() { struct sched_param sp; sp.sched_priority = 10; sched_setscheduler(0, SCHED_RR, sp); } bien... Todas las tareas en round-robin tienen más prioridad que las tareas estándares, esto significa que si usas el 100% de CPU, nada más se ejecutará en tu computador. Esto no es un problema si la aplicación sólo recibe datos, ya que debería realizar la recepción y luego volver a esperar más datos. Perfecto, esto me resolvería el overflow de los buffers. El problema ahora es que no quieres que la aplicación tenga permisos de super-usuario. Es la idea final... pero para probar no me complica que lo haga momentáneamente. Si usas Linux mayor a 2.6.12, la solución es cambiar el límite de prioridad permitida de los procesos por medio de la capacidad RLIMIT_RTPRIO usando setrlimit. Esto se hace con el siguiente pseudocódigo: // Programa ejecutado con UID=0, cambia los límites setrlimit(...); if(!fork()) { // Cambia a usuario 1000 (por ejemplo) setuid(1000); // Ejecuta el programa execve(); } // Termina. exit(0); Ok... se ve simple el cambio. Obviamente, con manejo de errores, etc. Lamentablemente el programa padre debe todavía ser root, esto es difícil de evitar, ya que de alguna manera se tiene que dar el permiso. cierto... Nota que en versiones de Linux mayores a 2.6.25 puedes también fijar el límite RLIMIT_RTTIME, el cual limita el total de tiempo que un proceso de prioridad RT puede utilizar de una sola vez. Esto sirve para impedir que un proceso RT use el 100% de CPU y haga que el resto del sistema no responda. Ve en el manual de setrlimit. Ok... Por último, si insistes en que el proceso inicial (que fija los límites) no sea ejecutado como root, puedes utilizar el sistema de capacidades de Linux, ve capabilities(7), con énfasis en la sección llamada File Capabilities. La gracia es que, si usas un sistema de archivos que lo soporte, puedes asignar a un ejecutable la capacidad CAP_SYS_NICE, usando setcap cap_sys_nice+p programa. Lee bien, eso si, lo que esto permite al proceso. ok... quedé con bastante pega por delante :-) Lamentablemente, en UBIFS que usamos aquí no hay soporte para capabilities. Ok... pero en definitiva no es tan grave por el momento, el primero objetivo a lograr es evitar el problema de perdida de datos en máquinas pequeñas luego veremos los temas de seguridad y escalamiento de privilegios. Daniel. Gracias estimado amigo por tus comentarios, han sido de mucha utilidad, siempre un gusto compartir experiencias. -- Atentamente. +---+-+ | Ricardo Albarracin B. | email: ral...@gmail.com | +---+-+
Re: Kernel Linux y renice/ionice
El Tue, 1 Feb 2011 12:43:57 -0300 Aldrin Martoq amar...@dcc.uchile.cl escribió: ¿ Has visto sched_setscheduler(2) ? Puedes programar en un sistema real soft en linux, es lo que hace pulseaudio por ejemplo (en top, cuando dice RT). Nunca lo he usado, y no sé si está para ARM, pero lo mas probable es que sí. Gracias Aldrin por tus comentarios, vere este tema. Nos cuentas cómo te va ;) Si... cuando tenga el tema funcionando... gracias de nuevo. Aldrin Martoq http://aldrin.martoq.cl/ -- Atentamente. +---+-+ | Ricardo Albarracin B. | email: ral...@gmail.com | +---+-+
Re: Kernel Linux y renice/ionice
El Tue, 01 Feb 2011 10:02:54 -0300 Davidlohr Bueso d...@gnu.org escribió: On Tue, 2011-02-01 at 09:51 -0300, Ricardo Albarracin B. wrote: El Tue, 01 Feb 2011 09:30:16 -0300 Davidlohr Bueso d...@gnu.org escribió: Este problema no se soluciona necesariamente con linux-rt (o cualquier SO rt). Deberias asegurarte que tengas un preemptive kernel (CONFIG_PREEMPT). Tienes un link a este tema para leer lo que se podría lograr con esta característica? En realidad no :) Basicamente antes (hasta hace solo unos 5/6 anos) el kernel solo cambiaba de contexto cuando el proceso estaba corriendo en espacio usuario. Con kernel preemptive puede cambiar en cualquier situacion, y para tu caso esto es conveniente pues puedes darle a tu programa una prioridad mas alta lo que hara que corra mas y los otros procesos tengan menos tiempo... esto es a muy grandes rasgos, quiza quieras ver: http://en.wikipedia.org/wiki/Preemption_%28computing%29 El tema es que las prioridades deben ser manejadas con ciertos criterios definidos, es por ello que no se trata de sólo cambiar una prioridad.. Suponiendo que sabes compiar el vanilla kernel (no se como cambiar la configuracion especificamente para cada distro), anda al menuconfig Processor type and features Preemption Model Preemptive kernel Esto habilitara el CONFIG_PREEMPT (lo puedes ver en el .config generado), luego compila normalmente. Supones bien... Hay varias aristas en este tema y mucho donde aplicar los esfuerzos, es un tema delicado que hay que entender bien ya que debes comprobar que los cambios realizados al kernel hacen lo que esperas y no es trivial comprobar que así sea. Gracias por los comentarios en todo caso. Suerte. -- Atentamente. +---+-+ | Ricardo Albarracin B. | email: ral...@gmail.com | +---+-+
Re: Kernel Linux y renice/ionice
hola estimado, Respuesta: man renice , en el manpage aparece el sgte ejemplo: renice +1 987 -u daemon root -p 32 would change the priority of process ID's 987 and 32, and all processes owned by users daemon and root. Users other than the super-user may only alter the priority of processes they own, and can only monotonically increase their ``nice value'' within the range 0 to PRIO_MAX (20). (This prevents overriding administrative fiats.) The super-user may alter the priority of any process and set the priority to any value in the range PRIO_MIN (-20) to PRIO_MAX. Useful priorities are: 20 (the affected processes will run only when nothing else in the system wants to), 0 (the ``base'' scheduling priority), anything negative (to make things go very fast). saludos 2011/1/31 Electrolinux ral...@gmail.com Estimados listeros: Alguno de ustedes ha usado estos comandos: renice: altera las prioridades para correr procesos ionice: asigna la prioridad de input/output (al parecer solo acceso disco duro) No he encontrado un ejemplo concreto de uso... si hay alguien que tenga o sepa, le agradeceré cualquier ayuda. Saludos Ricardo Albarracin B. -- Eduardo Silva http://edsiper.linuxchile.cl http://www.monkey-project.com
Re: Kernel Linux y renice/ionice
2011/1/31 Eduardo Silva edsi...@gmail.com hola estimado, Respuesta: man renice , en el manpage aparece el sgte ejemplo: renice +1 987 -u daemon root -p 32 [...] Gracias estimado, pero ya había visto el man y este ejemplo es sobre dos procesos en ejecución y su modificación en consola, el ejemplo que busco es desde un trozo de código en C y manipular o reasignar las prioridades, pero quien lo logra es el root y no puedo dar esos privilegios a la aplicación. Sigo en la busqueda gracias de todas maneras. Saludos Ricardo Albarracin B.
Re: Kernel Linux y renice/ionice
2011/1/31 Electrolinux ral...@gmail.com 2011/1/31 Eduardo Silva edsi...@gmail.com hola estimado, Respuesta: man renice , en el manpage aparece el sgte ejemplo: renice +1 987 -u daemon root -p 32 [...] Gracias estimado, pero ya había visto el man y este ejemplo es sobre dos procesos en ejecución y su modificación en consola, el ejemplo que busco es desde un trozo de código en C y manipular o reasignar las prioridades, pero ahhh, cambia la cosa :) quien lo logra es el root y no puedo dar esos privilegios a la aplicación. Sigo en la busqueda gracias de todas maneras. Si tu aplicacion no corre como super usuario, puedes: 1) Correr tu programa como root, hacer fork() y en el proceso hijo cambiar el running user, desde el padre puedes controlar la priodidad 2) Hacer un shell script que lance el proceso y le administre la prioridad En C lo puedes hacer con nice(2): The following example adds the value of the *incr* argument, -20, to the nice value of the calling process. #include unistd.h http://linux.die.net/include/unistd.h ... int incr = -20; int ret; ret = nice(incr); salu2.- -- Eduardo Silva http://edsiper.linuxchile.cl http://www.monkey-project.com
Re: Kernel Linux y renice/ionice
On Mon, 2011-01-31 at 13:20 -0300, Electrolinux wrote: 2011/1/31 Eduardo Silva edsi...@gmail.com hola estimado, Respuesta: man renice , en el manpage aparece el sgte ejemplo: renice +1 987 -u daemon root -p 32 [...] Gracias estimado, pero ya había visto el man y este ejemplo es sobre dos procesos en ejecución y su modificación en consola, el ejemplo que busco es desde un trozo de código en C y manipular o reasignar las prioridades, pero quien lo logra es el root y no puedo dar esos privilegios a la aplicación. No conozco bien renice, pero si ionice, que hace uso de ioprio_set(2), puedes ver el codigo en util-linux/schedutil/ionice.c (http://userweb.kernel.org/~kzak/util-linux-ng/) Tienes razon en lo de IO (como dice su nombre), es solo para controlar el block scheduler, que controla la frecuencia y permisos de lectura y escritura a disco. Considera tambien que el process scheduler tiene que primero darle tiempo de ejecucion al proceso, recien despues entra en ejecucion el ionice. Si al correr el proceso, no tiene un nice para hacer I/O en ese momento, se bloquea y tiene que esperar su turno nuevamente. Sigo en la busqueda gracias de todas maneras. Saludos Ricardo Albarracin B.
Re: Kernel Linux y renice/ionice
El 31 de enero de 2011 13:27, Eduardo Silva edsi...@gmail.com escribió: 2011/1/31 Electrolinux ral...@gmail.com Gracias estimado, pero ya había visto el man y este ejemplo es sobre dos procesos en ejecución y su modificación en consola, el ejemplo que busco es desde un trozo de código en C y manipular o reasignar las prioridades, pero ahhh, cambia la cosa :) quien lo logra es el root y no puedo dar esos privilegios a la aplicación. Sigo en la busqueda gracias de todas maneras. Si tu aplicacion no corre como super usuario, puedes: 1) Correr tu programa como root, hacer fork() y en el proceso hijo cambiar el running user, desde el padre puedes controlar la priodidad 2) Hacer un shell script que lance el proceso y le administre la prioridad En C lo puedes hacer con nice(2): The following example adds the value of the *incr* argument, -20, to the nice value of the calling process. #include unistd.h http://linux.die.net/include/unistd.h ... int incr = -20; int ret; ret = nice(incr); salu2.- Gracias... veré como me va y te cuento. Eduardo Silva http://edsiper.linuxchile.cl http://www.monkey-project.com Saludos Ricardo Albarracin B.
Re: Kernel Linux y renice/ionice
El 31 de enero de 2011 13:33, Davidlohr Bueso d...@gnu.org escribió: No conozco bien renice, pero si ionice, que hace uso de ioprio_set(2), puedes ver el codigo en util-linux/schedutil/ionice.c (http://userweb.kernel.org/~kzak/util-linux-ng/) Tienes razon en lo de IO (como dice su nombre), es solo para controlar el block scheduler, que controla la frecuencia y permisos de lectura y escritura a disco. Considera tambien que el process scheduler tiene que primero darle tiempo de ejecucion al proceso, recien despues entra en ejecucion el ionice. Si al correr el proceso, no tiene un nice para hacer I/O en ese momento, se bloquea y tiene que esperar su turno nuevamente. Bueno vere que sale de todo esto, gracias de nuevo. Saludos Ricardo Albarracin B.
Re: Kernel Linux y renice/ionice
On Jan 31, 2011, at 1:20 PM, Electrolinux wrote: 2011/1/31 Eduardo Silva edsi...@gmail.com hola estimado, Respuesta: man renice , en el manpage aparece el sgte ejemplo: renice +1 987 -u daemon root -p 32 [...] Gracias estimado, pero ya había visto el man y este ejemplo es sobre dos procesos en ejecución y su modificación en consola, el ejemplo que busco es desde un trozo de código en C y manipular o reasignar las prioridades, Mejor cuéntanos qué pretendes hacer... Respecto de renice y nice; lo único que hacen es otorgar o quitar tiempo de CPU, dándole mas o menos tiempo a los procesos según su prioridad. Ahora, la convención es que esto NO lo maneje el propio programa, sino que lo hace el administrador del sistema. Por ejemplo, está corriendo un proceso de cálculos diarios (PID 1044) y se come toda la CPU, lo que baja el rendimiento de los procesos que están atendiendo peticiones en línea. Entonces, el administrador tiene 2 opciones : - al iniciar el proceso de cálculos diarios, indicarle al sistema que no ocupe mucha cpu: $ nice 20 /ruta/al/proceso/calculos_diarios - bajar la prioridad mientras se ejecuta $ renice 20 1044 Por convención, estas son decisiones en el momento de operación del sistema, NO son decisiones que toma el mismo programa. Misma historia para el ionice (el cual desconocía). Si vas a mover esta lógica dentro de tu programa, tendrá que ser algo varias veces MEJOR y tal vez muy INTELIGENTE a lo que se estila. Bueno, si no nos cuentas en qué andas, no lo sabremos. pero quien lo logra es el root y no puedo dar esos privilegios a la aplicación. Sigo en la busqueda gracias de todas maneras. Si miras el man, en SEE_ALSO está la referencia a getpriority(2) y setpriority(2). Si lees esos man, veras que basta con añadir la capability CAP_SYS_NICE a tu programa (lo cual hasta donde sé también se estila dejarlo fuera de tu código, al momento de operación). Aldrin Martoq http://aldrin.martoq.cl/