# Todos los procesos tienen la misma prioridad - niceness

## Txema

Ayer, toqueteando el niceness de portage, me di cuenta de que todos los procesos de mi sistema (salvo dos o tres afortunados) están a la misma prioridad, lo que rompe por completo cualquier lógica de repartidor de ciclos de CPU.

Un pequeño extracto de top:

```
top - 13:28:42 up 34 min,  6 users,  load average: 0.22, 0.11, 0.10

Tasks: 137 total,   1 running, 136 sleeping,   0 stopped,   0 zombie

Cpu(s): 10.2%us,  2.2%sy,  0.0%ni, 83.3%id,  3.9%wa,  0.2%hi,  0.2%si,  0.0%st

Mem:   2055580k total,  2020632k used,    34948k free,    35216k buffers

Swap:   522104k total,        0k used,   522104k free,   938468k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

 2739 chema     20   0  490m  61m  37m S    6  3.1   0:56.29 kwin

 3391 chema     20   0  823m 341m  43m S    4 17.0   2:32.72 firefox

 4222 chema     20   0  287m  31m  20m S    4  1.6   0:13.87 dolphin

 2634 root      20   0  174m  60m  19m S    2  3.0   1:07.33 X

    1 root      20   0  3836  672  572 S    0  0.0   0:00.29 init

    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd

    3 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/0

    4 root      20   0     0    0    0 S    0  0.0   0:00.00 ksoftirqd/0

    5 root      RT   0     0    0    0 S    0  0.0   0:00.00 watchdog/0

    6 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/1

    7 root      20   0     0    0    0 S    0  0.0   0:00.00 ksoftirqd/1

    8 root      RT   0     0    0    0 S    0  0.0   0:00.00 watchdog/1

    9 root      20   0     0    0    0 S    0  0.0   0:00.02 events/0

   10 root      20   0     0    0    0 S    0  0.0   0:00.00 events/1d

  385 root      20   0     0    0    0 S    0  0.0   0:00.42 kswapd0

  431 root      20   0     0    0    0 S    0  0.0   0:00.00 aio/0

  432 root      20   0     0    0    0 S    0  0.0   0:00.00 aio/1

  449 root      20   0     0    0    0 S    0  0.0   0:00.00 nfsiod

  454 root      15  -5     0    0    0 S    0  0.0   0:00.00 kslowd000

  455 root      15  -5     0    0    0 S    0  0.0   0:00.00 kslowd001
```

Como veis, dos procesos tienen -5, y el resto están todos a 0 (nice), y con la prioridad lo mismo, esos dos a 15 y el resto a 20, salvo unos cuantos beneficiados con el RT (supongo real time)

En el servidor, todo funciona perfectamente y tiene los valores lógicos:

```
top - 13:28:54 up 42 days, 20:50,  2 users,  load average: 0.01, 0.03, 0.05

Tasks:  98 total,   2 running,  96 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.4%us,  3.2%sy,  5.7%ni, 87.7%id,  1.3%wa,  0.3%hi,  1.3%si,  0.0%st

Mem:   1031964k total,  1002520k used,    29444k free,    81560k buffers

Swap:   506036k total,        0k used,   506036k free,   517176k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

 8734 p2p       39  19 45072  27m 2668 R 32.9  2.7   2164:01 mlnet

15669 squid     20   0  273m 258m 2144 S  3.9 25.7 145:12.56 squid

24190 server    39  19 1570m  20m 2964 S  3.9  2.0 783:07.52 utorrent.exe

23056 root      20   0  2480 1008  772 R  1.9  0.1   0:00.02 top

    1 root      20   0  1696  472  416 S  0.0  0.0   0:11.83 init

    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd

    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0

    4 root      15  -5     0    0    0 S  0.0  0.0   1:07.39 ksoftirqd/0

    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0

    6 root      15  -5     0    0    0 S  0.0  0.0   0:01.08 events/0

    7 root      15  -5     0    0    0 S  0.0  0.0   0:07.54 khelper

   13 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 async/mgr

  176 root      15  -5     0    0    0 S  0.0  0.0   0:03.25 kblockd/0

  178 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpid

  179 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpi_notify

  180 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kacpi_hotplug

  242 root      15  -5     0    0    0 S  0.0  0.0   7:40.92 ata/0

  243 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ata_aux

  244 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 ksuspend_usbd

  248 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 khubd

  251 root      15  -5     0    0    0 S  0.0  0.0   0:00.01 kseriod

  290 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 khpsbpkt

  314 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khungtaskd

  317 root      15  -5     0    0    0 S  0.0  0.0   3:45.77 kswapd0

  362 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 aio/0
```

Los procesos de sistema están, casi todos, a -5/15, los procesos nuevos están a 0/20 y los otros los he puesto yo manualmente a un nice de 19

¿Hay algo que se me esté pasando? porque no sé ni por donde empezar a mirar ^^"

Saludos.

----------

## esteban_conde

