Re: Kernel Linux y renice/ionice

2011-02-01 Por tema Ricardo Albarracin B.
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

2011-02-01 Por tema Ricardo Munoz
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

2011-02-01 Por tema Davidlohr Bueso
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

2011-02-01 Por tema Ricardo Albarracin B.
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

2011-02-01 Por tema Ricardo Albarracin B.
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

2011-02-01 Por tema Enrique Herrera Noya


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

2011-02-01 Por tema Aldrin Martoq

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

2011-02-01 Por tema Daniel Serpell
¡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

2011-02-01 Por tema Ricardo Albarracin B.
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

2011-02-01 Por tema Ricardo Albarracin B.
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

2011-02-01 Por tema Ricardo Albarracin B.
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

2011-01-31 Por tema Eduardo Silva
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-01-31 Por tema Electrolinux
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-01-31 Por tema Eduardo Silva
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

2011-01-31 Por tema Davidlohr Bueso
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

2011-01-31 Por tema Electrolinux
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

2011-01-31 Por tema Electrolinux
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

2011-01-31 Por tema Aldrin Martoq
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/