Pues no es mi fuerte ese parametro no obstante en los dos casos que muestras los resultados son parecidos ya que afecta a los procesos por igual, a ver si me explico, de forma global si todos los procesos tienen la misma niceness se ejecutarán de la misma forma de tal forma que tomará la prioridad el primero que sea llamado y daria igual -5 que 0 siempre que sea igual para todos y los que tengan niceness diferente tengan una distancia relativa igual a la base (hago un simil geometrico con la distancia relativa a un punto) sea la base -5 ó -10 ó 0 pero claro paso la las 7 primeras palabras de este post y doctores habrá que me den o me quiten la razón.

----------

## Txema

Empiezo a pensar que hay algo mal en mi sistema, es como si estuviera ignorando por completo las prioridades de los procesos, he colocado el niceness de portage a 19 (en /etc/make.conf) y cualquier compilación me deja el PC casi inservible, exactamente igual que si no estableciera esta variable en el make.conf, dejándola por defecto a 0.

¿Alguna idea de qué puede estar pasando?

----------

## esteban_conde

Me parece haber leido en algun sitio que cuanto más pequeño es el valor más prioridad de planificación adquiere el proceso, creo que con man nice vale.

----------

## Txema

Efectivamente, a menor nice, más prioridad, por eso se lo puse a 19 que es la prioridad más baja, para que tengan más prioridad los demás procesos y no me bloquee el PC casi por completo, como actualmente hace.

La verdad es que en este asunto estoy totalmente perdido porque no sé dónde mirar, y ni siquiera sé cuando comenzó   :Laughing:   Lo que sí sé es que antes no era así, y emerge no me bloqueaba el ordenador, es más podía ver películas y navegar sin ningún problema mientras compilaba, y ahora me corta hasta la música, que suena a saltos...

Saludos.

----------

## quilosaq

A mi resulta sospechoso que tengas una cantidad de memoria swap y no se use nada de ella. Comprueba que tienes bien configurado /etc/fstab y que la swap se monta correctamente.

----------

## Txema

¿Y para qué voy yo a querer que se use la swap con lo lenta que es? para eso puse el vm.swappiness a 0, mientras haya RAM que usar no quiero que toque la SWAP  :Wink: 

Mi /etc/fstab es este:

```
# /etc/fstab: static file system information.

#

# noatime turns off atimes for increased performance (atimes normally aren't

# needed; notail increases performance of ReiserFS (at the expense of storage

# efficiency).  It's safe to drop the noatime options if you want and to

# switch between notail / tail freely.

#

# The root filesystem should have a pass number of either 0 or 1.

# All other filesystems should have a pass number of 0 or greater than 1.

#

# See the manpage fstab(5) for more information.

#

# <fs>                  <mountpoint>    <type>          <opts>          <dump/pass>

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.

/dev/sda1               /boot           ext2            defaults,noatime,nodiratime        1 2

/dev/sda3               /               ext4            defaults,noatime,exec,nodiratime,commit=120     0 1

/dev/sda5               /var            ext2            defaults,noatime,nodiratime     0 1

/dev/sda6               /usr/src        ext4            defaults,noatime,nodiratime,commit=120        0 1

/dev/sda7               /usr/portage    ext2            defaults,noatime,nodiratime        0 1

/dev/sda8               /usr/portage/distfiles  ext4    defaults,noatime,nodiratime,commit=120        0 1

/dev/sda2               none            swap            sw              0 0

/dev/hdb                /mnt/dvd        auto            user,noauto,ro  0 0

/dev/hda                /mnt/dvdr       auto            defaults,user,noauto,rw  0 0

#/dev/fd0               /mnt/floppy     auto            noauto          0 0

/dev/sda9               /home           ext4            defaults,auto,user,rw,exec,noatime,nodiratime,commit=120      0 1

/dev/sdb1               /mnt/Datos      ext4            auto,user,rw,noatime,nodiratime,commit=120    0 1

/dev/sdc1               /mnt/Musica     ext4            auto,user,rw,noatime,nodiratime,commit=120      0 1

# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for

# POSIX shared memory (shm_open, shm_unlink).

# (tmpfs is a dynamically expandable/shrinkable ramdisk, and will

#  use almost no memory if not populated with files)

tmpfs                   /dev/shm        tmpfs           nodev,nosuid,noexec     0 0
```

Gracias.

----------

## esteban_conde

Emerge cualquier cosa y peganos el resultado de top mientras compila.

----------

## i92guboj

Sea cual sea el nivel nice de una aplicación recuerda que toda la gestión de procesos (incluyendo sus prioridades) se realiza a nivel de kernel. nice(1) no es más que una interfaz a dicha funcionalidad. Es posible que diferentes versiones del kernel se comporten de formas muy distintas, y también es bastante posible que la configuración del kernel afecte a las prioridades.

Otra cuestión a tener en cuenta es el planificador de cpu que uses. Hay varios parches por ahí que alteran el planificador de cpu del kernel. Quizás estés usando alguno de ellos en uno de tus equipos, pero no en el otro.

Puedes encontrar los documentos básicos en el directorio de tus fuentes del kernel, concretamente en Documentation/scheduler, y más concretamente aún en el archivo sched-nice-design.txt.

----------

